@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,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
+ }