@nixxie-cms/core 1.0.3 → 2.0.0

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 (203) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/CHANGES-1.1.md +134 -0
  3. package/context/dist/nixxie-cms-core-context.cjs.js +4 -3
  4. package/context/dist/nixxie-cms-core-context.esm.js +3 -2
  5. package/dist/declarations/src/access.d.ts +2 -2
  6. package/dist/declarations/src/access.d.ts.map +1 -1
  7. package/dist/declarations/src/admin-ui/components/Navigation.d.ts +2 -2
  8. package/dist/declarations/src/admin-ui/components/Navigation.d.ts.map +1 -1
  9. package/dist/declarations/src/admin-ui/context.d.ts +6 -6
  10. package/dist/declarations/src/admin-ui/context.d.ts.map +1 -1
  11. package/dist/declarations/src/admin-ui/utils/Fields.d.ts +3 -3
  12. package/dist/declarations/src/admin-ui/utils/Fields.d.ts.map +1 -1
  13. package/dist/declarations/src/admin-ui/utils/filters.d.ts +5 -5
  14. package/dist/declarations/src/admin-ui/utils/filters.d.ts.map +1 -1
  15. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts +3 -3
  16. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts.map +1 -1
  17. package/dist/declarations/src/admin-ui/utils/utils.d.ts +2 -2
  18. package/dist/declarations/src/admin-ui/utils/utils.d.ts.map +1 -1
  19. package/dist/declarations/src/context.d.ts +1 -1
  20. package/dist/declarations/src/context.d.ts.map +1 -1
  21. package/dist/declarations/src/fields/types/bigInt/index.d.ts +3 -3
  22. package/dist/declarations/src/fields/types/bigInt/index.d.ts.map +1 -1
  23. package/dist/declarations/src/fields/types/bytes/index.d.ts +3 -3
  24. package/dist/declarations/src/fields/types/bytes/index.d.ts.map +1 -1
  25. package/dist/declarations/src/fields/types/calendarDay/index.d.ts +3 -3
  26. package/dist/declarations/src/fields/types/calendarDay/index.d.ts.map +1 -1
  27. package/dist/declarations/src/fields/types/checkbox/index.d.ts +3 -3
  28. package/dist/declarations/src/fields/types/checkbox/index.d.ts.map +1 -1
  29. package/dist/declarations/src/fields/types/decimal/index.d.ts +3 -3
  30. package/dist/declarations/src/fields/types/decimal/index.d.ts.map +1 -1
  31. package/dist/declarations/src/fields/types/file/index.d.ts +4 -4
  32. package/dist/declarations/src/fields/types/file/index.d.ts.map +1 -1
  33. package/dist/declarations/src/fields/types/float/index.d.ts +3 -3
  34. package/dist/declarations/src/fields/types/float/index.d.ts.map +1 -1
  35. package/dist/declarations/src/fields/types/image/index.d.ts +4 -4
  36. package/dist/declarations/src/fields/types/image/index.d.ts.map +1 -1
  37. package/dist/declarations/src/fields/types/integer/index.d.ts +3 -3
  38. package/dist/declarations/src/fields/types/integer/index.d.ts.map +1 -1
  39. package/dist/declarations/src/fields/types/json/index.d.ts +3 -3
  40. package/dist/declarations/src/fields/types/json/index.d.ts.map +1 -1
  41. package/dist/declarations/src/fields/types/multiselect/index.d.ts +3 -3
  42. package/dist/declarations/src/fields/types/multiselect/index.d.ts.map +1 -1
  43. package/dist/declarations/src/fields/types/multiselect/views/index.d.ts.map +1 -1
  44. package/dist/declarations/src/fields/types/password/index.d.ts +3 -3
  45. package/dist/declarations/src/fields/types/password/index.d.ts.map +1 -1
  46. package/dist/declarations/src/fields/types/relationship/index.d.ts +8 -8
  47. package/dist/declarations/src/fields/types/relationship/index.d.ts.map +1 -1
  48. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts +3 -3
  49. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts.map +1 -1
  50. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts +3 -3
  51. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts.map +1 -1
  52. package/dist/declarations/src/fields/types/relationship/views/index.d.ts +3 -3
  53. package/dist/declarations/src/fields/types/relationship/views/index.d.ts.map +1 -1
  54. package/dist/declarations/src/fields/types/relationship/views/types.d.ts +3 -3
  55. package/dist/declarations/src/fields/types/relationship/views/types.d.ts.map +1 -1
  56. package/dist/declarations/src/fields/types/select/index.d.ts +3 -3
  57. package/dist/declarations/src/fields/types/select/index.d.ts.map +1 -1
  58. package/dist/declarations/src/fields/types/text/index.d.ts +3 -3
  59. package/dist/declarations/src/fields/types/text/index.d.ts.map +1 -1
  60. package/dist/declarations/src/fields/types/timestamp/index.d.ts +3 -3
  61. package/dist/declarations/src/fields/types/timestamp/index.d.ts.map +1 -1
  62. package/dist/declarations/src/fields/types/virtual/index.d.ts +7 -7
  63. package/dist/declarations/src/fields/types/virtual/index.d.ts.map +1 -1
  64. package/dist/declarations/src/helpers.d.ts +249 -13
  65. package/dist/declarations/src/helpers.d.ts.map +1 -1
  66. package/dist/declarations/src/index.d.ts +9 -4
  67. package/dist/declarations/src/index.d.ts.map +1 -1
  68. package/dist/declarations/src/internal-unstable/admin-ui/pages/ListPage/index.d.ts.map +1 -1
  69. package/dist/declarations/src/lib/admin-meta.d.ts +11 -11
  70. package/dist/declarations/src/lib/admin-meta.d.ts.map +1 -1
  71. package/dist/declarations/src/lib/core/access-control.d.ts +18 -18
  72. package/dist/declarations/src/lib/core/access-control.d.ts.map +1 -1
  73. package/dist/declarations/src/lib/core/cascade.d.ts +47 -0
  74. package/dist/declarations/src/lib/core/cascade.d.ts.map +1 -0
  75. package/dist/declarations/src/lib/core/initialise-lists.d.ts +27 -24
  76. package/dist/declarations/src/lib/core/initialise-lists.d.ts.map +1 -1
  77. package/dist/declarations/src/lib/env.d.ts +9 -0
  78. package/dist/declarations/src/lib/env.d.ts.map +1 -0
  79. package/dist/declarations/src/lib/system.d.ts +1 -1
  80. package/dist/declarations/src/lib/system.d.ts.map +1 -1
  81. package/dist/declarations/src/list-features.d.ts +162 -0
  82. package/dist/declarations/src/list-features.d.ts.map +1 -0
  83. package/dist/declarations/src/schema.d.ts +24 -23
  84. package/dist/declarations/src/schema.d.ts.map +1 -1
  85. package/dist/declarations/src/session.d.ts +75 -0
  86. package/dist/declarations/src/session.d.ts.map +1 -1
  87. package/dist/declarations/src/types/admin-meta.d.ts +11 -11
  88. package/dist/declarations/src/types/admin-meta.d.ts.map +1 -1
  89. package/dist/declarations/src/types/config/access-control.d.ts +42 -42
  90. package/dist/declarations/src/types/config/access-control.d.ts.map +1 -1
  91. package/dist/declarations/src/types/config/fields.d.ts +19 -19
  92. package/dist/declarations/src/types/config/fields.d.ts.map +1 -1
  93. package/dist/declarations/src/types/config/hooks.d.ts +131 -131
  94. package/dist/declarations/src/types/config/hooks.d.ts.map +1 -1
  95. package/dist/declarations/src/types/config/index.d.ts +190 -8
  96. package/dist/declarations/src/types/config/index.d.ts.map +1 -1
  97. package/dist/declarations/src/types/config/lists.d.ts +146 -108
  98. package/dist/declarations/src/types/config/lists.d.ts.map +1 -1
  99. package/dist/declarations/src/types/context.d.ts +507 -47
  100. package/dist/declarations/src/types/context.d.ts.map +1 -1
  101. package/dist/declarations/src/types/next-fields.d.ts +28 -28
  102. package/dist/declarations/src/types/next-fields.d.ts.map +1 -1
  103. package/dist/declarations/src/types/type-info.d.ts +3 -3
  104. package/dist/declarations/src/types/type-info.d.ts.map +1 -1
  105. package/dist/{express-455ae20c.cjs.js → express-84d534c2.cjs.js} +6 -6
  106. package/dist/{express-7559ca2d.esm.js → express-d0a4ce99.esm.js} +6 -6
  107. package/dist/{index-15c8f81e.esm.js → index-5d8b0b4e.esm.js} +363 -183
  108. package/dist/index-6055753b.cjs.js +393 -0
  109. package/dist/{index-42045902.cjs.js → index-ac29f382.cjs.js} +363 -185
  110. package/dist/index-f1703b7b.esm.js +386 -0
  111. package/dist/nixxie-cms-core.cjs.js +1388 -30
  112. package/dist/nixxie-cms-core.esm.js +1362 -24
  113. package/dist/{non-null-graphql-add6bb3d.cjs.js → non-null-graphql-4a44c122.cjs.js} +1 -1
  114. package/dist/{non-null-graphql-a84ed64d.esm.js → non-null-graphql-8c5feaae.esm.js} +1 -1
  115. package/dist/{resolve-hooks-165a9ce2.cjs.js → resolve-hooks-10a5f84c.cjs.js} +240 -6
  116. package/dist/{resolve-hooks-6813a045.esm.js → resolve-hooks-9e676794.esm.js} +238 -7
  117. package/dist/{system-a321642d.cjs.js → system-6b37a5f8.cjs.js} +33 -7
  118. package/dist/{system-03e49e4f.esm.js → system-e591d821.esm.js} +33 -7
  119. package/fields/dist/nixxie-cms-core-fields.cjs.js +29 -576
  120. package/fields/dist/nixxie-cms-core-fields.esm.js +18 -565
  121. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.js +4 -2
  122. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js +4 -2
  123. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.cjs.js +1 -6
  124. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.esm.js +1 -6
  125. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.js +4 -2
  126. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.esm.js +4 -2
  127. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.cjs.js +4 -3
  128. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.esm.js +4 -3
  129. package/package.json +4 -4
  130. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.js +4 -3
  131. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +4 -3
  132. package/scripts/dist/nixxie-cms-core-scripts.cjs.js +4 -3
  133. package/scripts/dist/nixxie-cms-core-scripts.esm.js +4 -3
  134. package/session/dist/nixxie-cms-core-session.cjs.js +286 -0
  135. package/session/dist/nixxie-cms-core-session.esm.js +279 -1
  136. package/src/access.ts +25 -25
  137. package/src/admin-ui/admin-meta-graphql.ts +5 -5
  138. package/src/admin-ui/components/CreateButtonLink.tsx +46 -46
  139. package/src/admin-ui/components/Navigation.tsx +3 -3
  140. package/src/admin-ui/context.tsx +6 -6
  141. package/src/admin-ui/utils/Fields.tsx +241 -241
  142. package/src/admin-ui/utils/actionData.ts +36 -36
  143. package/src/admin-ui/utils/filters.ts +148 -148
  144. package/src/admin-ui/utils/useCreateItem.ts +171 -171
  145. package/src/admin-ui/utils/utils.tsx +127 -127
  146. package/src/context.ts +1 -1
  147. package/src/fields/non-null-graphql.ts +115 -115
  148. package/src/fields/types/bigInt/index.ts +6 -6
  149. package/src/fields/types/bytes/index.ts +6 -6
  150. package/src/fields/types/calendarDay/index.ts +18 -19
  151. package/src/fields/types/checkbox/index.ts +6 -6
  152. package/src/fields/types/decimal/index.ts +6 -6
  153. package/src/fields/types/file/index.ts +8 -8
  154. package/src/fields/types/float/index.ts +6 -6
  155. package/src/fields/types/image/index.ts +8 -8
  156. package/src/fields/types/integer/index.ts +6 -6
  157. package/src/fields/types/json/index.ts +5 -5
  158. package/src/fields/types/multiselect/index.ts +7 -7
  159. package/src/fields/types/multiselect/views/index.tsx +149 -151
  160. package/src/fields/types/password/index.ts +6 -6
  161. package/src/fields/types/relationship/index.ts +13 -13
  162. package/src/fields/types/relationship/views/ComboboxMany.tsx +110 -110
  163. package/src/fields/types/relationship/views/ComboboxSingle.tsx +115 -115
  164. package/src/fields/types/relationship/views/ContextualActions.tsx +139 -139
  165. package/src/fields/types/relationship/views/index.tsx +492 -492
  166. package/src/fields/types/relationship/views/types.ts +46 -46
  167. package/src/fields/types/relationship/views/useApolloQuery.ts +185 -185
  168. package/src/fields/types/relationship/views/useFilter.tsx +109 -109
  169. package/src/fields/types/select/index.ts +6 -6
  170. package/src/fields/types/text/index.ts +6 -6
  171. package/src/fields/types/timestamp/index.ts +23 -21
  172. package/src/fields/types/virtual/index.ts +11 -11
  173. package/src/helpers.ts +773 -42
  174. package/src/index.ts +66 -24
  175. package/src/internal-unstable/admin-ui/pages/ItemPage/common.tsx +4 -4
  176. package/src/internal-unstable/admin-ui/pages/ItemPage/index.tsx +5 -5
  177. package/src/internal-unstable/admin-ui/pages/ListPage/index.tsx +8 -8
  178. package/src/lib/admin-meta.ts +369 -369
  179. package/src/lib/context/createContext.ts +6 -0
  180. package/src/lib/core/access-control.ts +434 -434
  181. package/src/lib/core/cascade.ts +236 -0
  182. package/src/lib/core/initialise-lists.ts +49 -33
  183. package/src/lib/core/mutations/index.ts +7 -0
  184. package/src/lib/core/mutations/nested-mutation-many-input-resolvers.ts +145 -145
  185. package/src/lib/core/mutations/nested-mutation-one-input-resolvers.ts +71 -71
  186. package/src/lib/core/queries/output-field.ts +178 -178
  187. package/src/lib/env.ts +50 -0
  188. package/src/lib/id-field.ts +2 -2
  189. package/src/lib/system.ts +221 -207
  190. package/src/lib/typescript-schema-printer.ts +227 -227
  191. package/src/list-features.ts +476 -0
  192. package/src/schema.ts +92 -22
  193. package/src/session.ts +225 -0
  194. package/src/types/admin-meta.ts +218 -218
  195. package/src/types/config/access-control.ts +186 -186
  196. package/src/types/config/fields.ts +96 -96
  197. package/src/types/config/hooks.ts +529 -529
  198. package/src/types/config/index.ts +206 -7
  199. package/src/types/config/lists.ts +606 -565
  200. package/src/types/context.ts +592 -55
  201. package/src/types/next-fields.ts +31 -31
  202. package/src/types/type-info.ts +38 -38
  203. package/src/types/type-tests.ts +21 -21
