@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,499 +1,499 @@
1
- import Decimal from 'decimal.js'
2
- import { g } from '../types/schema'
3
- import type { BaseListTypeInfo } from './type-info'
4
- import type { BaseFieldTypeInfo, CommonFieldConfig } from './config'
5
- import type { DatabaseProvider } from './core'
6
- import type {
7
- GArg,
8
- GInputType,
9
- GNullableInputType,
10
- InferValueFromArg,
11
- GField,
12
- GOutputType,
13
- GInputObjectType,
14
- GList,
15
- GNonNull,
16
- InferValueFromArgs,
17
- GObjectType,
18
- InferValueFromInputType,
19
- } from '@graphql-ts/schema'
20
- import type { JSONValue, NixxieContext, MaybePromise } from '.'
21
- import type { filters } from '../fields/filters'
22
-
23
- export { Decimal }
24
-
25
- export type BaseItem = { id: { toString(): string }; [key: string]: unknown }
26
-
27
- export type ListGraphQLTypes<ListTypeInfo extends BaseListTypeInfo> = {
28
- types: GraphQLTypesForList<ListTypeInfo>
29
- }
30
-
31
- export type FieldData<ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo> = {
32
- lists: {
33
- [Key in keyof ListTypeInfo['all']['lists']]: ListGraphQLTypes<ListTypeInfo['all']['lists'][Key]>
34
- }
35
- provider: DatabaseProvider
36
- listKey: ListTypeInfo['key']
37
- fieldKey: string
38
- }
39
-
40
- type ScalarNames = Exclude<keyof (typeof filters)[DatabaseProvider], 'enum'>
41
-
42
- export type SimpleFieldTypeInfo<Scalar extends ScalarNames> = {
43
- item: ScalarPrismaTypes[Scalar] | null
44
- inputs: {
45
- create: ScalarPrismaTypes[Scalar] | null | undefined
46
- update: ScalarPrismaTypes[Scalar] | null | undefined
47
- where: InferValueFromInputType<(typeof filters)[DatabaseProvider][Scalar]['required']> | null
48
- uniqueWhere: ScalarPrismaTypes[Scalar] | null | undefined
49
- orderBy: 'asc' | 'desc' | null
50
- }
51
- prisma: {
52
- create:
53
- | ScalarPrismaTypes[Scalar]
54
- | { set?: ScalarPrismaTypes[Scalar] | null }
55
- | null
56
- | undefined
57
- update:
58
- | ScalarPrismaTypes[Scalar]
59
- | { set?: ScalarPrismaTypes[Scalar] | null }
60
- | null
61
- | undefined
62
- }
63
- }
64
-
65
- export type FieldTypeFunc<ListTypeInfo extends BaseListTypeInfo> = (
66
- data: FieldData<ListTypeInfo>
67
- ) => NextFieldType<
68
- DBField,
69
- GArg<GInputType> | undefined,
70
- GArg<GInputType>,
71
- GArg<GNullableInputType, false>,
72
- GArg<GNullableInputType, false>,
73
- GArg<GNullableInputType, false>,
74
- ListTypeInfo
75
- >
76
-
77
- export type NextFieldType<
78
- TDBField extends DBField = DBField,
79
- CreateArg extends GArg<GInputType> | undefined = GArg<GInputType> | undefined,
80
- UpdateArg extends GArg<GInputType> = GArg<GInputType>,
81
- UniqueWhereArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
82
- OrderByArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
83
- FilterArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
84
- ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo,
85
- > = {
86
- dbField: TDBField
87
- } & FieldTypeWithoutDBField<
88
- TDBField,
89
- CreateArg,
90
- UpdateArg,
91
- UniqueWhereArg,
92
- OrderByArg,
93
- FilterArg,
94
- ListTypeInfo
95
- >
96
-
97
- export type ScalarPrismaTypes = {
98
- String: string
99
- Boolean: boolean
100
- Int: number
101
- Float: number
102
- DateTime: Date
103
- BigInt: bigint
104
- Json: JSONValue
105
- Decimal: Decimal
106
- Bytes: Uint8Array
107
- }
108
-
109
- type Literal<T> = {
110
- kind: 'literal'
111
- value: T
112
- }
113
-
114
- export type ScalarDBFieldDefault<
115
- Scalar extends keyof ScalarPrismaTypes = keyof ScalarPrismaTypes,
116
- Mode extends 'required' | 'many' | 'optional' = 'required' | 'many' | 'optional',
117
- > = Mode extends 'many'
118
- ? never
119
- :
120
- | {
121
- String:
122
- | Literal<string>
123
- | { kind: 'uuid'; version?: 4 | 7 }
124
- | { kind: 'cuid'; version?: 1 | 2 }
125
- | { kind: 'ulid' }
126
- | { kind: 'nanoid'; length?: number }
127
- | { kind: 'random'; bytes: number; encoding: 'hex' | 'base64url' }
128
- Boolean: Literal<boolean>
129
- Json: Literal<string>
130
- Float: Literal<number>
131
- Int: Literal<number> | { kind: 'autoincrement' }
132
- BigInt: Literal<bigint> | { kind: 'autoincrement' }
133
- DateTime: Literal<string> | { kind: 'now' }
134
- Decimal: Literal<string>
135
- Bytes: Literal<Uint8Array>
136
- }[Scalar]
137
- | { kind: 'dbgenerated'; value: string }
138
-
139
- export type ScalarDBField<
140
- Scalar extends keyof ScalarPrismaTypes,
141
- Mode extends 'required' | 'many' | 'optional',
142
- > = {
143
- kind: 'scalar'
144
- scalar: Scalar
145
- mode: Mode
146
- default?: ScalarDBFieldDefault<Scalar, Mode> | undefined
147
- extendPrismaSchema?: (field: string) => string
148
- index?: 'unique' | 'index' | undefined
149
-
150
- map?: string
151
- nativeType?: string
152
- updatedAt?: Scalar extends 'DateTime' ? boolean : never
153
- }
154
-
155
- export type RelationDBField<Mode extends 'many' | 'one'> = {
156
- kind: 'relation'
157
- mode: Mode
158
- extendPrismaSchema?: (field: string) => string
159
-
160
- list: string
161
- field?: string
162
- foreignKey?: { one: true | { map: string }; many: undefined }[Mode]
163
- relationName?: { one: undefined; many: string }[Mode]
164
- }
165
-
166
- export type EnumDBField<Value extends string, Mode extends 'required' | 'many' | 'optional'> = {
167
- kind: 'enum'
168
- name: string
169
- mode: Mode
170
- default?: { kind: 'literal'; value: Value }
171
- extendPrismaSchema?: (field: string) => string
172
- index?: 'unique' | 'index'
173
-
174
- map?: string
175
- values: readonly Value[]
176
- }
177
-
178
- export const orderDirectionEnum = g.enum({
179
- name: 'OrderDirection',
180
- values: g.enumValues(['asc', 'desc']),
181
- })
182
-
183
- export const QueryMode = g.enum({
184
- name: 'QueryMode',
185
- values: g.enumValues(['default', 'insensitive']),
186
- })
187
-
188
- export type NoDBField = { kind: 'none' }
189
-
190
- // TODO: merge
191
- export type ScalarishDBField =
192
- | ScalarDBField<keyof ScalarPrismaTypes, 'required' | 'many' | 'optional'>
193
- | EnumDBField<string, 'required' | 'many' | 'optional'>
194
-
195
- export type RealDBField = ScalarishDBField | RelationDBField<'many' | 'one'>
196
-
197
- export type MultiDBField<Fields extends Record<string, ScalarishDBField>> = {
198
- kind: 'multi'
199
- fields: Fields
200
- extendPrismaSchema?: (field: string) => string
201
- }
202
-
203
- export type DBField = RealDBField | NoDBField | MultiDBField<Record<string, ScalarishDBField>>
204
-
205
- // TODO: this isn't right for create
206
- // for create though, db level defaults need to be taken into account for when to not allow undefined
207
- type DBFieldToInputValue<TDBField extends DBField> =
208
- TDBField extends ScalarDBField<infer Scalar, infer Mode>
209
- ? {
210
- optional: ScalarPrismaTypes[Scalar] | null | undefined
211
- required: ScalarPrismaTypes[Scalar] | undefined
212
- many: readonly ScalarPrismaTypes[Scalar][] | undefined
213
- }[Mode]
214
- : TDBField extends RelationDBField<'many' | 'one'>
215
- ? { connect?: object; disconnect?: boolean } | undefined
216
- : TDBField extends EnumDBField<infer Value, infer Mode>
217
- ? {
218
- optional: Value | null | undefined
219
- required: Value | undefined
220
- many: readonly Value[] | undefined
221
- }[Mode]
222
- : TDBField extends NoDBField
223
- ? undefined
224
- : TDBField extends MultiDBField<infer Fields>
225
- ? // note: this is very intentionally not optional and DBFieldToInputValue will add | undefined to force people to explicitly show what they are not setting
226
- { [Key in keyof Fields]: DBFieldToInputValue<Fields[Key]> }
227
- : never
228
-
229
- type DBFieldUniqueWhere<TDBField extends DBField> =
230
- TDBField extends ScalarDBField<infer Scalar, 'optional' | 'required'>
231
- ? Scalar extends 'String' | 'Int'
232
- ? {
233
- String: string
234
- Int: number
235
- }[Scalar]
236
- : any
237
- : any
238
-
239
- type DBFieldToOutputValue<TDBField extends DBField> =
240
- TDBField extends ScalarDBField<infer Scalar, infer Mode>
241
- ? {
242
- optional: ScalarPrismaTypes[Scalar] | null
243
- required: ScalarPrismaTypes[Scalar]
244
- many: readonly ScalarPrismaTypes[Scalar][]
245
- }[Mode]
246
- : TDBField extends RelationDBField<infer Mode>
247
- ? {
248
- one: () => Promise<BaseItem>
249
- many: {
250
- findMany(args: FindManyArgsValue): Promise<BaseItem[]>
251
- count(args: { where: FindManyArgsValue['where'] }): Promise<number>
252
- }
253
- }[Mode]
254
- : TDBField extends EnumDBField<infer Value, infer Mode>
255
- ? {
256
- optional: Value | null
257
- required: Value
258
- many: readonly Value[]
259
- }[Mode]
260
- : TDBField extends NoDBField
261
- ? undefined
262
- : TDBField extends MultiDBField<infer Fields>
263
- ? { [Key in keyof Fields]: DBFieldToOutputValue<Fields[Key]> }
264
- : never
265
-
266
- export type OrderByFieldInputArg<Val, TArg extends GArg<GNullableInputType>> = {
267
- arg: TArg
268
- } & ResolveFunc<
269
- (
270
- value: Exclude<InferValueFromArg<TArg>, null | undefined>,
271
- context: NixxieContext
272
- ) => MaybePromise<Val>
273
- >
274
-
275
- type FieldInputResolver<Input, Output, RelationshipInputResolver> = (
276
- value: Input,
277
- context: NixxieContext,
278
- relationshipInputResolver: RelationshipInputResolver
279
- ) => MaybePromise<Output>
280
-
281
- type DBFieldFiltersInner<TDBField extends DBField> = Record<string, any>
282
-
283
- type DBFieldFilters<TDBField extends DBField> =
284
- | ({
285
- AND?: DBFieldFiltersInner<TDBField>
286
- OR?: DBFieldFiltersInner<TDBField>
287
- NOT?: DBFieldFiltersInner<TDBField>
288
- } & DBFieldFiltersInner<TDBField>)
289
- | null
290
-
291
- export type WhereFieldInputArg<TDBField extends DBField, TArg extends GArg<GInputType, any>> = {
292
- arg: TArg
293
- } & ResolveFunc<
294
- FieldInputResolver<
295
- Exclude<InferValueFromArg<TArg>, undefined>,
296
- DBFieldFilters<TDBField>,
297
- any
298
- // i think this is broken because variance?
299
- // TDBField extends RelationDBField<infer Mode>
300
- // ? (
301
- // input: {
302
- // many: types.InferValueFromArg<types.Arg<TypesForList['manyRelationWhere']>>;
303
- // one: types.InferValueFromArg<types.Arg<TypesForList['where']>>;
304
- // }[Mode]
305
- // ) => Promise<any>
306
- // : undefined
307
- >
308
- >
309
-
310
- export type UpdateFieldInputArg<TDBField extends DBField, TArg extends GArg<GInputType, any>> = {
311
- arg: TArg
312
- } & ResolveFunc<
313
- FieldInputResolver<
314
- InferValueFromArg<TArg>,
315
- DBFieldToInputValue<TDBField>,
316
- any
317
- // i think this is broken because variance?
318
- // TDBField extends RelationDBField<infer Mode>
319
- // ? (
320
- // input: graphql.InferValueFromArg<graphql.Arg<TypesForList['relateTo'][Mode]['create']>>
321
- // ) => Promise<any>
322
- // : undefined
323
- >
324
- >
325
-
326
- type CreateFieldInputResolver<Input, TDBField extends DBField> = FieldInputResolver<
327
- Input,
328
- DBFieldToInputValue<TDBField>,
329
- any
330
- // i think this is broken because variance?
331
- // TDBField extends RelationDBField<infer Mode>
332
- // ? (
333
- // input: graphql.InferValueFromArg<graphql.Arg<TypesForList['relateTo'][Mode]['create']>>
334
- // ) => Promise<any>
335
- // : undefined
336
- >
337
-
338
- export type CreateFieldInputArg<
339
- TDBField extends DBField,
340
- TArg extends GArg<GInputType, any> | undefined,
341
- > = {
342
- arg: TArg
343
- } & (TArg extends GArg<GInputType, any>
344
- ? InferValueFromArg<TArg> extends DBFieldToInputValue<TDBField>
345
- ? {
346
- resolve?: CreateFieldInputResolver<InferValueFromArg<TArg>, TDBField>
347
- }
348
- : {
349
- resolve: CreateFieldInputResolver<InferValueFromArg<TArg>, TDBField>
350
- }
351
- : {
352
- resolve: CreateFieldInputResolver<undefined, TDBField>
353
- })
354
-
355
- type UnwrapMaybePromise<T> = T extends Promise<infer Resolved> ? Resolved : T
356
-
357
- type ResolveFunc<Func extends (firstArg: any, ...args: any[]) => any> =
358
- Parameters<Func>[0] extends UnwrapMaybePromise<ReturnType<Func>>
359
- ? { resolve?: Func }
360
- : { resolve: Func }
361
-
362
- export type UniqueWhereFieldInputArg<Val, TArg extends GArg<GInputType>> = {
363
- arg: TArg
364
- } & ResolveFunc<
365
- (
366
- value: Exclude<InferValueFromArg<TArg>, undefined | null>,
367
- context: NixxieContext
368
- ) => MaybePromise<Val>
369
- >
370
-
371
- type FieldTypeOutputField<TDBField extends DBField> = GField<
372
- { value: DBFieldToOutputValue<TDBField>; item: BaseItem },
373
- any,
374
- GOutputType<NixxieContext>,
375
- DBFieldToOutputValue<TDBField>,
376
- NixxieContext
377
- >
378
-
379
- export type OrderDirection = 'asc' | 'desc'
380
-
381
- type DBFieldToOrderByValue<TDBField extends DBField> = TDBField extends ScalarishDBField
382
- ? OrderDirection | undefined
383
- : TDBField extends MultiDBField<infer Fields>
384
- ? { [Key in keyof Fields]: DBFieldToOrderByValue<Fields[Key]> }
385
- : undefined
386
-
387
- export type FieldTypeWithoutDBField<
388
- TDBField extends DBField = DBField,
389
- CreateArg extends GArg<GInputType> | undefined = GArg<GInputType> | undefined,
390
- UpdateArg extends GArg<GInputType> = GArg<GInputType>,
391
- UniqueWhereArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
392
- OrderByArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
393
- FilterArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
394
- ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo,
395
- FieldTypeInfo extends BaseFieldTypeInfo = BaseFieldTypeInfo,
396
- > = {
397
- input?: {
398
- uniqueWhere?: UniqueWhereFieldInputArg<DBFieldUniqueWhere<TDBField>, UniqueWhereArg>
399
- where?: WhereFieldInputArg<TDBField, FilterArg>
400
- create?: CreateFieldInputArg<TDBField, CreateArg>
401
- update?: UpdateFieldInputArg<TDBField, UpdateArg>
402
- orderBy?: OrderByFieldInputArg<DBFieldToOrderByValue<TDBField>, OrderByArg>
403
- }
404
- output: FieldTypeOutputField<TDBField>
405
- views: string
406
- extraOutputFields?: Record<string, FieldTypeOutputField<TDBField>>
407
- getAdminMeta?: () => JSONValue
408
- unreferencedConcreteInterfaceImplementations?: readonly g<typeof g.object<any>>[]
409
- __ksTelemetryFieldTypeName?: string
410
- } & CommonFieldConfig<ListTypeInfo, FieldTypeInfo>
411
-
412
- type AnyInputObj = GInputObjectType<Record<string, GArg<GInputType>>>
413
-
414
- export type GraphQLTypesForList<ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo> = {
415
- create: AnyInputObj | typeof g.Empty
416
- update: AnyInputObj | typeof g.Empty
417
- uniqueWhere: GInputObjectType<{
418
- id: GArg<typeof g.ID>
419
- [key: string]: GArg<GNullableInputType>
420
- }>
421
- where: AnyInputObj
422
- orderBy: AnyInputObj
423
- output: GObjectType<ListTypeInfo['item'], NixxieContext<ListTypeInfo['all']>>
424
- findManyArgs: FindManyArgs
425
- relateTo: {
426
- one: {
427
- create: GInputObjectType<{
428
- create?: GArg<GraphQLTypesForList<ListTypeInfo>['create']>
429
- connect: GArg<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>
430
- }>
431
- update: GInputObjectType<{
432
- create?: GArg<GraphQLTypesForList<ListTypeInfo>['create']>
433
- connect: GArg<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>
434
- disconnect: GArg<typeof g.Boolean>
435
- }>
436
- }
437
- many: {
438
- where: GInputObjectType<{
439
- every: GArg<AnyInputObj>
440
- some: GArg<AnyInputObj>
441
- none: GArg<AnyInputObj>
442
- }>
443
- create: GInputObjectType<{
444
- create?: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['create']>>>
445
- connect: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
446
- set: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
447
- }>
448
- update: GInputObjectType<{
449
- create?: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['create']>>>
450
- connect: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
451
- disconnect: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
452
- set: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
453
- }>
454
- }
455
- }
456
- }
457
-
458
- export type FindManyArgs = {
459
- where: GArg<GNonNull<GraphQLTypesForList['where']>, true>
460
- orderBy: GArg<GNonNull<GList<GNonNull<GraphQLTypesForList['orderBy']>>>, true>
461
- take: GArg<typeof g.Int>
462
- skip: GArg<GNonNull<typeof g.Int>, true>
463
- cursor: GArg<GraphQLTypesForList['uniqueWhere']>
464
- }
465
-
466
- export type FindManyArgsValue = InferValueFromArgs<FindManyArgs>
467
-
468
- // fieldType(dbField)(fieldInfo) => { ...fieldInfo, dbField };
469
- export function fieldType<TDBField extends DBField, ListTypeInfo extends BaseListTypeInfo>(
470
- dbField: TDBField
471
- ) {
472
- return function fieldTypeWrapper<
473
- CreateArg extends GArg<GInputType> | undefined,
474
- UpdateArg extends GArg<GInputType>,
475
- UniqueWhereArg extends GArg<GNullableInputType, false>,
476
- OrderByArg extends GArg<GNullableInputType, false>,
477
- FilterArg extends GArg<GNullableInputType, false>,
478
- >(
479
- graphQLInfo: FieldTypeWithoutDBField<
480
- TDBField,
481
- CreateArg,
482
- UpdateArg,
483
- UniqueWhereArg,
484
- OrderByArg,
485
- FilterArg,
486
- ListTypeInfo
487
- >
488
- ): NextFieldType<
489
- DBField,
490
- GArg<GInputType> | undefined,
491
- GArg<GInputType>,
492
- GArg<GNullableInputType, false>,
493
- GArg<GNullableInputType, false>,
494
- GArg<GNullableInputType, false>,
495
- any
496
- > {
497
- return { ...graphQLInfo, dbField } as any
498
- }
499
- }
1
+ import Decimal from 'decimal.js'
2
+ import { g } from '../types/schema'
3
+ import type { BaseListTypeInfo } from './type-info'
4
+ import type { BaseFieldTypeInfo, CommonFieldConfig } from './config'
5
+ import type { DatabaseProvider } from './core'
6
+ import type {
7
+ GArg,
8
+ GInputType,
9
+ GNullableInputType,
10
+ InferValueFromArg,
11
+ GField,
12
+ GOutputType,
13
+ GInputObjectType,
14
+ GList,
15
+ GNonNull,
16
+ InferValueFromArgs,
17
+ GObjectType,
18
+ InferValueFromInputType,
19
+ } from '@graphql-ts/schema'
20
+ import type { JSONValue, NixxieContext, MaybePromise } from '.'
21
+ import type { filters } from '../fields/filters'
22
+
23
+ export { Decimal }
24
+
25
+ export type BaseItem = { id: { toString(): string }; [key: string]: unknown }
26
+
27
+ export type ListGraphQLTypes<ListTypeInfo extends BaseListTypeInfo> = {
28
+ types: GraphQLTypesForList<ListTypeInfo>
29
+ }
30
+
31
+ export type FieldData<ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo> = {
32
+ lists: {
33
+ [Key in keyof ListTypeInfo['all']['lists']]: ListGraphQLTypes<ListTypeInfo['all']['lists'][Key]>
34
+ }
35
+ provider: DatabaseProvider
36
+ listKey: ListTypeInfo['key']
37
+ fieldKey: string
38
+ }
39
+
40
+ type ScalarNames = Exclude<keyof (typeof filters)[DatabaseProvider], 'enum'>
41
+
42
+ export type SimpleFieldTypeInfo<Scalar extends ScalarNames> = {
43
+ item: ScalarPrismaTypes[Scalar] | null
44
+ inputs: {
45
+ create: ScalarPrismaTypes[Scalar] | null | undefined
46
+ update: ScalarPrismaTypes[Scalar] | null | undefined
47
+ where: InferValueFromInputType<(typeof filters)[DatabaseProvider][Scalar]['required']> | null
48
+ uniqueWhere: ScalarPrismaTypes[Scalar] | null | undefined
49
+ orderBy: 'asc' | 'desc' | null
50
+ }
51
+ prisma: {
52
+ create:
53
+ | ScalarPrismaTypes[Scalar]
54
+ | { set?: ScalarPrismaTypes[Scalar] | null }
55
+ | null
56
+ | undefined
57
+ update:
58
+ | ScalarPrismaTypes[Scalar]
59
+ | { set?: ScalarPrismaTypes[Scalar] | null }
60
+ | null
61
+ | undefined
62
+ }
63
+ }
64
+
65
+ export type FieldTypeFunc<ListTypeInfo extends BaseListTypeInfo> = (
66
+ data: FieldData<ListTypeInfo>
67
+ ) => NextFieldType<
68
+ DBField,
69
+ GArg<GInputType> | undefined,
70
+ GArg<GInputType>,
71
+ GArg<GNullableInputType, false>,
72
+ GArg<GNullableInputType, false>,
73
+ GArg<GNullableInputType, false>,
74
+ ListTypeInfo
75
+ >
76
+
77
+ export type NextFieldType<
78
+ TDBField extends DBField = DBField,
79
+ CreateArg extends GArg<GInputType> | undefined = GArg<GInputType> | undefined,
80
+ UpdateArg extends GArg<GInputType> = GArg<GInputType>,
81
+ UniqueWhereArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
82
+ OrderByArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
83
+ FilterArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
84
+ ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo,
85
+ > = {
86
+ dbField: TDBField
87
+ } & FieldTypeWithoutDBField<
88
+ TDBField,
89
+ CreateArg,
90
+ UpdateArg,
91
+ UniqueWhereArg,
92
+ OrderByArg,
93
+ FilterArg,
94
+ ListTypeInfo
95
+ >
96
+
97
+ export type ScalarPrismaTypes = {
98
+ String: string
99
+ Boolean: boolean
100
+ Int: number
101
+ Float: number
102
+ DateTime: Date
103
+ BigInt: bigint
104
+ Json: JSONValue
105
+ Decimal: Decimal
106
+ Bytes: Uint8Array
107
+ }
108
+
109
+ type Literal<T> = {
110
+ kind: 'literal'
111
+ value: T
112
+ }
113
+
114
+ export type ScalarDBFieldDefault<
115
+ Scalar extends keyof ScalarPrismaTypes = keyof ScalarPrismaTypes,
116
+ Mode extends 'required' | 'many' | 'optional' = 'required' | 'many' | 'optional',
117
+ > = Mode extends 'many'
118
+ ? never
119
+ :
120
+ | {
121
+ String:
122
+ | Literal<string>
123
+ | { kind: 'uuid'; version?: 4 | 7 }
124
+ | { kind: 'cuid'; version?: 1 | 2 }
125
+ | { kind: 'ulid' }
126
+ | { kind: 'nanoid'; length?: number }
127
+ | { kind: 'random'; bytes: number; encoding: 'hex' | 'base64url' }
128
+ Boolean: Literal<boolean>
129
+ Json: Literal<string>
130
+ Float: Literal<number>
131
+ Int: Literal<number> | { kind: 'autoincrement' }
132
+ BigInt: Literal<bigint> | { kind: 'autoincrement' }
133
+ DateTime: Literal<string> | { kind: 'now' }
134
+ Decimal: Literal<string>
135
+ Bytes: Literal<Uint8Array>
136
+ }[Scalar]
137
+ | { kind: 'dbgenerated'; value: string }
138
+
139
+ export type ScalarDBField<
140
+ Scalar extends keyof ScalarPrismaTypes,
141
+ Mode extends 'required' | 'many' | 'optional',
142
+ > = {
143
+ kind: 'scalar'
144
+ scalar: Scalar
145
+ mode: Mode
146
+ default?: ScalarDBFieldDefault<Scalar, Mode> | undefined
147
+ extendPrismaSchema?: (field: string) => string
148
+ index?: 'unique' | 'index' | undefined
149
+
150
+ map?: string
151
+ nativeType?: string
152
+ updatedAt?: Scalar extends 'DateTime' ? boolean : never
153
+ }
154
+
155
+ export type RelationDBField<Mode extends 'many' | 'one'> = {
156
+ kind: 'relation'
157
+ mode: Mode
158
+ extendPrismaSchema?: (field: string) => string
159
+
160
+ list: string
161
+ field?: string
162
+ foreignKey?: { one: true | { map: string }; many: undefined }[Mode]
163
+ relationName?: { one: undefined; many: string }[Mode]
164
+ }
165
+
166
+ export type EnumDBField<Value extends string, Mode extends 'required' | 'many' | 'optional'> = {
167
+ kind: 'enum'
168
+ name: string
169
+ mode: Mode
170
+ default?: { kind: 'literal'; value: Value }
171
+ extendPrismaSchema?: (field: string) => string
172
+ index?: 'unique' | 'index'
173
+
174
+ map?: string
175
+ values: readonly Value[]
176
+ }
177
+
178
+ export const orderDirectionEnum = g.enum({
179
+ name: 'OrderDirection',
180
+ values: g.enumValues(['asc', 'desc']),
181
+ })
182
+
183
+ export const QueryMode = g.enum({
184
+ name: 'QueryMode',
185
+ values: g.enumValues(['default', 'insensitive']),
186
+ })
187
+
188
+ export type NoDBField = { kind: 'none' }
189
+
190
+ // TODO: merge
191
+ export type ScalarishDBField =
192
+ | ScalarDBField<keyof ScalarPrismaTypes, 'required' | 'many' | 'optional'>
193
+ | EnumDBField<string, 'required' | 'many' | 'optional'>
194
+
195
+ export type RealDBField = ScalarishDBField | RelationDBField<'many' | 'one'>
196
+
197
+ export type MultiDBField<Fields extends Record<string, ScalarishDBField>> = {
198
+ kind: 'multi'
199
+ fields: Fields
200
+ extendPrismaSchema?: (field: string) => string
201
+ }
202
+
203
+ export type DBField = RealDBField | NoDBField | MultiDBField<Record<string, ScalarishDBField>>
204
+
205
+ // TODO: this isn't right for create
206
+ // for create though, db level defaults need to be taken into account for when to not allow undefined
207
+ type DBFieldToInputValue<TDBField extends DBField> =
208
+ TDBField extends ScalarDBField<infer Scalar, infer Mode>
209
+ ? {
210
+ optional: ScalarPrismaTypes[Scalar] | null | undefined
211
+ required: ScalarPrismaTypes[Scalar] | undefined
212
+ many: readonly ScalarPrismaTypes[Scalar][] | undefined
213
+ }[Mode]
214
+ : TDBField extends RelationDBField<'many' | 'one'>
215
+ ? { connect?: object; disconnect?: boolean } | undefined
216
+ : TDBField extends EnumDBField<infer Value, infer Mode>
217
+ ? {
218
+ optional: Value | null | undefined
219
+ required: Value | undefined
220
+ many: readonly Value[] | undefined
221
+ }[Mode]
222
+ : TDBField extends NoDBField
223
+ ? undefined
224
+ : TDBField extends MultiDBField<infer Fields>
225
+ ? // note: this is very intentionally not optional and DBFieldToInputValue will add | undefined to force people to explicitly show what they are not setting
226
+ { [Key in keyof Fields]: DBFieldToInputValue<Fields[Key]> }
227
+ : never
228
+
229
+ type DBFieldUniqueWhere<TDBField extends DBField> =
230
+ TDBField extends ScalarDBField<infer Scalar, 'optional' | 'required'>
231
+ ? Scalar extends 'String' | 'Int'
232
+ ? {
233
+ String: string
234
+ Int: number
235
+ }[Scalar]
236
+ : any
237
+ : any
238
+
239
+ type DBFieldToOutputValue<TDBField extends DBField> =
240
+ TDBField extends ScalarDBField<infer Scalar, infer Mode>
241
+ ? {
242
+ optional: ScalarPrismaTypes[Scalar] | null
243
+ required: ScalarPrismaTypes[Scalar]
244
+ many: readonly ScalarPrismaTypes[Scalar][]
245
+ }[Mode]
246
+ : TDBField extends RelationDBField<infer Mode>
247
+ ? {
248
+ one: () => Promise<BaseItem>
249
+ many: {
250
+ findMany(args: FindManyArgsValue): Promise<BaseItem[]>
251
+ count(args: { where: FindManyArgsValue['where'] }): Promise<number>
252
+ }
253
+ }[Mode]
254
+ : TDBField extends EnumDBField<infer Value, infer Mode>
255
+ ? {
256
+ optional: Value | null
257
+ required: Value
258
+ many: readonly Value[]
259
+ }[Mode]
260
+ : TDBField extends NoDBField
261
+ ? undefined
262
+ : TDBField extends MultiDBField<infer Fields>
263
+ ? { [Key in keyof Fields]: DBFieldToOutputValue<Fields[Key]> }
264
+ : never
265
+
266
+ export type OrderByFieldInputArg<Val, TArg extends GArg<GNullableInputType>> = {
267
+ arg: TArg
268
+ } & ResolveFunc<
269
+ (
270
+ value: Exclude<InferValueFromArg<TArg>, null | undefined>,
271
+ context: NixxieContext
272
+ ) => MaybePromise<Val>
273
+ >
274
+
275
+ type FieldInputResolver<Input, Output, RelationshipInputResolver> = (
276
+ value: Input,
277
+ context: NixxieContext,
278
+ relationshipInputResolver: RelationshipInputResolver
279
+ ) => MaybePromise<Output>
280
+
281
+ type DBFieldFiltersInner<TDBField extends DBField> = Record<string, any>
282
+
283
+ type DBFieldFilters<TDBField extends DBField> =
284
+ | ({
285
+ AND?: DBFieldFiltersInner<TDBField>
286
+ OR?: DBFieldFiltersInner<TDBField>
287
+ NOT?: DBFieldFiltersInner<TDBField>
288
+ } & DBFieldFiltersInner<TDBField>)
289
+ | null
290
+
291
+ export type WhereFieldInputArg<TDBField extends DBField, TArg extends GArg<GInputType, any>> = {
292
+ arg: TArg
293
+ } & ResolveFunc<
294
+ FieldInputResolver<
295
+ Exclude<InferValueFromArg<TArg>, undefined>,
296
+ DBFieldFilters<TDBField>,
297
+ any
298
+ // i think this is broken because variance?
299
+ // TDBField extends RelationDBField<infer Mode>
300
+ // ? (
301
+ // input: {
302
+ // many: types.InferValueFromArg<types.Arg<TypesForList['manyRelationWhere']>>;
303
+ // one: types.InferValueFromArg<types.Arg<TypesForList['where']>>;
304
+ // }[Mode]
305
+ // ) => Promise<any>
306
+ // : undefined
307
+ >
308
+ >
309
+
310
+ export type UpdateFieldInputArg<TDBField extends DBField, TArg extends GArg<GInputType, any>> = {
311
+ arg: TArg
312
+ } & ResolveFunc<
313
+ FieldInputResolver<
314
+ InferValueFromArg<TArg>,
315
+ DBFieldToInputValue<TDBField>,
316
+ any
317
+ // i think this is broken because variance?
318
+ // TDBField extends RelationDBField<infer Mode>
319
+ // ? (
320
+ // input: graphql.InferValueFromArg<graphql.Arg<TypesForList['relateTo'][Mode]['create']>>
321
+ // ) => Promise<any>
322
+ // : undefined
323
+ >
324
+ >
325
+
326
+ type CreateFieldInputResolver<Input, TDBField extends DBField> = FieldInputResolver<
327
+ Input,
328
+ DBFieldToInputValue<TDBField>,
329
+ any
330
+ // i think this is broken because variance?
331
+ // TDBField extends RelationDBField<infer Mode>
332
+ // ? (
333
+ // input: graphql.InferValueFromArg<graphql.Arg<TypesForList['relateTo'][Mode]['create']>>
334
+ // ) => Promise<any>
335
+ // : undefined
336
+ >
337
+
338
+ export type CreateFieldInputArg<
339
+ TDBField extends DBField,
340
+ TArg extends GArg<GInputType, any> | undefined,
341
+ > = {
342
+ arg: TArg
343
+ } & (TArg extends GArg<GInputType, any>
344
+ ? InferValueFromArg<TArg> extends DBFieldToInputValue<TDBField>
345
+ ? {
346
+ resolve?: CreateFieldInputResolver<InferValueFromArg<TArg>, TDBField>
347
+ }
348
+ : {
349
+ resolve: CreateFieldInputResolver<InferValueFromArg<TArg>, TDBField>
350
+ }
351
+ : {
352
+ resolve: CreateFieldInputResolver<undefined, TDBField>
353
+ })
354
+
355
+ type UnwrapMaybePromise<T> = T extends Promise<infer Resolved> ? Resolved : T
356
+
357
+ type ResolveFunc<Func extends (firstArg: any, ...args: any[]) => any> =
358
+ Parameters<Func>[0] extends UnwrapMaybePromise<ReturnType<Func>>
359
+ ? { resolve?: Func }
360
+ : { resolve: Func }
361
+
362
+ export type UniqueWhereFieldInputArg<Val, TArg extends GArg<GInputType>> = {
363
+ arg: TArg
364
+ } & ResolveFunc<
365
+ (
366
+ value: Exclude<InferValueFromArg<TArg>, undefined | null>,
367
+ context: NixxieContext
368
+ ) => MaybePromise<Val>
369
+ >
370
+
371
+ type FieldTypeOutputField<TDBField extends DBField> = GField<
372
+ { value: DBFieldToOutputValue<TDBField>; item: BaseItem },
373
+ any,
374
+ GOutputType<NixxieContext>,
375
+ DBFieldToOutputValue<TDBField>,
376
+ NixxieContext
377
+ >
378
+
379
+ export type OrderDirection = 'asc' | 'desc'
380
+
381
+ type DBFieldToOrderByValue<TDBField extends DBField> = TDBField extends ScalarishDBField
382
+ ? OrderDirection | undefined
383
+ : TDBField extends MultiDBField<infer Fields>
384
+ ? { [Key in keyof Fields]: DBFieldToOrderByValue<Fields[Key]> }
385
+ : undefined
386
+
387
+ export type FieldTypeWithoutDBField<
388
+ TDBField extends DBField = DBField,
389
+ CreateArg extends GArg<GInputType> | undefined = GArg<GInputType> | undefined,
390
+ UpdateArg extends GArg<GInputType> = GArg<GInputType>,
391
+ UniqueWhereArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
392
+ OrderByArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
393
+ FilterArg extends GArg<GNullableInputType, false> = GArg<GNullableInputType, false>,
394
+ ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo,
395
+ FieldTypeInfo extends BaseFieldTypeInfo = BaseFieldTypeInfo,
396
+ > = {
397
+ input?: {
398
+ uniqueWhere?: UniqueWhereFieldInputArg<DBFieldUniqueWhere<TDBField>, UniqueWhereArg>
399
+ where?: WhereFieldInputArg<TDBField, FilterArg>
400
+ create?: CreateFieldInputArg<TDBField, CreateArg>
401
+ update?: UpdateFieldInputArg<TDBField, UpdateArg>
402
+ orderBy?: OrderByFieldInputArg<DBFieldToOrderByValue<TDBField>, OrderByArg>
403
+ }
404
+ output: FieldTypeOutputField<TDBField>
405
+ views: string
406
+ extraOutputFields?: Record<string, FieldTypeOutputField<TDBField>>
407
+ getAdminMeta?: () => JSONValue
408
+ unreferencedConcreteInterfaceImplementations?: readonly g<typeof g.object<any>>[]
409
+ __nxTelemetryFieldTypeName?: string
410
+ } & CommonFieldConfig<ListTypeInfo, FieldTypeInfo>
411
+
412
+ type AnyInputObj = GInputObjectType<Record<string, GArg<GInputType>>>
413
+
414
+ export type GraphQLTypesForList<ListTypeInfo extends BaseListTypeInfo = BaseListTypeInfo> = {
415
+ create: AnyInputObj | typeof g.Empty
416
+ update: AnyInputObj | typeof g.Empty
417
+ uniqueWhere: GInputObjectType<{
418
+ id: GArg<typeof g.ID>
419
+ [key: string]: GArg<GNullableInputType>
420
+ }>
421
+ where: AnyInputObj
422
+ orderBy: AnyInputObj
423
+ output: GObjectType<ListTypeInfo['item'], NixxieContext<ListTypeInfo['all']>>
424
+ findManyArgs: FindManyArgs
425
+ relateTo: {
426
+ one: {
427
+ create: GInputObjectType<{
428
+ create?: GArg<GraphQLTypesForList<ListTypeInfo>['create']>
429
+ connect: GArg<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>
430
+ }>
431
+ update: GInputObjectType<{
432
+ create?: GArg<GraphQLTypesForList<ListTypeInfo>['create']>
433
+ connect: GArg<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>
434
+ disconnect: GArg<typeof g.Boolean>
435
+ }>
436
+ }
437
+ many: {
438
+ where: GInputObjectType<{
439
+ every: GArg<AnyInputObj>
440
+ some: GArg<AnyInputObj>
441
+ none: GArg<AnyInputObj>
442
+ }>
443
+ create: GInputObjectType<{
444
+ create?: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['create']>>>
445
+ connect: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
446
+ set: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
447
+ }>
448
+ update: GInputObjectType<{
449
+ create?: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['create']>>>
450
+ connect: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
451
+ disconnect: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
452
+ set: GArg<GList<GNonNull<GraphQLTypesForList<ListTypeInfo>['uniqueWhere']>>>
453
+ }>
454
+ }
455
+ }
456
+ }
457
+
458
+ export type FindManyArgs = {
459
+ where: GArg<GNonNull<GraphQLTypesForList['where']>, true>
460
+ orderBy: GArg<GNonNull<GList<GNonNull<GraphQLTypesForList['orderBy']>>>, true>
461
+ take: GArg<typeof g.Int>
462
+ skip: GArg<GNonNull<typeof g.Int>, true>
463
+ cursor: GArg<GraphQLTypesForList['uniqueWhere']>
464
+ }
465
+
466
+ export type FindManyArgsValue = InferValueFromArgs<FindManyArgs>
467
+
468
+ // fieldType(dbField)(fieldInfo) => { ...fieldInfo, dbField };
469
+ export function fieldType<TDBField extends DBField, ListTypeInfo extends BaseListTypeInfo>(
470
+ dbField: TDBField
471
+ ) {
472
+ return function fieldTypeWrapper<
473
+ CreateArg extends GArg<GInputType> | undefined,
474
+ UpdateArg extends GArg<GInputType>,
475
+ UniqueWhereArg extends GArg<GNullableInputType, false>,
476
+ OrderByArg extends GArg<GNullableInputType, false>,
477
+ FilterArg extends GArg<GNullableInputType, false>,
478
+ >(
479
+ graphQLInfo: FieldTypeWithoutDBField<
480
+ TDBField,
481
+ CreateArg,
482
+ UpdateArg,
483
+ UniqueWhereArg,
484
+ OrderByArg,
485
+ FilterArg,
486
+ ListTypeInfo
487
+ >
488
+ ): NextFieldType<
489
+ DBField,
490
+ GArg<GInputType> | undefined,
491
+ GArg<GInputType>,
492
+ GArg<GNullableInputType, false>,
493
+ GArg<GNullableInputType, false>,
494
+ GArg<GNullableInputType, false>,
495
+ any
496
+ > {
497
+ return { ...graphQLInfo, dbField } as any
498
+ }
499
+ }