@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,194 +1,194 @@
1
- import type {
2
- GArg,
3
- GInputObjectType,
4
- GList,
5
- GNonNull,
6
- InferValueFromInputType,
7
- } from '@graphql-ts/schema'
8
-
9
- import { g } from '../../..'
10
- import {
11
- type BaseListTypeInfo,
12
- type CommonFieldConfig,
13
- type FieldTypeFunc,
14
- type SimpleFieldTypeInfo,
15
- fieldType,
16
- orderDirectionEnum,
17
- } from '../../../types'
18
- import { filters } from '../../filters'
19
- import { defaultIsRequired, makeValidateHook } from '../../non-null-graphql'
20
- import type { CalendarDayFieldMeta } from './views'
21
-
22
- export type CalendarDayFieldConfig<ListTypeInfo extends BaseListTypeInfo> = CommonFieldConfig<
23
- ListTypeInfo,
24
- SimpleFieldTypeInfo<'String' | 'DateTime'>
25
- > & {
26
- isIndexed?: boolean | 'unique'
27
- validation?: {
28
- isRequired?: boolean
29
- }
30
- defaultValue?: string
31
- db?: {
32
- isNullable?: boolean
33
- extendPrismaSchema?: (field: string) => string
34
- map?: string
35
- }
36
- }
37
-
38
- export function calendarDay<ListTypeInfo extends BaseListTypeInfo>(
39
- config: CalendarDayFieldConfig<ListTypeInfo> = {}
40
- ): FieldTypeFunc<ListTypeInfo> {
41
- const { isIndexed, validation, defaultValue } = config
42
- return meta => {
43
- if (typeof defaultValue === 'string') {
44
- try {
45
- g.CalendarDay.parseValue(defaultValue)
46
- } catch (err) {
47
- throw new Error(
48
- `The calendarDay field at ${meta.listKey}.${meta.fieldKey} specifies defaultValue: ${defaultValue} but values must be provided as a full-date ISO8601 string such as 1970-01-01`
49
- )
50
- }
51
- }
52
-
53
- const usesNativeDateType = meta.provider === 'postgresql' || meta.provider === 'mysql'
54
-
55
- function resolveInput(value: string | null | undefined) {
56
- if (meta.provider === 'sqlite' || value == null) {
57
- return value
58
- }
59
- return dateStringToDateObjectInUTC(value)
60
- }
61
-
62
- const { mode, validate } = makeValidateHook(meta, config)
63
- const commonResolveFilter = mode === 'optional' ? filters.resolveCommon : <T>(x: T) => x
64
-
65
- return fieldType({
66
- kind: 'scalar',
67
- mode,
68
- scalar: usesNativeDateType ? 'DateTime' : 'String',
69
- index: isIndexed === true ? 'index' : isIndexed || undefined,
70
- default:
71
- typeof defaultValue === 'string'
72
- ? {
73
- kind: 'literal',
74
- value: defaultValue,
75
- }
76
- : undefined,
77
- map: config.db?.map,
78
- extendPrismaSchema: config.db?.extendPrismaSchema,
79
- nativeType: usesNativeDateType ? 'Date' : undefined,
80
- })({
81
- ...config,
82
- ...defaultIsRequired(config, validation?.isRequired ?? false),
83
- hooks: {
84
- ...config.hooks,
85
- validate,
86
- },
87
- input: {
88
- uniqueWhere:
89
- isIndexed === 'unique'
90
- ? {
91
- arg: g.arg({ type: g.CalendarDay }),
92
- resolve: usesNativeDateType ? dateStringToDateObjectInUTC : undefined,
93
- }
94
- : undefined,
95
- where: {
96
- arg: g.arg({
97
- type: mode === 'optional' ? CalendarDayNullableFilter : CalendarDayFilter,
98
- }),
99
- resolve: usesNativeDateType
100
- ? value => commonResolveFilter(transformFilterDateStringsToDateObjects(value))
101
- : commonResolveFilter,
102
- },
103
- create: {
104
- arg: g.arg({
105
- type: g.CalendarDay,
106
- defaultValue,
107
- }),
108
- resolve(val: string | null | undefined) {
109
- if (val === undefined) {
110
- val = defaultValue ?? null
111
- }
112
- return resolveInput(val)
113
- },
114
- },
115
- update: { arg: g.arg({ type: g.CalendarDay }), resolve: resolveInput },
116
- orderBy: { arg: g.arg({ type: orderDirectionEnum }) },
117
- },
118
- output: g.field({
119
- type: g.CalendarDay,
120
- resolve({ value }) {
121
- if (value instanceof Date) {
122
- return value.toISOString().slice(0, 10)
123
- }
124
- return value
125
- },
126
- }),
127
- __ksTelemetryFieldTypeName: '@nixxie-cms/calendarDay',
128
- views: '@nixxie-cms/core/fields/types/calendarDay/views',
129
- getAdminMeta(): CalendarDayFieldMeta {
130
- return {
131
- defaultValue: defaultValue ?? null,
132
- }
133
- },
134
- })
135
- }
136
- }
137
-
138
- function dateStringToDateObjectInUTC(value: string) {
139
- return new Date(`${value}T00:00Z`)
140
- }
141
-
142
- type CalendarDayFilterType = GInputObjectType<{
143
- equals: GArg<typeof g.CalendarDay>
144
- in: GArg<GList<GNonNull<typeof g.CalendarDay>>>
145
- notIn: GArg<GList<GNonNull<typeof g.CalendarDay>>>
146
- lt: GArg<typeof g.CalendarDay>
147
- lte: GArg<typeof g.CalendarDay>
148
- gt: GArg<typeof g.CalendarDay>
149
- gte: GArg<typeof g.CalendarDay>
150
- not: GArg<CalendarDayFilterType>
151
- }>
152
-
153
- function transformFilterDateStringsToDateObjects(
154
- filter: InferValueFromInputType<CalendarDayFilterType>
155
- ): Parameters<typeof filters.resolveCommon>[0] {
156
- if (filter === null) {
157
- return filter
158
- }
159
- return Object.fromEntries(
160
- Object.entries(filter).map(([key, value]) => {
161
- if (value == null) {
162
- return [key, value]
163
- }
164
- if (Array.isArray(value)) {
165
- return [key, value.map(dateStringToDateObjectInUTC)]
166
- }
167
- if (typeof value === 'object') {
168
- return [key, transformFilterDateStringsToDateObjects(value)]
169
- }
170
- return [key, dateStringToDateObjectInUTC(value)]
171
- })
172
- )
173
- }
174
-
175
- const filterFields = (nestedType: CalendarDayFilterType) => ({
176
- equals: g.arg({ type: g.CalendarDay }),
177
- in: g.arg({ type: g.list(g.nonNull(g.CalendarDay)) }),
178
- notIn: g.arg({ type: g.list(g.nonNull(g.CalendarDay)) }),
179
- lt: g.arg({ type: g.CalendarDay }),
180
- lte: g.arg({ type: g.CalendarDay }),
181
- gt: g.arg({ type: g.CalendarDay }),
182
- gte: g.arg({ type: g.CalendarDay }),
183
- not: g.arg({ type: nestedType }),
184
- })
185
-
186
- const CalendarDayNullableFilter: CalendarDayFilterType = g.inputObject({
187
- name: 'CalendarDayNullableFilter',
188
- fields: () => filterFields(CalendarDayNullableFilter),
189
- })
190
-
191
- const CalendarDayFilter: CalendarDayFilterType = g.inputObject({
192
- name: 'CalendarDayFilter',
193
- fields: () => filterFields(CalendarDayFilter),
194
- })
1
+ import type {
2
+ GArg,
3
+ GInputObjectType,
4
+ GList,
5
+ GNonNull,
6
+ InferValueFromInputType,
7
+ } from '@graphql-ts/schema'
8
+
9
+ import { g } from '../../..'
10
+ import {
11
+ type BaseListTypeInfo,
12
+ type CommonFieldConfig,
13
+ type FieldTypeFunc,
14
+ type SimpleFieldTypeInfo,
15
+ fieldType,
16
+ orderDirectionEnum,
17
+ } from '../../../types'
18
+ import { filters } from '../../filters'
19
+ import { defaultIsRequired, makeValidateHook } from '../../non-null-graphql'
20
+ import type { CalendarDayFieldMeta } from './views'
21
+
22
+ export type CalendarDayFieldConfig<ListTypeInfo extends BaseListTypeInfo> = CommonFieldConfig<
23
+ ListTypeInfo,
24
+ SimpleFieldTypeInfo<'String' | 'DateTime'>
25
+ > & {
26
+ isIndexed?: boolean | 'unique'
27
+ validation?: {
28
+ isRequired?: boolean
29
+ }
30
+ defaultValue?: string
31
+ db?: {
32
+ isNullable?: boolean
33
+ extendPrismaSchema?: (field: string) => string
34
+ map?: string
35
+ }
36
+ }
37
+
38
+ export function calendarDay<ListTypeInfo extends BaseListTypeInfo>(
39
+ config: CalendarDayFieldConfig<ListTypeInfo> = {}
40
+ ): FieldTypeFunc<ListTypeInfo> {
41
+ const { isIndexed, validation, defaultValue } = config
42
+ return meta => {
43
+ if (typeof defaultValue === 'string') {
44
+ try {
45
+ g.CalendarDay.parseValue(defaultValue)
46
+ } catch (err) {
47
+ throw new Error(
48
+ `The calendarDay field at ${meta.listKey}.${meta.fieldKey} specifies defaultValue: ${defaultValue} but values must be provided as a full-date ISO8601 string such as 1970-01-01`
49
+ )
50
+ }
51
+ }
52
+
53
+ const usesNativeDateType = meta.provider === 'postgresql' || meta.provider === 'mysql'
54
+
55
+ function resolveInput(value: string | null | undefined) {
56
+ if (meta.provider === 'sqlite' || value == null) {
57
+ return value
58
+ }
59
+ return dateStringToDateObjectInUTC(value)
60
+ }
61
+
62
+ const { mode, validate } = makeValidateHook(meta, config)
63
+ const commonResolveFilter = mode === 'optional' ? filters.resolveCommon : <T>(x: T) => x
64
+
65
+ return fieldType({
66
+ kind: 'scalar',
67
+ mode,
68
+ scalar: usesNativeDateType ? 'DateTime' : 'String',
69
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
70
+ default:
71
+ typeof defaultValue === 'string'
72
+ ? {
73
+ kind: 'literal',
74
+ value: defaultValue,
75
+ }
76
+ : undefined,
77
+ map: config.db?.map,
78
+ extendPrismaSchema: config.db?.extendPrismaSchema,
79
+ nativeType: usesNativeDateType ? 'Date' : undefined,
80
+ })({
81
+ ...config,
82
+ ...defaultIsRequired(config, validation?.isRequired ?? false),
83
+ hooks: {
84
+ ...config.hooks,
85
+ validate,
86
+ },
87
+ input: {
88
+ uniqueWhere:
89
+ isIndexed === 'unique'
90
+ ? {
91
+ arg: g.arg({ type: g.CalendarDay }),
92
+ resolve: usesNativeDateType ? dateStringToDateObjectInUTC : undefined,
93
+ }
94
+ : undefined,
95
+ where: {
96
+ arg: g.arg({
97
+ type: mode === 'optional' ? CalendarDayNullableFilter : CalendarDayFilter,
98
+ }),
99
+ resolve: usesNativeDateType
100
+ ? value => commonResolveFilter(transformFilterDateStringsToDateObjects(value))
101
+ : commonResolveFilter,
102
+ },
103
+ create: {
104
+ arg: g.arg({
105
+ type: g.CalendarDay,
106
+ defaultValue,
107
+ }),
108
+ resolve(val: string | null | undefined) {
109
+ if (val === undefined) {
110
+ val = defaultValue ?? null
111
+ }
112
+ return resolveInput(val)
113
+ },
114
+ },
115
+ update: { arg: g.arg({ type: g.CalendarDay }), resolve: resolveInput },
116
+ orderBy: { arg: g.arg({ type: orderDirectionEnum }) },
117
+ },
118
+ output: g.field({
119
+ type: g.CalendarDay,
120
+ resolve({ value }) {
121
+ if (value instanceof Date) {
122
+ return value.toISOString().slice(0, 10)
123
+ }
124
+ return value
125
+ },
126
+ }),
127
+ __nxTelemetryFieldTypeName: '@nixxie-cms/calendarDay',
128
+ views: '@nixxie-cms/core/fields/types/calendarDay/views',
129
+ getAdminMeta(): CalendarDayFieldMeta {
130
+ return {
131
+ defaultValue: defaultValue ?? null,
132
+ }
133
+ },
134
+ })
135
+ }
136
+ }
137
+
138
+ function dateStringToDateObjectInUTC(value: string) {
139
+ return new Date(`${value}T00:00Z`)
140
+ }
141
+
142
+ type CalendarDayFilterType = GInputObjectType<{
143
+ equals: GArg<typeof g.CalendarDay>
144
+ in: GArg<GList<GNonNull<typeof g.CalendarDay>>>
145
+ notIn: GArg<GList<GNonNull<typeof g.CalendarDay>>>
146
+ lt: GArg<typeof g.CalendarDay>
147
+ lte: GArg<typeof g.CalendarDay>
148
+ gt: GArg<typeof g.CalendarDay>
149
+ gte: GArg<typeof g.CalendarDay>
150
+ not: GArg<CalendarDayFilterType>
151
+ }>
152
+
153
+ function transformFilterDateStringsToDateObjects(
154
+ filter: InferValueFromInputType<CalendarDayFilterType>
155
+ ): Parameters<typeof filters.resolveCommon>[0] {
156
+ if (filter === null) {
157
+ return filter
158
+ }
159
+ return Object.fromEntries(
160
+ Object.entries(filter).map(([key, value]) => {
161
+ if (value == null) {
162
+ return [key, value]
163
+ }
164
+ if (Array.isArray(value)) {
165
+ return [key, value.map(dateStringToDateObjectInUTC)]
166
+ }
167
+ if (typeof value === 'object') {
168
+ return [key, transformFilterDateStringsToDateObjects(value)]
169
+ }
170
+ return [key, dateStringToDateObjectInUTC(value)]
171
+ })
172
+ )
173
+ }
174
+
175
+ const filterFields = (nestedType: CalendarDayFilterType) => ({
176
+ equals: g.arg({ type: g.CalendarDay }),
177
+ in: g.arg({ type: g.list(g.nonNull(g.CalendarDay)) }),
178
+ notIn: g.arg({ type: g.list(g.nonNull(g.CalendarDay)) }),
179
+ lt: g.arg({ type: g.CalendarDay }),
180
+ lte: g.arg({ type: g.CalendarDay }),
181
+ gt: g.arg({ type: g.CalendarDay }),
182
+ gte: g.arg({ type: g.CalendarDay }),
183
+ not: g.arg({ type: nestedType }),
184
+ })
185
+
186
+ const CalendarDayNullableFilter: CalendarDayFilterType = g.inputObject({
187
+ name: 'CalendarDayNullableFilter',
188
+ fields: () => filterFields(CalendarDayNullableFilter),
189
+ })
190
+
191
+ const CalendarDayFilter: CalendarDayFilterType = g.inputObject({
192
+ name: 'CalendarDayFilter',
193
+ fields: () => filterFields(CalendarDayFilter),
194
+ })
@@ -1,76 +1,76 @@
1
- import { userInputError } from '../../../lib/core/graphql-errors'
2
- import type { SimpleFieldTypeInfo } from '../../../types'
3
- import {
4
- type BaseListTypeInfo,
5
- type CommonFieldConfig,
6
- type FieldTypeFunc,
7
- fieldType,
8
- orderDirectionEnum,
9
- } from '../../../types'
10
- import { g } from '../../..'
11
- import { assertReadIsNonNullAllowed } from '../../non-null-graphql'
12
- import { filters } from '../../filters'
13
- import type { controller } from './views'
14
-
15
- export type CheckboxFieldConfig<ListTypeInfo extends BaseListTypeInfo> = CommonFieldConfig<
16
- ListTypeInfo,
17
- SimpleFieldTypeInfo<'Boolean'>
18
- > & {
19
- defaultValue?: boolean
20
- db?: {
21
- map?: string
22
- extendPrismaSchema?: (field: string) => string
23
- }
24
- }
25
-
26
- export function checkbox<ListTypeInfo extends BaseListTypeInfo>(
27
- config: CheckboxFieldConfig<ListTypeInfo> = {}
28
- ): FieldTypeFunc<ListTypeInfo> {
29
- const { defaultValue = false } = config
30
-
31
- return meta => {
32
- if ((config as any).isIndexed === 'unique') {
33
- throw TypeError("isIndexed: 'unique' is not a supported option for field type checkbox")
34
- }
35
-
36
- assertReadIsNonNullAllowed(meta, config, false)
37
-
38
- return fieldType({
39
- kind: 'scalar',
40
- mode: 'required',
41
- scalar: 'Boolean',
42
- default: { kind: 'literal', value: defaultValue },
43
- map: config.db?.map,
44
- extendPrismaSchema: config.db?.extendPrismaSchema,
45
- })({
46
- ...config,
47
- input: {
48
- where: { arg: g.arg({ type: filters[meta.provider].Boolean.required }) },
49
- create: {
50
- arg: g.arg({
51
- type: g.Boolean,
52
- defaultValue: typeof defaultValue === 'boolean' ? defaultValue : undefined,
53
- }),
54
- resolve(val) {
55
- if (val === null) throw userInputError('Checkbox fields cannot be set to null')
56
- return val ?? defaultValue
57
- },
58
- },
59
- update: {
60
- arg: g.arg({ type: g.Boolean }),
61
- resolve(val) {
62
- if (val === null) throw userInputError('Checkbox fields cannot be set to null')
63
- return val
64
- },
65
- },
66
- orderBy: { arg: g.arg({ type: orderDirectionEnum }) },
67
- },
68
- output: g.field({ type: g.Boolean }),
69
- __ksTelemetryFieldTypeName: '@nixxie-cms/checkbox',
70
- views: '@nixxie-cms/core/fields/types/checkbox/views',
71
- getAdminMeta: (): Parameters<typeof controller>[0]['fieldMeta'] => ({
72
- defaultValue,
73
- }),
74
- })
75
- }
76
- }
1
+ import { userInputError } from '../../../lib/core/graphql-errors'
2
+ import type { SimpleFieldTypeInfo } from '../../../types'
3
+ import {
4
+ type BaseListTypeInfo,
5
+ type CommonFieldConfig,
6
+ type FieldTypeFunc,
7
+ fieldType,
8
+ orderDirectionEnum,
9
+ } from '../../../types'
10
+ import { g } from '../../..'
11
+ import { assertReadIsNonNullAllowed } from '../../non-null-graphql'
12
+ import { filters } from '../../filters'
13
+ import type { controller } from './views'
14
+
15
+ export type CheckboxFieldConfig<ListTypeInfo extends BaseListTypeInfo> = CommonFieldConfig<
16
+ ListTypeInfo,
17
+ SimpleFieldTypeInfo<'Boolean'>
18
+ > & {
19
+ defaultValue?: boolean
20
+ db?: {
21
+ map?: string
22
+ extendPrismaSchema?: (field: string) => string
23
+ }
24
+ }
25
+
26
+ export function checkbox<ListTypeInfo extends BaseListTypeInfo>(
27
+ config: CheckboxFieldConfig<ListTypeInfo> = {}
28
+ ): FieldTypeFunc<ListTypeInfo> {
29
+ const { defaultValue = false } = config
30
+
31
+ return meta => {
32
+ if ((config as any).isIndexed === 'unique') {
33
+ throw TypeError("isIndexed: 'unique' is not a supported option for field type checkbox")
34
+ }
35
+
36
+ assertReadIsNonNullAllowed(meta, config, false)
37
+
38
+ return fieldType({
39
+ kind: 'scalar',
40
+ mode: 'required',
41
+ scalar: 'Boolean',
42
+ default: { kind: 'literal', value: defaultValue },
43
+ map: config.db?.map,
44
+ extendPrismaSchema: config.db?.extendPrismaSchema,
45
+ })({
46
+ ...config,
47
+ input: {
48
+ where: { arg: g.arg({ type: filters[meta.provider].Boolean.required }) },
49
+ create: {
50
+ arg: g.arg({
51
+ type: g.Boolean,
52
+ defaultValue: typeof defaultValue === 'boolean' ? defaultValue : undefined,
53
+ }),
54
+ resolve(val) {
55
+ if (val === null) throw userInputError('Checkbox fields cannot be set to null')
56
+ return val ?? defaultValue
57
+ },
58
+ },
59
+ update: {
60
+ arg: g.arg({ type: g.Boolean }),
61
+ resolve(val) {
62
+ if (val === null) throw userInputError('Checkbox fields cannot be set to null')
63
+ return val
64
+ },
65
+ },
66
+ orderBy: { arg: g.arg({ type: orderDirectionEnum }) },
67
+ },
68
+ output: g.field({ type: g.Boolean }),
69
+ __nxTelemetryFieldTypeName: '@nixxie-cms/checkbox',
70
+ views: '@nixxie-cms/core/fields/types/checkbox/views',
71
+ getAdminMeta: (): Parameters<typeof controller>[0]['fieldMeta'] => ({
72
+ defaultValue,
73
+ }),
74
+ })
75
+ }
76
+ }