@@ -0,0 +1,393 @@
1
+ 'use strict';
2
+
3
+ require('pluralize');
4
+ var nextFields = require('./next-fields-49c025ef.cjs.js');
5
+ var resolveHooks = require('./resolve-hooks-10a5f84c.cjs.js');
6
+ require('node:crypto');
7
+ var nonNullGraphql = require('./non-null-graphql-4a44c122.cjs.js');
8
+ require('node:path');
9
+ require('@graphql-ts/schema');
10
+ require('@graphql-ts/extend');
11
+
12
+ const objectEntriesButAssumeNoExtraProperties = Object.entries;
13
+ function internalResolveFilter(entries, mode) {
14
+ const entry = entries.shift();
15
+ if (entry === undefined) return {};
16
+ const [key, val] = entry;
17
+ if (val == null) {
18
+ return {
19
+ AND: [{
20
+ [key]: val
21
+ }, internalResolveFilter(entries, mode)]
22
+ };
23
+ }
24
+ switch (key) {
25
+ case 'equals':
26
+ case 'lt':
27
+ case 'lte':
28
+ case 'gt':
29
+ case 'gte':
30
+ case 'in':
31
+ case 'contains':
32
+ case 'startsWith':
33
+ case 'endsWith':
34
+ {
35
+ return {
36
+ AND: [{
37
+ [key]: val,
38
+ mode
39
+ }, {
40
+ not: null
41
+ }, internalResolveFilter(entries, mode)]
42
+ };
43
+ }
44
+ case 'notIn':
45
+ {
46
+ return {
47
+ AND: [{
48
+ NOT: [internalResolveFilter(objectEntriesButAssumeNoExtraProperties({
49
+ in: val
50
+ }), mode)]
51
+ }, internalResolveFilter(entries, mode)]
52
+ };
53
+ }
54
+ case 'not':
55
+ {
56
+ return {
57
+ AND: [{
58
+ NOT: [internalResolveFilter(objectEntriesButAssumeNoExtraProperties(val), mode)]
59
+ }, internalResolveFilter(entries, mode)]
60
+ };
61
+ }
62
+ }
63
+ }
64
+ function resolveCommon(val) {
65
+ if (val === null) return null;
66
+ return internalResolveFilter(objectEntriesButAssumeNoExtraProperties(val), undefined);
67
+ }
68
+ function resolveString(val) {
69
+ if (val === null) return null;
70
+ const {
71
+ mode,
72
+ ...value
73
+ } = val;
74
+ return internalResolveFilter(objectEntriesButAssumeNoExtraProperties(value), mode !== null && mode !== void 0 ? mode : undefined);
75
+ }
76
+
77
+ var filters = /*#__PURE__*/Object.freeze({
78
+ __proto__: null,
79
+ postgresql: resolveHooks.postgresql,
80
+ sqlite: resolveHooks.sqlite,
81
+ mysql: resolveHooks.mysql,
82
+ resolveCommon: resolveCommon,
83
+ resolveString: resolveString
84
+ });
85
+
86
+ function timestamp(config = {}) {
87
+ const {
88
+ isIndexed,
89
+ defaultValue,
90
+ validation
91
+ } = config;
92
+ return meta => {
93
+ var _config$db, _config$db2, _config$db3, _config$db4, _validation$isRequire;
94
+ if (typeof defaultValue === 'string') {
95
+ try {
96
+ nextFields.g.DateTime.parseValue(defaultValue);
97
+ } catch (err) {
98
+ throw new Error(`${meta.listKey}.${meta.fieldKey}.defaultValue is required to be an ISO8601 date-time string such as ${new Date().toISOString()}`, {
99
+ cause: err
100
+ });
101
+ }
102
+ }
103
+ const parsedDefaultValue = typeof defaultValue === 'string' ? nextFields.g.DateTime.parseValue(defaultValue) : defaultValue;
104
+ // `db.updatedAt` (Prisma `@updatedAt`) and a `defaultValue` are both filled by the database, so
105
+ // the value is not "required" on create even when the column is non-nullable — otherwise
106
+ // `timestamp({ db: { updatedAt: true, isNullable: false } })` (e.g. via withTimestamps) would
107
+ // fail create validation with "missing value".
108
+ const hasPrismaDefaultValue = defaultValue !== undefined || Boolean((_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.updatedAt);
109
+ const {
110
+ mode,
111
+ validate
112
+ } = nonNullGraphql.makeValidateHook(meta, config, undefined, hasPrismaDefaultValue);
113
+ return nextFields.fieldType({
114
+ kind: 'scalar',
115
+ mode,
116
+ scalar: 'DateTime',
117
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
118
+ default: typeof defaultValue === 'string' ? {
119
+ kind: 'literal',
120
+ value: defaultValue
121
+ } : defaultValue === undefined ? undefined : {
122
+ kind: 'now'
123
+ },
124
+ updatedAt: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.updatedAt,
125
+ map: (_config$db3 = config.db) === null || _config$db3 === void 0 ? void 0 : _config$db3.map,
126
+ extendPrismaSchema: (_config$db4 = config.db) === null || _config$db4 === void 0 ? void 0 : _config$db4.extendPrismaSchema
127
+ })({
128
+ ...config,
129
+ ...nonNullGraphql.defaultIsRequired(config, (_validation$isRequire = validation === null || validation === void 0 ? void 0 : validation.isRequired) !== null && _validation$isRequire !== void 0 ? _validation$isRequire : false),
130
+ hooks: {
131
+ ...config.hooks,
132
+ validate
133
+ },
134
+ input: {
135
+ uniqueWhere: isIndexed === 'unique' ? {
136
+ arg: nextFields.g.arg({
137
+ type: nextFields.g.DateTime
138
+ })
139
+ } : undefined,
140
+ where: {
141
+ arg: nextFields.g.arg({
142
+ type: filters[meta.provider].DateTime[mode]
143
+ }),
144
+ resolve: mode === 'optional' ? resolveCommon : undefined
145
+ },
146
+ create: {
147
+ arg: nextFields.g.arg({
148
+ type: nextFields.g.DateTime,
149
+ // TODO: add support for defaultValue of { kind: 'now' } in the GraphQL API
150
+ defaultValue: parsedDefaultValue instanceof Date ? parsedDefaultValue : undefined
151
+ }),
152
+ resolve(val) {
153
+ if (val === undefined) {
154
+ var _config$db5;
155
+ if (parsedDefaultValue === undefined && (_config$db5 = config.db) !== null && _config$db5 !== void 0 && _config$db5.updatedAt) return undefined;
156
+ if (parsedDefaultValue instanceof Date || parsedDefaultValue === undefined) {
157
+ return parsedDefaultValue !== null && parsedDefaultValue !== void 0 ? parsedDefaultValue : null;
158
+ }
159
+ return new Date();
160
+ }
161
+ return val;
162
+ }
163
+ },
164
+ update: {
165
+ arg: nextFields.g.arg({
166
+ type: nextFields.g.DateTime
167
+ })
168
+ },
169
+ orderBy: {
170
+ arg: nextFields.g.arg({
171
+ type: nextFields.orderDirectionEnum
172
+ })
173
+ }
174
+ },
175
+ output: nextFields.g.field({
176
+ type: nextFields.g.DateTime
177
+ }),
178
+ __nxTelemetryFieldTypeName: '@nixxie-cms/timestamp',
179
+ views: '@nixxie-cms/core/fields/types/timestamp/views',
180
+ getAdminMeta() {
181
+ var _config$db$updatedAt, _config$db6;
182
+ return {
183
+ defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null,
184
+ updatedAt: (_config$db$updatedAt = (_config$db6 = config.db) === null || _config$db6 === void 0 ? void 0 : _config$db6.updatedAt) !== null && _config$db$updatedAt !== void 0 ? _config$db$updatedAt : false
185
+ };
186
+ }
187
+ });
188
+ };
189
+ }
190
+
191
+ function text(config = {}) {
192
+ var _config$db, _config$db2, _config$db2$isNullabl, _validation$isRequire, _validation$length$mi, _validation$length, _validation$length2, _validation$length3;
193
+ const {
194
+ defaultValue: defaultValue_,
195
+ isIndexed,
196
+ validation = {}
197
+ } = config;
198
+ (_config$db = config.db) !== null && _config$db !== void 0 ? _config$db : config.db = {};
199
+ (_config$db2$isNullabl = (_config$db2 = config.db).isNullable) !== null && _config$db2$isNullabl !== void 0 ? _config$db2$isNullabl : _config$db2.isNullable = false; // TODO: sigh, remove in breaking change?
200
+
201
+ const isRequired = (_validation$isRequire = validation.isRequired) !== null && _validation$isRequire !== void 0 ? _validation$isRequire : false;
202
+ const match = validation.match;
203
+ const min = validation.isRequired ? (_validation$length$mi = (_validation$length = validation.length) === null || _validation$length === void 0 ? void 0 : _validation$length.min) !== null && _validation$length$mi !== void 0 ? _validation$length$mi : 1 : (_validation$length2 = validation.length) === null || _validation$length2 === void 0 ? void 0 : _validation$length2.min;
204
+ const max = (_validation$length3 = validation.length) === null || _validation$length3 === void 0 ? void 0 : _validation$length3.max;
205
+ return meta => {
206
+ var _config$db$isNullable, _config$db3, _config$db4, _config$db5, _config$db6;
207
+ if (min !== undefined && (!Number.isInteger(min) || min < 0)) {
208
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.length.min: ${min} but it must be a positive integer`);
209
+ }
210
+ if (max !== undefined && (!Number.isInteger(max) || max < 0)) {
211
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.length.max: ${max} but it must be a positive integer`);
212
+ }
213
+ if (isRequired && min !== undefined && min === 0) {
214
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.isRequired: true and validation.length.min: 0, this is not allowed because validation.isRequired implies at least a min length of 1`);
215
+ }
216
+ if (isRequired && max !== undefined && max === 0) {
217
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies validation.isRequired: true and validation.length.max: 0, this is not allowed because validation.isRequired implies at least a max length of 1`);
218
+ }
219
+ if (min !== undefined && max !== undefined && min > max) {
220
+ throw new Error(`${meta.listKey}.${meta.fieldKey} specifies a validation.length.max that is less than the validation.length.min, and therefore has no valid options`);
221
+ }
222
+
223
+ // defaulted to false as a zero length string is preferred to null
224
+ const isNullable = (_config$db$isNullable = (_config$db3 = config.db) === null || _config$db3 === void 0 ? void 0 : _config$db3.isNullable) !== null && _config$db$isNullable !== void 0 ? _config$db$isNullable : false;
225
+ const defaultValue = isNullable ? defaultValue_ !== null && defaultValue_ !== void 0 ? defaultValue_ : null : defaultValue_ !== null && defaultValue_ !== void 0 ? defaultValue_ : '';
226
+ const hasAdditionalValidation = match || min !== undefined || max !== undefined;
227
+ const {
228
+ mode,
229
+ validate
230
+ } = nonNullGraphql.makeValidateHook(meta, config, hasAdditionalValidation ? ({
231
+ resolvedData,
232
+ operation,
233
+ addValidationError
234
+ }) => {
235
+ if (operation === 'delete') return;
236
+ const value = resolvedData[meta.fieldKey];
237
+ if (value != null) {
238
+ if (min !== undefined && value.length < min) {
239
+ if (min === 1) {
240
+ addValidationError(`value must not be empty`);
241
+ } else {
242
+ addValidationError(`value must be at least ${min} characters long`);
243
+ }
244
+ }
245
+ if (max !== undefined && value.length > max) {
246
+ addValidationError(`value must be no longer than ${max} characters`);
247
+ }
248
+ if (match && !match.regex.test(value)) {
249
+ var _match$explanation;
250
+ addValidationError((_match$explanation = match.explanation) !== null && _match$explanation !== void 0 ? _match$explanation : `value must match ${match.regex}`);
251
+ }
252
+ }
253
+ } : undefined);
254
+ return nextFields.fieldType({
255
+ kind: 'scalar',
256
+ mode,
257
+ scalar: 'String',
258
+ default: defaultValue === null ? undefined : {
259
+ kind: 'literal',
260
+ value: defaultValue
261
+ },
262
+ index: isIndexed === true ? 'index' : isIndexed || undefined,
263
+ map: (_config$db4 = config.db) === null || _config$db4 === void 0 ? void 0 : _config$db4.map,
264
+ nativeType: (_config$db5 = config.db) === null || _config$db5 === void 0 ? void 0 : _config$db5.nativeType,
265
+ extendPrismaSchema: (_config$db6 = config.db) === null || _config$db6 === void 0 ? void 0 : _config$db6.extendPrismaSchema
266
+ })({
267
+ ...config,
268
+ ...nonNullGraphql.defaultIsRequired(config, isRequired),
269
+ hooks: {
270
+ ...config.hooks,
271
+ validate
272
+ },
273
+ input: {
274
+ uniqueWhere: isIndexed === 'unique' ? {
275
+ arg: nextFields.g.arg({
276
+ type: nextFields.g.String
277
+ })
278
+ } : undefined,
279
+ where: {
280
+ arg: nextFields.g.arg({
281
+ type: filters[meta.provider].String[mode]
282
+ }),
283
+ resolve: mode === 'required' ? undefined : resolveString
284
+ },
285
+ create: {
286
+ arg: nextFields.g.arg({
287
+ type: nextFields.g.String,
288
+ defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined
289
+ }),
290
+ resolve(val) {
291
+ if (val !== undefined) return val;
292
+ return defaultValue !== null && defaultValue !== void 0 ? defaultValue : null;
293
+ }
294
+ },
295
+ update: {
296
+ arg: nextFields.g.arg({
297
+ type: nextFields.g.String
298
+ })
299
+ },
300
+ orderBy: {
301
+ arg: nextFields.g.arg({
302
+ type: nextFields.orderDirectionEnum
303
+ })
304
+ }
305
+ },
306
+ output: nextFields.g.field({
307
+ type: nextFields.g.String
308
+ }),
309
+ __nxTelemetryFieldTypeName: '@nixxie-cms/text',
310
+ views: '@nixxie-cms/core/fields/types/text/views',
311
+ getAdminMeta() {
312
+ var _config$ui$displayMod, _config$ui, _match$explanation2;
313
+ return {
314
+ displayMode: (_config$ui$displayMod = (_config$ui = config.ui) === null || _config$ui === void 0 ? void 0 : _config$ui.displayMode) !== null && _config$ui$displayMod !== void 0 ? _config$ui$displayMod : 'input',
315
+ shouldUseModeInsensitive: meta.provider === 'postgresql',
316
+ validation: {
317
+ match: match ? {
318
+ regex: {
319
+ source: match.regex.source,
320
+ flags: match.regex.flags
321
+ },
322
+ explanation: (_match$explanation2 = match.explanation) !== null && _match$explanation2 !== void 0 ? _match$explanation2 : `value must match ${match.regex}`
323
+ } : null,
324
+ length: {
325
+ max: max !== null && max !== void 0 ? max : null,
326
+ min: min !== null && min !== void 0 ? min : null
327
+ }
328
+ },
329
+ defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : isNullable ? null : '',
330
+ isNullable
331
+ };
332
+ }
333
+ });
334
+ };
335
+ }
336
+
337
+ function json({
338
+ defaultValue = null,
339
+ ...config
340
+ } = {}) {
341
+ return meta => {
342
+ var _config$db, _config$db2;
343
+ if (config.isIndexed === 'unique') {
344
+ throw Error("isIndexed: 'unique' is not a supported option for field type json");
345
+ }
346
+ return nextFields.fieldType({
347
+ kind: 'scalar',
348
+ mode: 'optional',
349
+ scalar: 'Json',
350
+ default: defaultValue === null ? undefined : meta.provider === 'sqlite' ? undefined : {
351
+ kind: 'literal',
352
+ // TODO: waiting on https://github.com/prisma/prisma/issues/26571
353
+ // input.create manages defaultValues anyway
354
+ value: JSON.stringify(defaultValue !== null && defaultValue !== void 0 ? defaultValue : null)
355
+ },
356
+ map: (_config$db = config.db) === null || _config$db === void 0 ? void 0 : _config$db.map,
357
+ extendPrismaSchema: (_config$db2 = config.db) === null || _config$db2 === void 0 ? void 0 : _config$db2.extendPrismaSchema
358
+ })({
359
+ ...config,
360
+ __nxTelemetryFieldTypeName: '@nixxie-cms/json',
361
+ input: {
362
+ create: {
363
+ arg: nextFields.g.arg({
364
+ type: nextFields.g.JSON
365
+ }),
366
+ resolve(val) {
367
+ // TODO: redundant when https://github.com/prisma/prisma/issues/26571 is resolved
368
+ return val === undefined ? defaultValue : val;
369
+ }
370
+ },
371
+ update: {
372
+ arg: nextFields.g.arg({
373
+ type: nextFields.g.JSON
374
+ })
375
+ }
376
+ },
377
+ output: nextFields.g.field({
378
+ type: nextFields.g.JSON
379
+ }),
380
+ views: '@nixxie-cms/core/fields/types/json/views',
381
+ getAdminMeta: () => ({
382
+ defaultValue
383
+ })
384
+ });
385
+ };
386
+ }
387
+
388
+ exports.filters = filters;
389
+ exports.json = json;
390
+ exports.resolveCommon = resolveCommon;
391
+ exports.resolveString = resolveString;
392
+ exports.text = text;
393
+ exports.timestamp = timestamp;