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