@nixxie-cms/core 1.0.3 → 1.1.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 (202) hide show
  1. package/CHANGES-1.1.md +134 -0
  2. package/context/dist/nixxie-cms-core-context.cjs.js +4 -3
  3. package/context/dist/nixxie-cms-core-context.esm.js +3 -2
  4. package/dist/declarations/src/access.d.ts +2 -2
  5. package/dist/declarations/src/access.d.ts.map +1 -1
  6. package/dist/declarations/src/admin-ui/components/Navigation.d.ts +2 -2
  7. package/dist/declarations/src/admin-ui/components/Navigation.d.ts.map +1 -1
  8. package/dist/declarations/src/admin-ui/context.d.ts +6 -6
  9. package/dist/declarations/src/admin-ui/context.d.ts.map +1 -1
  10. package/dist/declarations/src/admin-ui/utils/Fields.d.ts +3 -3
  11. package/dist/declarations/src/admin-ui/utils/Fields.d.ts.map +1 -1
  12. package/dist/declarations/src/admin-ui/utils/filters.d.ts +5 -5
  13. package/dist/declarations/src/admin-ui/utils/filters.d.ts.map +1 -1
  14. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts +3 -3
  15. package/dist/declarations/src/admin-ui/utils/useCreateItem.d.ts.map +1 -1
  16. package/dist/declarations/src/admin-ui/utils/utils.d.ts +2 -2
  17. package/dist/declarations/src/admin-ui/utils/utils.d.ts.map +1 -1
  18. package/dist/declarations/src/context.d.ts +1 -1
  19. package/dist/declarations/src/context.d.ts.map +1 -1
  20. package/dist/declarations/src/fields/types/bigInt/index.d.ts +3 -3
  21. package/dist/declarations/src/fields/types/bigInt/index.d.ts.map +1 -1
  22. package/dist/declarations/src/fields/types/bytes/index.d.ts +3 -3
  23. package/dist/declarations/src/fields/types/bytes/index.d.ts.map +1 -1
  24. package/dist/declarations/src/fields/types/calendarDay/index.d.ts +3 -3
  25. package/dist/declarations/src/fields/types/calendarDay/index.d.ts.map +1 -1
  26. package/dist/declarations/src/fields/types/checkbox/index.d.ts +3 -3
  27. package/dist/declarations/src/fields/types/checkbox/index.d.ts.map +1 -1
  28. package/dist/declarations/src/fields/types/decimal/index.d.ts +3 -3
  29. package/dist/declarations/src/fields/types/decimal/index.d.ts.map +1 -1
  30. package/dist/declarations/src/fields/types/file/index.d.ts +4 -4
  31. package/dist/declarations/src/fields/types/file/index.d.ts.map +1 -1
  32. package/dist/declarations/src/fields/types/float/index.d.ts +3 -3
  33. package/dist/declarations/src/fields/types/float/index.d.ts.map +1 -1
  34. package/dist/declarations/src/fields/types/image/index.d.ts +4 -4
  35. package/dist/declarations/src/fields/types/image/index.d.ts.map +1 -1
  36. package/dist/declarations/src/fields/types/integer/index.d.ts +3 -3
  37. package/dist/declarations/src/fields/types/integer/index.d.ts.map +1 -1
  38. package/dist/declarations/src/fields/types/json/index.d.ts +3 -3
  39. package/dist/declarations/src/fields/types/json/index.d.ts.map +1 -1
  40. package/dist/declarations/src/fields/types/multiselect/index.d.ts +3 -3
  41. package/dist/declarations/src/fields/types/multiselect/index.d.ts.map +1 -1
  42. package/dist/declarations/src/fields/types/multiselect/views/index.d.ts.map +1 -1
  43. package/dist/declarations/src/fields/types/password/index.d.ts +3 -3
  44. package/dist/declarations/src/fields/types/password/index.d.ts.map +1 -1
  45. package/dist/declarations/src/fields/types/relationship/index.d.ts +8 -8
  46. package/dist/declarations/src/fields/types/relationship/index.d.ts.map +1 -1
  47. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts +3 -3
  48. package/dist/declarations/src/fields/types/relationship/views/ComboboxMany.d.ts.map +1 -1
  49. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts +3 -3
  50. package/dist/declarations/src/fields/types/relationship/views/ComboboxSingle.d.ts.map +1 -1
  51. package/dist/declarations/src/fields/types/relationship/views/index.d.ts +3 -3
  52. package/dist/declarations/src/fields/types/relationship/views/index.d.ts.map +1 -1
  53. package/dist/declarations/src/fields/types/relationship/views/types.d.ts +3 -3
  54. package/dist/declarations/src/fields/types/relationship/views/types.d.ts.map +1 -1
  55. package/dist/declarations/src/fields/types/select/index.d.ts +3 -3
  56. package/dist/declarations/src/fields/types/select/index.d.ts.map +1 -1
  57. package/dist/declarations/src/fields/types/text/index.d.ts +3 -3
  58. package/dist/declarations/src/fields/types/text/index.d.ts.map +1 -1
  59. package/dist/declarations/src/fields/types/timestamp/index.d.ts +3 -3
  60. package/dist/declarations/src/fields/types/timestamp/index.d.ts.map +1 -1
  61. package/dist/declarations/src/fields/types/virtual/index.d.ts +7 -7
  62. package/dist/declarations/src/fields/types/virtual/index.d.ts.map +1 -1
  63. package/dist/declarations/src/helpers.d.ts +249 -13
  64. package/dist/declarations/src/helpers.d.ts.map +1 -1
  65. package/dist/declarations/src/index.d.ts +9 -4
  66. package/dist/declarations/src/index.d.ts.map +1 -1
  67. package/dist/declarations/src/internal-unstable/admin-ui/pages/ListPage/index.d.ts.map +1 -1
  68. package/dist/declarations/src/lib/admin-meta.d.ts +11 -11
  69. package/dist/declarations/src/lib/admin-meta.d.ts.map +1 -1
  70. package/dist/declarations/src/lib/core/access-control.d.ts +18 -18
  71. package/dist/declarations/src/lib/core/access-control.d.ts.map +1 -1
  72. package/dist/declarations/src/lib/core/cascade.d.ts +47 -0
  73. package/dist/declarations/src/lib/core/cascade.d.ts.map +1 -0
  74. package/dist/declarations/src/lib/core/initialise-lists.d.ts +27 -24
  75. package/dist/declarations/src/lib/core/initialise-lists.d.ts.map +1 -1
  76. package/dist/declarations/src/lib/env.d.ts +9 -0
  77. package/dist/declarations/src/lib/env.d.ts.map +1 -0
  78. package/dist/declarations/src/lib/system.d.ts +1 -1
  79. package/dist/declarations/src/lib/system.d.ts.map +1 -1
  80. package/dist/declarations/src/list-features.d.ts +162 -0
  81. package/dist/declarations/src/list-features.d.ts.map +1 -0
  82. package/dist/declarations/src/schema.d.ts +24 -23
  83. package/dist/declarations/src/schema.d.ts.map +1 -1
  84. package/dist/declarations/src/session.d.ts +75 -0
  85. package/dist/declarations/src/session.d.ts.map +1 -1
  86. package/dist/declarations/src/types/admin-meta.d.ts +11 -11
  87. package/dist/declarations/src/types/admin-meta.d.ts.map +1 -1
  88. package/dist/declarations/src/types/config/access-control.d.ts +42 -42
  89. package/dist/declarations/src/types/config/access-control.d.ts.map +1 -1
  90. package/dist/declarations/src/types/config/fields.d.ts +19 -19
  91. package/dist/declarations/src/types/config/fields.d.ts.map +1 -1
  92. package/dist/declarations/src/types/config/hooks.d.ts +131 -131
  93. package/dist/declarations/src/types/config/hooks.d.ts.map +1 -1
  94. package/dist/declarations/src/types/config/index.d.ts +171 -8
  95. package/dist/declarations/src/types/config/index.d.ts.map +1 -1
  96. package/dist/declarations/src/types/config/lists.d.ts +146 -108
  97. package/dist/declarations/src/types/config/lists.d.ts.map +1 -1
  98. package/dist/declarations/src/types/context.d.ts +349 -47
  99. package/dist/declarations/src/types/context.d.ts.map +1 -1
  100. package/dist/declarations/src/types/next-fields.d.ts +28 -28
  101. package/dist/declarations/src/types/next-fields.d.ts.map +1 -1
  102. package/dist/declarations/src/types/type-info.d.ts +3 -3
  103. package/dist/declarations/src/types/type-info.d.ts.map +1 -1
  104. package/dist/{express-7559ca2d.esm.js → express-0abbce07.esm.js} +6 -6
  105. package/dist/{express-455ae20c.cjs.js → express-7ca6f76a.cjs.js} +6 -6
  106. package/dist/{index-15c8f81e.esm.js → index-5d8b0b4e.esm.js} +363 -183
  107. package/dist/index-6055753b.cjs.js +393 -0
  108. package/dist/{index-42045902.cjs.js → index-ac29f382.cjs.js} +363 -185
  109. package/dist/index-f1703b7b.esm.js +386 -0
  110. package/dist/nixxie-cms-core.cjs.js +1387 -30
  111. package/dist/nixxie-cms-core.esm.js +1361 -24
  112. package/dist/{non-null-graphql-add6bb3d.cjs.js → non-null-graphql-4a44c122.cjs.js} +1 -1
  113. package/dist/{non-null-graphql-a84ed64d.esm.js → non-null-graphql-8c5feaae.esm.js} +1 -1
  114. package/dist/{resolve-hooks-165a9ce2.cjs.js → resolve-hooks-10a5f84c.cjs.js} +240 -6
  115. package/dist/{resolve-hooks-6813a045.esm.js → resolve-hooks-9e676794.esm.js} +238 -7
  116. package/dist/{system-03e49e4f.esm.js → system-4d2a2648.esm.js} +32 -7
  117. package/dist/{system-a321642d.cjs.js → system-69e1a285.cjs.js} +32 -7
  118. package/fields/dist/nixxie-cms-core-fields.cjs.js +29 -576
  119. package/fields/dist/nixxie-cms-core-fields.esm.js +18 -565
  120. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.cjs.js +4 -2
  121. package/fields/types/bytes/dist/nixxie-cms-core-fields-types-bytes.esm.js +4 -2
  122. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.cjs.js +1 -6
  123. package/fields/types/multiselect/views/dist/nixxie-cms-core-fields-types-multiselect-views.esm.js +1 -6
  124. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.cjs.js +4 -2
  125. package/fields/types/password/dist/nixxie-cms-core-fields-types-password.esm.js +4 -2
  126. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.cjs.js +4 -3
  127. package/internal-unstable/artifacts/dist/nixxie-cms-core-internal-unstable-artifacts.esm.js +4 -3
  128. package/package.json +4 -4
  129. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.cjs.js +4 -3
  130. package/scripts/cli/dist/nixxie-cms-core-scripts-cli.esm.js +4 -3
  131. package/scripts/dist/nixxie-cms-core-scripts.cjs.js +4 -3
  132. package/scripts/dist/nixxie-cms-core-scripts.esm.js +4 -3
  133. package/session/dist/nixxie-cms-core-session.cjs.js +286 -0
  134. package/session/dist/nixxie-cms-core-session.esm.js +279 -1
  135. package/src/access.ts +25 -25
  136. package/src/admin-ui/admin-meta-graphql.ts +5 -5
  137. package/src/admin-ui/components/CreateButtonLink.tsx +46 -46
  138. package/src/admin-ui/components/Navigation.tsx +3 -3
  139. package/src/admin-ui/context.tsx +6 -6
  140. package/src/admin-ui/utils/Fields.tsx +241 -241
  141. package/src/admin-ui/utils/actionData.ts +36 -36
  142. package/src/admin-ui/utils/filters.ts +148 -148
  143. package/src/admin-ui/utils/useCreateItem.ts +171 -171
  144. package/src/admin-ui/utils/utils.tsx +127 -127
  145. package/src/context.ts +1 -1
  146. package/src/fields/non-null-graphql.ts +115 -115
  147. package/src/fields/types/bigInt/index.ts +6 -6
  148. package/src/fields/types/bytes/index.ts +6 -6
  149. package/src/fields/types/calendarDay/index.ts +18 -19
  150. package/src/fields/types/checkbox/index.ts +6 -6
  151. package/src/fields/types/decimal/index.ts +6 -6
  152. package/src/fields/types/file/index.ts +8 -8
  153. package/src/fields/types/float/index.ts +6 -6
  154. package/src/fields/types/image/index.ts +8 -8
  155. package/src/fields/types/integer/index.ts +6 -6
  156. package/src/fields/types/json/index.ts +5 -5
  157. package/src/fields/types/multiselect/index.ts +7 -7
  158. package/src/fields/types/multiselect/views/index.tsx +149 -151
  159. package/src/fields/types/password/index.ts +6 -6
  160. package/src/fields/types/relationship/index.ts +13 -13
  161. package/src/fields/types/relationship/views/ComboboxMany.tsx +110 -110
  162. package/src/fields/types/relationship/views/ComboboxSingle.tsx +115 -115
  163. package/src/fields/types/relationship/views/ContextualActions.tsx +139 -139
  164. package/src/fields/types/relationship/views/index.tsx +492 -492
  165. package/src/fields/types/relationship/views/types.ts +46 -46
  166. package/src/fields/types/relationship/views/useApolloQuery.ts +185 -185
  167. package/src/fields/types/relationship/views/useFilter.tsx +109 -109
  168. package/src/fields/types/select/index.ts +6 -6
  169. package/src/fields/types/text/index.ts +6 -6
  170. package/src/fields/types/timestamp/index.ts +23 -21
  171. package/src/fields/types/virtual/index.ts +11 -11
  172. package/src/helpers.ts +773 -42
  173. package/src/index.ts +66 -24
  174. package/src/internal-unstable/admin-ui/pages/ItemPage/common.tsx +4 -4
  175. package/src/internal-unstable/admin-ui/pages/ItemPage/index.tsx +5 -5
  176. package/src/internal-unstable/admin-ui/pages/ListPage/index.tsx +8 -8
  177. package/src/lib/admin-meta.ts +369 -369
  178. package/src/lib/context/createContext.ts +5 -0
  179. package/src/lib/core/access-control.ts +434 -434
  180. package/src/lib/core/cascade.ts +236 -0
  181. package/src/lib/core/initialise-lists.ts +49 -33
  182. package/src/lib/core/mutations/index.ts +7 -0
  183. package/src/lib/core/mutations/nested-mutation-many-input-resolvers.ts +145 -145
  184. package/src/lib/core/mutations/nested-mutation-one-input-resolvers.ts +71 -71
  185. package/src/lib/core/queries/output-field.ts +178 -178
  186. package/src/lib/env.ts +50 -0
  187. package/src/lib/id-field.ts +2 -2
  188. package/src/lib/system.ts +221 -207
  189. package/src/lib/typescript-schema-printer.ts +227 -227
  190. package/src/list-features.ts +476 -0
  191. package/src/schema.ts +91 -22
  192. package/src/session.ts +225 -0
  193. package/src/types/admin-meta.ts +218 -218
  194. package/src/types/config/access-control.ts +186 -186
  195. package/src/types/config/fields.ts +96 -96
  196. package/src/types/config/hooks.ts +529 -529
  197. package/src/types/config/index.ts +185 -7
  198. package/src/types/config/lists.ts +606 -565
  199. package/src/types/context.ts +426 -55
  200. package/src/types/next-fields.ts +31 -31
  201. package/src/types/type-info.ts +38 -38
  202. 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;