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