payload 3.0.0-beta.127 → 3.0.0-beta.129
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.
- package/dist/admin/RichText.d.ts +8 -21
- package/dist/admin/RichText.d.ts.map +1 -1
- package/dist/admin/RichText.js.map +1 -1
- package/dist/admin/elements/Cell.d.ts +7 -9
- package/dist/admin/elements/Cell.d.ts.map +1 -1
- package/dist/admin/elements/Cell.js.map +1 -1
- package/dist/admin/fields/Array.d.ts +3 -3
- package/dist/admin/fields/Array.d.ts.map +1 -1
- package/dist/admin/fields/Array.js.map +1 -1
- package/dist/admin/fields/Blocks.d.ts +2 -1
- package/dist/admin/fields/Blocks.d.ts.map +1 -1
- package/dist/admin/fields/Blocks.js.map +1 -1
- package/dist/admin/fields/Checkbox.d.ts +1 -0
- package/dist/admin/fields/Checkbox.d.ts.map +1 -1
- package/dist/admin/fields/Checkbox.js.map +1 -1
- package/dist/admin/fields/Code.d.ts +2 -1
- package/dist/admin/fields/Code.d.ts.map +1 -1
- package/dist/admin/fields/Code.js.map +1 -1
- package/dist/admin/fields/Collapsible.d.ts +5 -2
- package/dist/admin/fields/Collapsible.d.ts.map +1 -1
- package/dist/admin/fields/Collapsible.js.map +1 -1
- package/dist/admin/fields/Date.d.ts +1 -0
- package/dist/admin/fields/Date.d.ts.map +1 -1
- package/dist/admin/fields/Date.js.map +1 -1
- package/dist/admin/fields/Email.d.ts +1 -1
- package/dist/admin/fields/Email.d.ts.map +1 -1
- package/dist/admin/fields/Email.js.map +1 -1
- package/dist/admin/fields/Group.d.ts +5 -2
- package/dist/admin/fields/Group.d.ts.map +1 -1
- package/dist/admin/fields/Group.js.map +1 -1
- package/dist/admin/fields/Hidden.d.ts +7 -6
- package/dist/admin/fields/Hidden.d.ts.map +1 -1
- package/dist/admin/fields/Hidden.js.map +1 -1
- package/dist/admin/fields/JSON.d.ts +1 -0
- package/dist/admin/fields/JSON.d.ts.map +1 -1
- package/dist/admin/fields/JSON.js.map +1 -1
- package/dist/admin/fields/Join.d.ts +3 -1
- package/dist/admin/fields/Join.d.ts.map +1 -1
- package/dist/admin/fields/Join.js.map +1 -1
- package/dist/admin/fields/Number.d.ts +1 -0
- package/dist/admin/fields/Number.d.ts.map +1 -1
- package/dist/admin/fields/Number.js.map +1 -1
- package/dist/admin/fields/Point.d.ts +1 -0
- package/dist/admin/fields/Point.d.ts.map +1 -1
- package/dist/admin/fields/Point.js.map +1 -1
- package/dist/admin/fields/Radio.d.ts +1 -0
- package/dist/admin/fields/Radio.d.ts.map +1 -1
- package/dist/admin/fields/Radio.js.map +1 -1
- package/dist/admin/fields/Relationship.d.ts +1 -0
- package/dist/admin/fields/Relationship.d.ts.map +1 -1
- package/dist/admin/fields/Relationship.js.map +1 -1
- package/dist/admin/fields/RichText.d.ts +3 -2
- package/dist/admin/fields/RichText.d.ts.map +1 -1
- package/dist/admin/fields/RichText.js.map +1 -1
- package/dist/admin/fields/Row.d.ts +1 -2
- package/dist/admin/fields/Row.d.ts.map +1 -1
- package/dist/admin/fields/Row.js.map +1 -1
- package/dist/admin/fields/Select.d.ts +1 -0
- package/dist/admin/fields/Select.d.ts.map +1 -1
- package/dist/admin/fields/Select.js.map +1 -1
- package/dist/admin/fields/Tabs.d.ts +4 -2
- package/dist/admin/fields/Tabs.d.ts.map +1 -1
- package/dist/admin/fields/Tabs.js.map +1 -1
- package/dist/admin/fields/Text.d.ts +1 -0
- package/dist/admin/fields/Text.d.ts.map +1 -1
- package/dist/admin/fields/Text.js.map +1 -1
- package/dist/admin/fields/Textarea.d.ts +1 -0
- package/dist/admin/fields/Textarea.d.ts.map +1 -1
- package/dist/admin/fields/Textarea.js.map +1 -1
- package/dist/admin/fields/UI.d.ts +8 -0
- package/dist/admin/fields/UI.d.ts.map +1 -0
- package/dist/admin/fields/UI.js +3 -0
- package/dist/admin/fields/UI.js.map +1 -0
- package/dist/admin/fields/Upload.d.ts +1 -0
- package/dist/admin/fields/Upload.d.ts.map +1 -1
- package/dist/admin/fields/Upload.js.map +1 -1
- package/dist/admin/forms/Description.d.ts +1 -2
- package/dist/admin/forms/Description.d.ts.map +1 -1
- package/dist/admin/forms/Description.js.map +1 -1
- package/dist/admin/forms/Error.d.ts +0 -2
- package/dist/admin/forms/Error.d.ts.map +1 -1
- package/dist/admin/forms/Error.js.map +1 -1
- package/dist/admin/forms/Field.d.ts +53 -29
- package/dist/admin/forms/Field.d.ts.map +1 -1
- package/dist/admin/forms/Field.js.map +1 -1
- package/dist/admin/forms/Form.d.ts +46 -3
- package/dist/admin/forms/Form.d.ts.map +1 -1
- package/dist/admin/forms/Form.js.map +1 -1
- package/dist/admin/forms/Label.d.ts +1 -2
- package/dist/admin/forms/Label.d.ts.map +1 -1
- package/dist/admin/forms/Label.js.map +1 -1
- package/dist/admin/functions/index.d.ts +44 -0
- package/dist/admin/functions/index.d.ts.map +1 -0
- package/dist/admin/functions/index.js +3 -0
- package/dist/admin/functions/index.js.map +1 -0
- package/dist/admin/types.d.ts +63 -20
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js +4 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/admin/views/types.d.ts +9 -6
- package/dist/admin/views/types.d.ts.map +1 -1
- package/dist/admin/views/types.js.map +1 -1
- package/dist/assets/images/github-banner-nextjs-native.jpg +0 -0
- package/dist/auth/ensureUsernameOrEmail.js +4 -4
- package/dist/auth/ensureUsernameOrEmail.js.map +1 -1
- package/dist/auth/getFieldsToSign.js +13 -13
- package/dist/auth/getFieldsToSign.js.map +1 -1
- package/dist/auth/operations/local/auth.d.ts.map +1 -1
- package/dist/auth/operations/local/auth.js +2 -2
- package/dist/auth/operations/local/auth.js.map +1 -1
- package/dist/auth/operations/login.js +10 -10
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/strategies/local/generatePasswordSaltHash.js +2 -2
- package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
- package/dist/auth/strategies/local/register.js +4 -4
- package/dist/auth/strategies/local/register.js.map +1 -1
- package/dist/bin/generateImportMap/index.d.ts.map +1 -1
- package/dist/bin/generateImportMap/index.js +32 -5
- package/dist/bin/generateImportMap/index.js.map +1 -1
- package/dist/bin/generateImportMap/parsePayloadComponent.d.ts +1 -1
- package/dist/bin/generateImportMap/parsePayloadComponent.js +5 -5
- package/dist/bin/generateImportMap/parsePayloadComponent.js.map +1 -1
- package/dist/bin/migrate.js +17 -17
- package/dist/bin/migrate.js.map +1 -1
- package/dist/collections/config/client.d.ts +23 -35
- package/dist/collections/config/client.d.ts.map +1 -1
- package/dist/collections/config/client.js +104 -1
- package/dist/collections/config/client.js.map +1 -1
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +4 -2
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/types.d.ts +3 -3
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js.map +1 -1
- package/dist/collections/operations/countVersions.d.ts +14 -0
- package/dist/collections/operations/countVersions.d.ts.map +1 -0
- package/dist/collections/operations/countVersions.js +74 -0
- package/dist/collections/operations/countVersions.js.map +1 -0
- package/dist/collections/operations/local/count.d.ts.map +1 -1
- package/dist/collections/operations/local/count.js +1 -0
- package/dist/collections/operations/local/count.js.map +1 -1
- package/dist/collections/operations/local/countVersions.d.ts +20 -0
- package/dist/collections/operations/local/countVersions.d.ts.map +1 -0
- package/dist/collections/operations/local/countVersions.js +20 -0
- package/dist/collections/operations/local/countVersions.js.map +1 -0
- package/dist/collections/operations/local/index.d.ts +2 -0
- package/dist/collections/operations/local/index.d.ts.map +1 -1
- package/dist/collections/operations/local/index.js +2 -0
- package/dist/collections/operations/local/index.js.map +1 -1
- package/dist/collections/operations/utils.d.ts +6 -0
- package/dist/collections/operations/utils.d.ts.map +1 -1
- package/dist/collections/operations/utils.js.map +1 -1
- package/dist/config/client.d.ts +10 -13
- package/dist/config/client.d.ts.map +1 -1
- package/dist/config/client.js +36 -0
- package/dist/config/client.js.map +1 -1
- package/dist/config/types.d.ts +20 -15
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/getLocalizedPaths.js +1 -1
- package/dist/database/getLocalizedPaths.js.map +1 -1
- package/dist/database/sanitizeJoinQuery.js +6 -6
- package/dist/database/sanitizeJoinQuery.js.map +1 -1
- package/dist/database/types.d.ts +14 -0
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js.map +1 -1
- package/dist/errors/ValidationError.d.ts +1 -1
- package/dist/errors/ValidationError.d.ts.map +1 -1
- package/dist/errors/ValidationError.js +1 -1
- package/dist/errors/ValidationError.js.map +1 -1
- package/dist/exports/shared.d.ts +3 -1
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +3 -1
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/config/client.d.ts +16 -1
- package/dist/fields/config/client.d.ts.map +1 -1
- package/dist/fields/config/client.js +229 -1
- package/dist/fields/config/client.js.map +1 -1
- package/dist/fields/config/sanitize.d.ts +2 -2
- package/dist/fields/config/sanitize.d.ts.map +1 -1
- package/dist/fields/config/sanitize.js +7 -21
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/config/sanitizeJoinField.d.ts +2 -2
- package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
- package/dist/fields/config/sanitizeJoinField.js +2 -2
- package/dist/fields/config/sanitizeJoinField.js.map +1 -1
- package/dist/fields/config/types.d.ts +28 -171
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/getFieldPaths.d.ts +25 -8
- package/dist/fields/getFieldPaths.d.ts.map +1 -1
- package/dist/fields/getFieldPaths.js +9 -37
- package/dist/fields/getFieldPaths.js.map +1 -1
- package/dist/fields/hooks/afterChange/promise.d.ts +2 -1
- package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/promise.js +66 -62
- package/dist/fields/hooks/afterChange/promise.js.map +1 -1
- package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterChange/traverseFields.js +2 -1
- package/dist/fields/hooks/afterChange/traverseFields.js.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts +2 -1
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.js +107 -103
- package/dist/fields/hooks/afterRead/promise.js.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/traverseFields.js +2 -1
- package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/index.js.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.d.ts +8 -5
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +99 -110
- package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -4
- package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js +2 -1
- package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/promise.js +47 -43
- package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeDuplicate/traverseFields.js +2 -1
- package/dist/fields/hooks/beforeDuplicate/traverseFields.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts +2 -1
- package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/promise.js +105 -101
- package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.js +2 -1
- package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
- package/dist/globals/config/client.d.ts +18 -25
- package/dist/globals/config/client.d.ts.map +1 -1
- package/dist/globals/config/client.js +53 -1
- package/dist/globals/config/client.js.map +1 -1
- package/dist/globals/config/sanitize.d.ts.map +1 -1
- package/dist/globals/config/sanitize.js +3 -1
- package/dist/globals/config/sanitize.js.map +1 -1
- package/dist/globals/operations/countGlobalVersions.d.ts +13 -0
- package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -0
- package/dist/globals/operations/countGlobalVersions.js +49 -0
- package/dist/globals/operations/countGlobalVersions.js.map +1 -0
- package/dist/globals/operations/local/countGlobalVersions.d.ts +20 -0
- package/dist/globals/operations/local/countGlobalVersions.d.ts.map +1 -0
- package/dist/globals/operations/local/countGlobalVersions.js +20 -0
- package/dist/globals/operations/local/countGlobalVersions.js.map +1 -0
- package/dist/globals/operations/local/index.d.ts +2 -0
- package/dist/globals/operations/local/index.d.ts.map +1 -1
- package/dist/globals/operations/local/index.js +2 -0
- package/dist/globals/operations/local/index.js.map +1 -1
- package/dist/index.d.ts +28 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/queues/config/jobsCollection.d.ts.map +1 -1
- package/dist/queues/config/jobsCollection.js +2 -11
- package/dist/queues/config/jobsCollection.js.map +1 -1
- package/dist/queues/config/types/workflowTypes.d.ts +2 -1
- package/dist/queues/config/types/workflowTypes.d.ts.map +1 -1
- package/dist/queues/config/types/workflowTypes.js.map +1 -1
- package/dist/queues/localAPI.d.ts +2 -0
- package/dist/queues/localAPI.d.ts.map +1 -1
- package/dist/queues/localAPI.js +13 -0
- package/dist/queues/localAPI.js.map +1 -1
- package/dist/utilities/configToJSONSchema.js +232 -232
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/createLocalReq.d.ts +1 -1
- package/dist/utilities/createLocalReq.d.ts.map +1 -1
- package/dist/utilities/createLocalReq.js +4 -4
- package/dist/utilities/createLocalReq.js.map +1 -1
- package/dist/utilities/deepCopyObject.d.ts +1 -0
- package/dist/utilities/deepCopyObject.d.ts.map +1 -1
- package/dist/utilities/deepCopyObject.js +23 -0
- package/dist/utilities/deepCopyObject.js.map +1 -1
- package/dist/utilities/fieldSchemaToJSON.js +17 -17
- package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
- package/dist/utilities/formatErrors.d.ts +6 -0
- package/dist/utilities/formatErrors.d.ts.map +1 -0
- package/dist/utilities/formatErrors.js +56 -0
- package/dist/utilities/formatErrors.js.map +1 -0
- package/dist/utilities/telemetry/conf/index.js +2 -2
- package/dist/utilities/telemetry/conf/index.js.map +1 -1
- package/dist/versions/saveVersion.d.ts.map +1 -1
- package/dist/versions/saveVersion.js +1 -7
- package/dist/versions/saveVersion.js.map +1 -1
- package/dist/versions/types.d.ts +1 -1
- package/dist/versions/types.d.ts.map +1 -1
- package/dist/versions/types.js.map +1 -1
- package/license.md +22 -0
- package/package.json +3 -3
- package/dist/utilities/mergeListSearchAndWhere.d.ts +0 -12
- package/dist/utilities/mergeListSearchAndWhere.d.ts.map +0 -1
- package/dist/utilities/mergeListSearchAndWhere.js +0 -57
- package/dist/utilities/mergeListSearchAndWhere.js.map +0 -1
|
@@ -82,13 +82,13 @@ function generateCollectionJoinsSchemas(collections) {
|
|
|
82
82
|
};
|
|
83
83
|
for(const collectionSlug in joins){
|
|
84
84
|
for (const join of joins[collectionSlug]){
|
|
85
|
-
schema.properties[join.
|
|
85
|
+
schema.properties[join.joinPath] = {
|
|
86
86
|
type: 'string',
|
|
87
87
|
enum: [
|
|
88
88
|
collectionSlug
|
|
89
89
|
]
|
|
90
90
|
};
|
|
91
|
-
schema.required.push(join.
|
|
91
|
+
schema.required.push(join.joinPath);
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
if (Object.keys(schema.properties).length > 0) {
|
|
@@ -200,50 +200,128 @@ export function fieldsToJSONSchema(/**
|
|
|
200
200
|
}
|
|
201
201
|
let fieldSchema;
|
|
202
202
|
switch(field.type){
|
|
203
|
-
case '
|
|
204
|
-
|
|
203
|
+
case 'array':
|
|
204
|
+
{
|
|
205
205
|
fieldSchema = {
|
|
206
206
|
type: withNullableJSONSchemaType('array', isRequired),
|
|
207
207
|
items: {
|
|
208
|
-
type: '
|
|
208
|
+
type: 'object',
|
|
209
|
+
additionalProperties: false,
|
|
210
|
+
...fieldsToJSONSchema(collectionIDFieldTypes, field.fields, interfaceNameDefinitions, config)
|
|
209
211
|
}
|
|
210
212
|
};
|
|
211
|
-
|
|
213
|
+
if (field.interfaceName) {
|
|
214
|
+
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
215
|
+
fieldSchema = {
|
|
216
|
+
$ref: `#/definitions/${field.interfaceName}`
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
case 'blocks':
|
|
222
|
+
{
|
|
223
|
+
// Check for a case where no blocks are provided.
|
|
224
|
+
// We need to generate an empty array for this case, note that JSON schema 4 doesn't support empty arrays
|
|
225
|
+
// so the best we can get is `unknown[]`
|
|
226
|
+
const hasBlocks = Boolean(field.blocks.length);
|
|
212
227
|
fieldSchema = {
|
|
213
|
-
type: withNullableJSONSchemaType('
|
|
228
|
+
type: withNullableJSONSchemaType('array', isRequired),
|
|
229
|
+
items: hasBlocks ? {
|
|
230
|
+
oneOf: field.blocks.map((block)=>{
|
|
231
|
+
const blockFieldSchemas = fieldsToJSONSchema(collectionIDFieldTypes, block.fields, interfaceNameDefinitions, config);
|
|
232
|
+
const blockSchema = {
|
|
233
|
+
type: 'object',
|
|
234
|
+
additionalProperties: false,
|
|
235
|
+
properties: {
|
|
236
|
+
...blockFieldSchemas.properties,
|
|
237
|
+
blockType: {
|
|
238
|
+
const: block.slug
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
required: [
|
|
242
|
+
'blockType',
|
|
243
|
+
...blockFieldSchemas.required
|
|
244
|
+
]
|
|
245
|
+
};
|
|
246
|
+
if (block.interfaceName) {
|
|
247
|
+
interfaceNameDefinitions.set(block.interfaceName, blockSchema);
|
|
248
|
+
return {
|
|
249
|
+
$ref: `#/definitions/${block.interfaceName}`
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
return blockSchema;
|
|
253
|
+
})
|
|
254
|
+
} : {}
|
|
214
255
|
};
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
case 'checkbox':
|
|
259
|
+
{
|
|
260
|
+
fieldSchema = {
|
|
261
|
+
type: withNullableJSONSchemaType('boolean', isRequired)
|
|
262
|
+
};
|
|
263
|
+
break;
|
|
215
264
|
}
|
|
216
|
-
break;
|
|
217
|
-
case 'textarea':
|
|
218
265
|
case 'code':
|
|
219
|
-
case 'email':
|
|
220
266
|
case 'date':
|
|
267
|
+
case 'email':
|
|
268
|
+
case 'textarea':
|
|
221
269
|
{
|
|
222
270
|
fieldSchema = {
|
|
223
271
|
type: withNullableJSONSchemaType('string', isRequired)
|
|
224
272
|
};
|
|
225
273
|
break;
|
|
226
274
|
}
|
|
227
|
-
case '
|
|
275
|
+
case 'collapsible':
|
|
276
|
+
case 'row':
|
|
228
277
|
{
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
278
|
+
const childSchema = fieldsToJSONSchema(collectionIDFieldTypes, field.fields, interfaceNameDefinitions, config);
|
|
279
|
+
Object.entries(childSchema.properties).forEach(([propName, propSchema])=>{
|
|
280
|
+
fieldSchemas.set(propName, propSchema);
|
|
281
|
+
});
|
|
282
|
+
childSchema.required.forEach((propName)=>{
|
|
283
|
+
requiredFieldNames.add(propName);
|
|
284
|
+
});
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case 'group':
|
|
288
|
+
{
|
|
289
|
+
fieldSchema = {
|
|
290
|
+
type: 'object',
|
|
291
|
+
additionalProperties: false,
|
|
292
|
+
...fieldsToJSONSchema(collectionIDFieldTypes, field.fields, interfaceNameDefinitions, config)
|
|
293
|
+
};
|
|
294
|
+
if (field.interfaceName) {
|
|
295
|
+
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
237
296
|
fieldSchema = {
|
|
238
|
-
|
|
297
|
+
$ref: `#/definitions/${field.interfaceName}`
|
|
239
298
|
};
|
|
240
299
|
}
|
|
241
300
|
break;
|
|
242
301
|
}
|
|
243
|
-
case '
|
|
302
|
+
case 'join':
|
|
244
303
|
{
|
|
245
304
|
fieldSchema = {
|
|
246
|
-
type: withNullableJSONSchemaType('
|
|
305
|
+
type: withNullableJSONSchemaType('object', false),
|
|
306
|
+
additionalProperties: false,
|
|
307
|
+
properties: {
|
|
308
|
+
docs: {
|
|
309
|
+
type: withNullableJSONSchemaType('array', false),
|
|
310
|
+
items: {
|
|
311
|
+
oneOf: [
|
|
312
|
+
{
|
|
313
|
+
type: collectionIDFieldTypes[field.collection]
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
$ref: `#/definitions/${field.collection}`
|
|
317
|
+
}
|
|
318
|
+
]
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
hasNextPage: {
|
|
322
|
+
type: withNullableJSONSchemaType('boolean', false)
|
|
323
|
+
}
|
|
324
|
+
}
|
|
247
325
|
};
|
|
248
326
|
break;
|
|
249
327
|
}
|
|
@@ -261,62 +339,19 @@ export function fieldsToJSONSchema(/**
|
|
|
261
339
|
};
|
|
262
340
|
break;
|
|
263
341
|
}
|
|
264
|
-
case '
|
|
265
|
-
{
|
|
266
|
-
if (!field?.editor) {
|
|
267
|
-
throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
|
|
268
|
-
;
|
|
269
|
-
}
|
|
270
|
-
if (typeof field.editor === 'function') {
|
|
271
|
-
throw new Error('Attempted to access unsanitized rich text editor.');
|
|
272
|
-
}
|
|
273
|
-
if (field.editor.outputSchema) {
|
|
274
|
-
fieldSchema = field.editor.outputSchema({
|
|
275
|
-
collectionIDFieldTypes,
|
|
276
|
-
config,
|
|
277
|
-
field,
|
|
278
|
-
interfaceNameDefinitions,
|
|
279
|
-
isRequired
|
|
280
|
-
});
|
|
281
|
-
} else {
|
|
282
|
-
// Maintain backwards compatibility with existing rich text editors
|
|
283
|
-
fieldSchema = {
|
|
284
|
-
type: withNullableJSONSchemaType('array', isRequired),
|
|
285
|
-
items: {
|
|
286
|
-
type: 'object'
|
|
287
|
-
}
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
break;
|
|
291
|
-
}
|
|
292
|
-
case 'radio':
|
|
293
|
-
{
|
|
294
|
-
fieldSchema = {
|
|
295
|
-
type: withNullableJSONSchemaType('string', isRequired),
|
|
296
|
-
enum: buildOptionEnums(field.options)
|
|
297
|
-
};
|
|
298
|
-
break;
|
|
299
|
-
}
|
|
300
|
-
case 'select':
|
|
342
|
+
case 'number':
|
|
301
343
|
{
|
|
302
|
-
|
|
303
|
-
if (field.hasMany) {
|
|
344
|
+
if (field.hasMany === true) {
|
|
304
345
|
fieldSchema = {
|
|
305
346
|
type: withNullableJSONSchemaType('array', isRequired),
|
|
306
347
|
items: {
|
|
307
|
-
type: '
|
|
348
|
+
type: 'number'
|
|
308
349
|
}
|
|
309
350
|
};
|
|
310
|
-
if (optionEnums?.length) {
|
|
311
|
-
fieldSchema.items.enum = optionEnums;
|
|
312
|
-
}
|
|
313
351
|
} else {
|
|
314
352
|
fieldSchema = {
|
|
315
|
-
type: withNullableJSONSchemaType('
|
|
353
|
+
type: withNullableJSONSchemaType('number', isRequired)
|
|
316
354
|
};
|
|
317
|
-
if (optionEnums?.length) {
|
|
318
|
-
fieldSchema.enum = optionEnums;
|
|
319
|
-
}
|
|
320
355
|
}
|
|
321
356
|
break;
|
|
322
357
|
}
|
|
@@ -337,34 +372,16 @@ export function fieldsToJSONSchema(/**
|
|
|
337
372
|
};
|
|
338
373
|
break;
|
|
339
374
|
}
|
|
340
|
-
case '
|
|
375
|
+
case 'radio':
|
|
341
376
|
{
|
|
342
377
|
fieldSchema = {
|
|
343
|
-
type: withNullableJSONSchemaType('
|
|
344
|
-
|
|
345
|
-
properties: {
|
|
346
|
-
docs: {
|
|
347
|
-
type: withNullableJSONSchemaType('array', false),
|
|
348
|
-
items: {
|
|
349
|
-
oneOf: [
|
|
350
|
-
{
|
|
351
|
-
type: collectionIDFieldTypes[field.collection]
|
|
352
|
-
},
|
|
353
|
-
{
|
|
354
|
-
$ref: `#/definitions/${field.collection}`
|
|
355
|
-
}
|
|
356
|
-
]
|
|
357
|
-
}
|
|
358
|
-
},
|
|
359
|
-
hasNextPage: {
|
|
360
|
-
type: withNullableJSONSchemaType('boolean', false)
|
|
361
|
-
}
|
|
362
|
-
}
|
|
378
|
+
type: withNullableJSONSchemaType('string', isRequired),
|
|
379
|
+
enum: buildOptionEnums(field.options)
|
|
363
380
|
};
|
|
364
381
|
break;
|
|
365
382
|
}
|
|
366
|
-
case 'upload':
|
|
367
383
|
case 'relationship':
|
|
384
|
+
case 'upload':
|
|
368
385
|
{
|
|
369
386
|
if (Array.isArray(field.relationTo)) {
|
|
370
387
|
if (field.hasMany) {
|
|
@@ -455,73 +472,57 @@ export function fieldsToJSONSchema(/**
|
|
|
455
472
|
}
|
|
456
473
|
break;
|
|
457
474
|
}
|
|
458
|
-
case '
|
|
475
|
+
case 'richText':
|
|
459
476
|
{
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
interfaceNameDefinitions.set(block.interfaceName, blockSchema);
|
|
485
|
-
return {
|
|
486
|
-
$ref: `#/definitions/${block.interfaceName}`
|
|
487
|
-
};
|
|
488
|
-
}
|
|
489
|
-
return blockSchema;
|
|
490
|
-
})
|
|
491
|
-
} : {}
|
|
492
|
-
};
|
|
477
|
+
if (!field?.editor) {
|
|
478
|
+
throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor
|
|
479
|
+
;
|
|
480
|
+
}
|
|
481
|
+
if (typeof field.editor === 'function') {
|
|
482
|
+
throw new Error('Attempted to access unsanitized rich text editor.');
|
|
483
|
+
}
|
|
484
|
+
if (field.editor.outputSchema) {
|
|
485
|
+
fieldSchema = field.editor.outputSchema({
|
|
486
|
+
collectionIDFieldTypes,
|
|
487
|
+
config,
|
|
488
|
+
field,
|
|
489
|
+
interfaceNameDefinitions,
|
|
490
|
+
isRequired
|
|
491
|
+
});
|
|
492
|
+
} else {
|
|
493
|
+
// Maintain backwards compatibility with existing rich text editors
|
|
494
|
+
fieldSchema = {
|
|
495
|
+
type: withNullableJSONSchemaType('array', isRequired),
|
|
496
|
+
items: {
|
|
497
|
+
type: 'object'
|
|
498
|
+
}
|
|
499
|
+
};
|
|
500
|
+
}
|
|
493
501
|
break;
|
|
494
502
|
}
|
|
495
|
-
case '
|
|
503
|
+
case 'select':
|
|
496
504
|
{
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
type: '
|
|
501
|
-
|
|
502
|
-
|
|
505
|
+
const optionEnums = buildOptionEnums(field.options);
|
|
506
|
+
if (field.hasMany) {
|
|
507
|
+
fieldSchema = {
|
|
508
|
+
type: withNullableJSONSchemaType('array', isRequired),
|
|
509
|
+
items: {
|
|
510
|
+
type: 'string'
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
if (optionEnums?.length) {
|
|
514
|
+
fieldSchema.items.enum = optionEnums;
|
|
503
515
|
}
|
|
504
|
-
}
|
|
505
|
-
if (field.interfaceName) {
|
|
506
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
516
|
+
} else {
|
|
507
517
|
fieldSchema = {
|
|
508
|
-
|
|
518
|
+
type: withNullableJSONSchemaType('string', isRequired)
|
|
509
519
|
};
|
|
520
|
+
if (optionEnums?.length) {
|
|
521
|
+
fieldSchema.enum = optionEnums;
|
|
522
|
+
}
|
|
510
523
|
}
|
|
511
524
|
break;
|
|
512
525
|
}
|
|
513
|
-
case 'row':
|
|
514
|
-
case 'collapsible':
|
|
515
|
-
{
|
|
516
|
-
const childSchema = fieldsToJSONSchema(collectionIDFieldTypes, field.fields, interfaceNameDefinitions, config);
|
|
517
|
-
Object.entries(childSchema.properties).forEach(([propName, propSchema])=>{
|
|
518
|
-
fieldSchemas.set(propName, propSchema);
|
|
519
|
-
});
|
|
520
|
-
childSchema.required.forEach((propName)=>{
|
|
521
|
-
requiredFieldNames.add(propName);
|
|
522
|
-
});
|
|
523
|
-
break;
|
|
524
|
-
}
|
|
525
526
|
case 'tabs':
|
|
526
527
|
{
|
|
527
528
|
field.tabs.forEach((tab)=>{
|
|
@@ -549,21 +550,20 @@ export function fieldsToJSONSchema(/**
|
|
|
549
550
|
});
|
|
550
551
|
break;
|
|
551
552
|
}
|
|
552
|
-
case '
|
|
553
|
-
{
|
|
553
|
+
case 'text':
|
|
554
|
+
if (field.hasMany === true) {
|
|
554
555
|
fieldSchema = {
|
|
555
|
-
type: '
|
|
556
|
-
|
|
557
|
-
|
|
556
|
+
type: withNullableJSONSchemaType('array', isRequired),
|
|
557
|
+
items: {
|
|
558
|
+
type: 'string'
|
|
559
|
+
}
|
|
560
|
+
};
|
|
561
|
+
} else {
|
|
562
|
+
fieldSchema = {
|
|
563
|
+
type: withNullableJSONSchemaType('string', isRequired)
|
|
558
564
|
};
|
|
559
|
-
if (field.interfaceName) {
|
|
560
|
-
interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
|
|
561
|
-
fieldSchema = {
|
|
562
|
-
$ref: `#/definitions/${field.interfaceName}`
|
|
563
|
-
};
|
|
564
|
-
}
|
|
565
|
-
break;
|
|
566
565
|
}
|
|
566
|
+
break;
|
|
567
567
|
default:
|
|
568
568
|
{
|
|
569
569
|
break;
|
|
@@ -638,15 +638,6 @@ export function fieldsToSelectJSONSchema({ fields }) {
|
|
|
638
638
|
};
|
|
639
639
|
for (const field of fields){
|
|
640
640
|
switch(field.type){
|
|
641
|
-
case 'row':
|
|
642
|
-
case 'collapsible':
|
|
643
|
-
schema.properties = {
|
|
644
|
-
...schema.properties,
|
|
645
|
-
...fieldsToSelectJSONSchema({
|
|
646
|
-
fields: field.fields
|
|
647
|
-
}).properties
|
|
648
|
-
};
|
|
649
|
-
break;
|
|
650
641
|
case 'array':
|
|
651
642
|
case 'group':
|
|
652
643
|
schema.properties[field.name] = {
|
|
@@ -660,29 +651,6 @@ export function fieldsToSelectJSONSchema({ fields }) {
|
|
|
660
651
|
]
|
|
661
652
|
};
|
|
662
653
|
break;
|
|
663
|
-
case 'tabs':
|
|
664
|
-
for (const tab of field.tabs){
|
|
665
|
-
if (tabHasName(tab)) {
|
|
666
|
-
schema.properties[tab.name] = {
|
|
667
|
-
oneOf: [
|
|
668
|
-
{
|
|
669
|
-
type: 'boolean'
|
|
670
|
-
},
|
|
671
|
-
fieldsToSelectJSONSchema({
|
|
672
|
-
fields: tab.fields
|
|
673
|
-
})
|
|
674
|
-
]
|
|
675
|
-
};
|
|
676
|
-
continue;
|
|
677
|
-
}
|
|
678
|
-
schema.properties = {
|
|
679
|
-
...schema.properties,
|
|
680
|
-
...fieldsToSelectJSONSchema({
|
|
681
|
-
fields: tab.fields
|
|
682
|
-
}).properties
|
|
683
|
-
};
|
|
684
|
-
}
|
|
685
|
-
break;
|
|
686
654
|
case 'blocks':
|
|
687
655
|
{
|
|
688
656
|
const blocksSchema = {
|
|
@@ -712,6 +680,38 @@ export function fieldsToSelectJSONSchema({ fields }) {
|
|
|
712
680
|
};
|
|
713
681
|
break;
|
|
714
682
|
}
|
|
683
|
+
case 'collapsible':
|
|
684
|
+
case 'row':
|
|
685
|
+
schema.properties = {
|
|
686
|
+
...schema.properties,
|
|
687
|
+
...fieldsToSelectJSONSchema({
|
|
688
|
+
fields: field.fields
|
|
689
|
+
}).properties
|
|
690
|
+
};
|
|
691
|
+
break;
|
|
692
|
+
case 'tabs':
|
|
693
|
+
for (const tab of field.tabs){
|
|
694
|
+
if (tabHasName(tab)) {
|
|
695
|
+
schema.properties[tab.name] = {
|
|
696
|
+
oneOf: [
|
|
697
|
+
{
|
|
698
|
+
type: 'boolean'
|
|
699
|
+
},
|
|
700
|
+
fieldsToSelectJSONSchema({
|
|
701
|
+
fields: tab.fields
|
|
702
|
+
})
|
|
703
|
+
]
|
|
704
|
+
};
|
|
705
|
+
continue;
|
|
706
|
+
}
|
|
707
|
+
schema.properties = {
|
|
708
|
+
...schema.properties,
|
|
709
|
+
...fieldsToSelectJSONSchema({
|
|
710
|
+
fields: tab.fields
|
|
711
|
+
}).properties
|
|
712
|
+
};
|
|
713
|
+
}
|
|
714
|
+
break;
|
|
715
715
|
default:
|
|
716
716
|
schema.properties[field.name] = {
|
|
717
717
|
type: 'boolean'
|
|
@@ -728,6 +728,46 @@ const fieldType = {
|
|
|
728
728
|
const generateAuthFieldTypes = ({ type, loginWithUsername })=>{
|
|
729
729
|
if (loginWithUsername) {
|
|
730
730
|
switch(type){
|
|
731
|
+
case 'forgotOrUnlock':
|
|
732
|
+
{
|
|
733
|
+
if (loginWithUsername.allowEmailLogin) {
|
|
734
|
+
// allow email or username for unlock/forgot-password
|
|
735
|
+
return {
|
|
736
|
+
additionalProperties: false,
|
|
737
|
+
oneOf: [
|
|
738
|
+
{
|
|
739
|
+
additionalProperties: false,
|
|
740
|
+
properties: {
|
|
741
|
+
email: fieldType
|
|
742
|
+
},
|
|
743
|
+
required: [
|
|
744
|
+
'email'
|
|
745
|
+
]
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
additionalProperties: false,
|
|
749
|
+
properties: {
|
|
750
|
+
username: fieldType
|
|
751
|
+
},
|
|
752
|
+
required: [
|
|
753
|
+
'username'
|
|
754
|
+
]
|
|
755
|
+
}
|
|
756
|
+
]
|
|
757
|
+
};
|
|
758
|
+
} else {
|
|
759
|
+
// allow only username for unlock/forgot-password
|
|
760
|
+
return {
|
|
761
|
+
additionalProperties: false,
|
|
762
|
+
properties: {
|
|
763
|
+
username: fieldType
|
|
764
|
+
},
|
|
765
|
+
required: [
|
|
766
|
+
'username'
|
|
767
|
+
]
|
|
768
|
+
};
|
|
769
|
+
}
|
|
770
|
+
}
|
|
731
771
|
case 'login':
|
|
732
772
|
{
|
|
733
773
|
if (loginWithUsername.allowEmailLogin) {
|
|
@@ -798,46 +838,6 @@ const generateAuthFieldTypes = ({ type, loginWithUsername })=>{
|
|
|
798
838
|
required: requiredFields
|
|
799
839
|
};
|
|
800
840
|
}
|
|
801
|
-
case 'forgotOrUnlock':
|
|
802
|
-
{
|
|
803
|
-
if (loginWithUsername.allowEmailLogin) {
|
|
804
|
-
// allow email or username for unlock/forgot-password
|
|
805
|
-
return {
|
|
806
|
-
additionalProperties: false,
|
|
807
|
-
oneOf: [
|
|
808
|
-
{
|
|
809
|
-
additionalProperties: false,
|
|
810
|
-
properties: {
|
|
811
|
-
email: fieldType
|
|
812
|
-
},
|
|
813
|
-
required: [
|
|
814
|
-
'email'
|
|
815
|
-
]
|
|
816
|
-
},
|
|
817
|
-
{
|
|
818
|
-
additionalProperties: false,
|
|
819
|
-
properties: {
|
|
820
|
-
username: fieldType
|
|
821
|
-
},
|
|
822
|
-
required: [
|
|
823
|
-
'username'
|
|
824
|
-
]
|
|
825
|
-
}
|
|
826
|
-
]
|
|
827
|
-
};
|
|
828
|
-
} else {
|
|
829
|
-
// allow only username for unlock/forgot-password
|
|
830
|
-
return {
|
|
831
|
-
additionalProperties: false,
|
|
832
|
-
properties: {
|
|
833
|
-
username: fieldType
|
|
834
|
-
},
|
|
835
|
-
required: [
|
|
836
|
-
'username'
|
|
837
|
-
]
|
|
838
|
-
};
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
841
|
}
|
|
842
842
|
}
|
|
843
843
|
// default email (and password for login/register)
|