payload 3.0.0-beta.126 → 3.0.0-beta.128
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/index.js +1 -1
- package/dist/bin/index.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/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +0 -9
- package/dist/collections/operations/create.js.map +1 -1
- 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/find.d.ts.map +1 -1
- package/dist/collections/operations/local/find.js +2 -2
- package/dist/collections/operations/local/find.js.map +1 -1
- 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/migrations/migrateRefresh.d.ts.map +1 -1
- package/dist/database/migrations/migrateRefresh.js +47 -47
- package/dist/database/migrations/migrateRefresh.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 +10 -10
- 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
|
@@ -2,13 +2,17 @@ import { fieldAffectsData, tabHasName } from '../../config/types.js';
|
|
|
2
2
|
import { getFieldPaths } from '../../getFieldPaths.js';
|
|
3
3
|
import { runBeforeDuplicateHooks } from './runHook.js';
|
|
4
4
|
import { traverseFields } from './traverseFields.js';
|
|
5
|
-
export const promise = async ({ id, collection, context, doc, field, overrideAccess, parentPath, parentSchemaPath, req, siblingDoc })=>{
|
|
5
|
+
export const promise = async ({ id, collection, context, doc, field, fieldIndex, overrideAccess, parentPath, parentSchemaPath, req, siblingDoc })=>{
|
|
6
6
|
const { localization } = req.payload.config;
|
|
7
|
-
const { path:
|
|
7
|
+
const { path: _fieldPath, schemaPath: _fieldSchemaPath } = getFieldPaths({
|
|
8
8
|
field,
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
index: fieldIndex,
|
|
10
|
+
parentIndexPath: '',
|
|
11
|
+
parentPath: parentPath.join('.'),
|
|
12
|
+
parentSchemaPath: parentSchemaPath.join('.')
|
|
11
13
|
});
|
|
14
|
+
const fieldPath = _fieldPath ? _fieldPath.split('.') : [];
|
|
15
|
+
const fieldSchemaPath = _fieldSchemaPath ? _fieldSchemaPath.split('.') : [];
|
|
12
16
|
// Handle unnamed tabs
|
|
13
17
|
if (field.type === 'tab' && !tabHasName(field)) {
|
|
14
18
|
await traverseFields({
|
|
@@ -92,23 +96,6 @@ export const promise = async ({ id, collection, context, doc, field, overrideAcc
|
|
|
92
96
|
localization.localeCodes.forEach((locale)=>{
|
|
93
97
|
if (fieldData[locale]) {
|
|
94
98
|
switch(field.type){
|
|
95
|
-
case 'tab':
|
|
96
|
-
case 'group':
|
|
97
|
-
{
|
|
98
|
-
promises.push(traverseFields({
|
|
99
|
-
id,
|
|
100
|
-
collection,
|
|
101
|
-
context,
|
|
102
|
-
doc,
|
|
103
|
-
fields: field.fields,
|
|
104
|
-
overrideAccess,
|
|
105
|
-
path: fieldSchemaPath,
|
|
106
|
-
req,
|
|
107
|
-
schemaPath: fieldSchemaPath,
|
|
108
|
-
siblingDoc: fieldData[locale]
|
|
109
|
-
}));
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
99
|
case 'array':
|
|
113
100
|
{
|
|
114
101
|
const rows = fieldData[locale];
|
|
@@ -161,6 +148,23 @@ export const promise = async ({ id, collection, context, doc, field, overrideAcc
|
|
|
161
148
|
}
|
|
162
149
|
break;
|
|
163
150
|
}
|
|
151
|
+
case 'group':
|
|
152
|
+
case 'tab':
|
|
153
|
+
{
|
|
154
|
+
promises.push(traverseFields({
|
|
155
|
+
id,
|
|
156
|
+
collection,
|
|
157
|
+
context,
|
|
158
|
+
doc,
|
|
159
|
+
fields: field.fields,
|
|
160
|
+
overrideAccess,
|
|
161
|
+
path: fieldSchemaPath,
|
|
162
|
+
req,
|
|
163
|
+
schemaPath: fieldSchemaPath,
|
|
164
|
+
siblingDoc: fieldData[locale]
|
|
165
|
+
}));
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
164
168
|
}
|
|
165
169
|
}
|
|
166
170
|
});
|
|
@@ -170,27 +174,6 @@ export const promise = async ({ id, collection, context, doc, field, overrideAcc
|
|
|
170
174
|
// we need to further traverse its children
|
|
171
175
|
// so the child fields can run beforeDuplicate hooks
|
|
172
176
|
switch(field.type){
|
|
173
|
-
case 'tab':
|
|
174
|
-
case 'group':
|
|
175
|
-
{
|
|
176
|
-
if (typeof siblingDoc[field.name] !== 'object') {
|
|
177
|
-
siblingDoc[field.name] = {};
|
|
178
|
-
}
|
|
179
|
-
const groupDoc = siblingDoc[field.name];
|
|
180
|
-
await traverseFields({
|
|
181
|
-
id,
|
|
182
|
-
collection,
|
|
183
|
-
context,
|
|
184
|
-
doc,
|
|
185
|
-
fields: field.fields,
|
|
186
|
-
overrideAccess,
|
|
187
|
-
path: fieldPath,
|
|
188
|
-
req,
|
|
189
|
-
schemaPath: fieldSchemaPath,
|
|
190
|
-
siblingDoc: groupDoc
|
|
191
|
-
});
|
|
192
|
-
break;
|
|
193
|
-
}
|
|
194
177
|
case 'array':
|
|
195
178
|
{
|
|
196
179
|
const rows = siblingDoc[field.name];
|
|
@@ -248,13 +231,34 @@ export const promise = async ({ id, collection, context, doc, field, overrideAcc
|
|
|
248
231
|
}
|
|
249
232
|
break;
|
|
250
233
|
}
|
|
234
|
+
case 'group':
|
|
235
|
+
case 'tab':
|
|
236
|
+
{
|
|
237
|
+
if (typeof siblingDoc[field.name] !== 'object') {
|
|
238
|
+
siblingDoc[field.name] = {};
|
|
239
|
+
}
|
|
240
|
+
const groupDoc = siblingDoc[field.name];
|
|
241
|
+
await traverseFields({
|
|
242
|
+
id,
|
|
243
|
+
collection,
|
|
244
|
+
context,
|
|
245
|
+
doc,
|
|
246
|
+
fields: field.fields,
|
|
247
|
+
overrideAccess,
|
|
248
|
+
path: fieldPath,
|
|
249
|
+
req,
|
|
250
|
+
schemaPath: fieldSchemaPath,
|
|
251
|
+
siblingDoc: groupDoc
|
|
252
|
+
});
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
251
255
|
}
|
|
252
256
|
}
|
|
253
257
|
} else {
|
|
254
258
|
// Finally, we traverse fields which do not affect data here
|
|
255
259
|
switch(field.type){
|
|
256
|
-
case 'row':
|
|
257
260
|
case 'collapsible':
|
|
261
|
+
case 'row':
|
|
258
262
|
{
|
|
259
263
|
await traverseFields({
|
|
260
264
|
id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/promise.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { runBeforeDuplicateHooks } from './runHook.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n field: Field | TabAsField\n id?: number | string\n overrideAccess: boolean\n parentPath: (number | string)[]\n parentSchemaPath: string[]\n req: PayloadRequest\n siblingDoc: JsonObject\n}\n\nexport const promise = async <T>({\n id,\n collection,\n context,\n doc,\n field,\n overrideAccess,\n parentPath,\n parentSchemaPath,\n req,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const { localization } = req.payload.config\n\n const { path: fieldPath, schemaPath: fieldSchemaPath } = getFieldPaths({\n field,\n parentPath,\n parentSchemaPath,\n })\n\n // Handle unnamed tabs\n if (field.type === 'tab' && !tabHasName(field)) {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n return\n }\n\n if (fieldAffectsData(field)) {\n let fieldData = siblingDoc?.[field.name]\n const fieldIsLocalized = field.localized && localization\n\n // Run field beforeDuplicate hooks\n if (Array.isArray(field.hooks?.beforeDuplicate)) {\n if (fieldIsLocalized) {\n const localeData = await localization.localeCodes.reduce(\n async (localizedValuesPromise: Promise<JsonObject>, locale) => {\n const localizedValues = await localizedValuesPromise\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data: doc,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name]?.[locale],\n req,\n schemaPath: parentSchemaPath,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n value: siblingDoc[field.name]?.[locale],\n }\n\n const hookResult = await runBeforeDuplicateHooks(beforeDuplicateArgs)\n\n if (typeof hookResult !== 'undefined') {\n return {\n ...localizedValues,\n [locale]: hookResult,\n }\n }\n\n return localizedValuesPromise\n },\n Promise.resolve({}),\n )\n\n siblingDoc[field.name] = localeData\n } else {\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data: doc,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n value: siblingDoc[field.name],\n }\n\n const hookResult = await runBeforeDuplicateHooks(beforeDuplicateArgs)\n if (typeof hookResult !== 'undefined') {\n siblingDoc[field.name] = hookResult\n }\n }\n }\n\n // First, for any localized fields, we will loop over locales\n // and if locale data is present, traverse the sub fields.\n // There are only a few different fields where this is possible.\n if (fieldIsLocalized) {\n if (typeof fieldData !== 'object' || fieldData === null) {\n siblingDoc[field.name] = {}\n fieldData = siblingDoc[field.name]\n }\n\n const promises = []\n\n localization.localeCodes.forEach((locale) => {\n if (fieldData[locale]) {\n switch (field.type) {\n case 'tab':\n case 'group': {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldSchemaPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: fieldData[locale],\n }),\n )\n\n break\n }\n\n case 'array': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n\n case 'blocks': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const blockTypeToMatch = row.blockType\n\n const block = field.blocks.find(\n (blockType) => blockType.slug === blockTypeToMatch,\n )\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n }\n }\n })\n\n await Promise.all(promises)\n } else {\n // If the field is not localized, but it affects data,\n // we need to further traverse its children\n // so the child fields can run beforeDuplicate hooks\n switch (field.type) {\n case 'tab':\n case 'group': {\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n const groupDoc = siblingDoc[field.name] as Record<string, unknown>\n\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: groupDoc as JsonObject,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n await Promise.all(promises)\n }\n break\n }\n\n case 'blocks': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const blockTypeToMatch = row.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n ;(row as JsonObject).blockType = blockTypeToMatch\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n }\n })\n await Promise.all(promises)\n }\n\n break\n }\n }\n }\n } else {\n // Finally, we traverse fields which do not affect data here\n switch (field.type) {\n case 'row':\n case 'collapsible': {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n }\n}\n"],"names":["fieldAffectsData","tabHasName","getFieldPaths","runBeforeDuplicateHooks","traverseFields","promise","id","collection","context","doc","field","overrideAccess","parentPath","parentSchemaPath","req","siblingDoc","localization","payload","config","path","fieldPath","schemaPath","fieldSchemaPath","type","fields","fieldData","name","fieldIsLocalized","localized","Array","isArray","hooks","beforeDuplicate","localeData","localeCodes","reduce","localizedValuesPromise","locale","localizedValues","beforeDuplicateArgs","data","global","undefined","previousSiblingDoc","previousValue","siblingData","siblingDocWithLocales","value","hookResult","Promise","resolve","promises","forEach","push","rows","row","i","blockTypeToMatch","blockType","block","blocks","find","slug","all","groupDoc","tabs","map","tab"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/promise.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { runBeforeDuplicateHooks } from './runHook.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n field: Field | TabAsField\n fieldIndex: number\n id?: number | string\n overrideAccess: boolean\n parentPath: (number | string)[]\n parentSchemaPath: string[]\n req: PayloadRequest\n siblingDoc: JsonObject\n}\n\nexport const promise = async <T>({\n id,\n collection,\n context,\n doc,\n field,\n fieldIndex,\n overrideAccess,\n parentPath,\n parentSchemaPath,\n req,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const { localization } = req.payload.config\n\n const { path: _fieldPath, schemaPath: _fieldSchemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath: '', // Doesn't matter, as unnamed fields do not affect data, and hooks are only run on fields that affect data\n parentPath: parentPath.join('.'),\n parentSchemaPath: parentSchemaPath.join('.'),\n })\n const fieldPath = _fieldPath ? _fieldPath.split('.') : []\n const fieldSchemaPath = _fieldSchemaPath ? _fieldSchemaPath.split('.') : []\n\n // Handle unnamed tabs\n if (field.type === 'tab' && !tabHasName(field)) {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n return\n }\n\n if (fieldAffectsData(field)) {\n let fieldData = siblingDoc?.[field.name]\n const fieldIsLocalized = field.localized && localization\n\n // Run field beforeDuplicate hooks\n if (Array.isArray(field.hooks?.beforeDuplicate)) {\n if (fieldIsLocalized) {\n const localeData = await localization.localeCodes.reduce(\n async (localizedValuesPromise: Promise<JsonObject>, locale) => {\n const localizedValues = await localizedValuesPromise\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data: doc,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name]?.[locale],\n req,\n schemaPath: parentSchemaPath,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n value: siblingDoc[field.name]?.[locale],\n }\n\n const hookResult = await runBeforeDuplicateHooks(beforeDuplicateArgs)\n\n if (typeof hookResult !== 'undefined') {\n return {\n ...localizedValues,\n [locale]: hookResult,\n }\n }\n\n return localizedValuesPromise\n },\n Promise.resolve({}),\n )\n\n siblingDoc[field.name] = localeData\n } else {\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data: doc,\n field,\n global: undefined,\n path: fieldPath,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n schemaPath: parentSchemaPath,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n value: siblingDoc[field.name],\n }\n\n const hookResult = await runBeforeDuplicateHooks(beforeDuplicateArgs)\n if (typeof hookResult !== 'undefined') {\n siblingDoc[field.name] = hookResult\n }\n }\n }\n\n // First, for any localized fields, we will loop over locales\n // and if locale data is present, traverse the sub fields.\n // There are only a few different fields where this is possible.\n if (fieldIsLocalized) {\n if (typeof fieldData !== 'object' || fieldData === null) {\n siblingDoc[field.name] = {}\n fieldData = siblingDoc[field.name]\n }\n\n const promises = []\n\n localization.localeCodes.forEach((locale) => {\n if (fieldData[locale]) {\n switch (field.type) {\n case 'array': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n case 'blocks': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const blockTypeToMatch = row.blockType\n\n const block = field.blocks.find(\n (blockType) => blockType.slug === blockTypeToMatch,\n )\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n\n case 'group':\n\n case 'tab': {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldSchemaPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: fieldData[locale],\n }),\n )\n\n break\n }\n }\n }\n })\n\n await Promise.all(promises)\n } else {\n // If the field is not localized, but it affects data,\n // we need to further traverse its children\n // so the child fields can run beforeDuplicate hooks\n switch (field.type) {\n case 'array': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n })\n await Promise.all(promises)\n }\n break\n }\n case 'blocks': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const blockTypeToMatch = row.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n ;(row as JsonObject).blockType = blockTypeToMatch\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n path: [...fieldPath, i],\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: row,\n }),\n )\n }\n })\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'group':\n\n case 'tab': {\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n const groupDoc = siblingDoc[field.name] as Record<string, unknown>\n\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc: groupDoc as JsonObject,\n })\n\n break\n }\n }\n }\n } else {\n // Finally, we traverse fields which do not affect data here\n switch (field.type) {\n case 'collapsible':\n case 'row': {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n overrideAccess,\n path: fieldPath,\n req,\n schemaPath: fieldSchemaPath,\n siblingDoc,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n }\n}\n"],"names":["fieldAffectsData","tabHasName","getFieldPaths","runBeforeDuplicateHooks","traverseFields","promise","id","collection","context","doc","field","fieldIndex","overrideAccess","parentPath","parentSchemaPath","req","siblingDoc","localization","payload","config","path","_fieldPath","schemaPath","_fieldSchemaPath","index","parentIndexPath","join","fieldPath","split","fieldSchemaPath","type","fields","fieldData","name","fieldIsLocalized","localized","Array","isArray","hooks","beforeDuplicate","localeData","localeCodes","reduce","localizedValuesPromise","locale","localizedValues","beforeDuplicateArgs","data","global","undefined","previousSiblingDoc","previousValue","siblingData","siblingDocWithLocales","value","hookResult","Promise","resolve","promises","forEach","rows","row","i","push","blockTypeToMatch","blockType","block","blocks","find","slug","all","groupDoc","tabs","map","tab"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeDuplicate/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAI9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,gGAWnC,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeDuplicate/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAI9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,CAAC,gGAWnC,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAoBxB,CAAA"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { promise } from './promise.js';
|
|
2
2
|
export const traverseFields = async ({ id, collection, context, doc, fields, overrideAccess, path, req, schemaPath, siblingDoc })=>{
|
|
3
3
|
const promises = [];
|
|
4
|
-
fields.forEach((field)=>{
|
|
4
|
+
fields.forEach((field, fieldIndex)=>{
|
|
5
5
|
promises.push(promise({
|
|
6
6
|
id,
|
|
7
7
|
collection,
|
|
8
8
|
context,
|
|
9
9
|
doc,
|
|
10
10
|
field,
|
|
11
|
+
fieldIndex,
|
|
11
12
|
overrideAccess,
|
|
12
13
|
parentPath: path,
|
|
13
14
|
parentSchemaPath: schemaPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args<T> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n fields: (Field | TabAsField)[]\n id?: number | string\n overrideAccess: boolean\n path: (number | string)[]\n req: PayloadRequest\n schemaPath: string[]\n siblingDoc: JsonObject\n}\n\nexport const traverseFields = async <T>({\n id,\n collection,\n context,\n doc,\n fields,\n overrideAccess,\n path,\n req,\n schemaPath,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const promises = []\n fields.forEach((field) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n doc,\n field,\n overrideAccess,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n }),\n )\n })\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","doc","fields","overrideAccess","path","req","schemaPath","siblingDoc","promises","forEach","field","push","parentPath","parentSchemaPath","Promise","all"],"mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAetC,OAAO,MAAMC,iBAAiB,OAAU,EACtCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,GAAG,EACHC,MAAM,EACNC,cAAc,EACdC,IAAI,EACJC,GAAG,EACHC,UAAU,EACVC,UAAU,EACF;IACR,MAAMC,WAAW,EAAE;IACnBN,OAAOO,OAAO,CAAC,CAACC;
|
|
1
|
+
{"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args<T> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n fields: (Field | TabAsField)[]\n id?: number | string\n overrideAccess: boolean\n path: (number | string)[]\n req: PayloadRequest\n schemaPath: string[]\n siblingDoc: JsonObject\n}\n\nexport const traverseFields = async <T>({\n id,\n collection,\n context,\n doc,\n fields,\n overrideAccess,\n path,\n req,\n schemaPath,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const promises = []\n fields.forEach((field, fieldIndex) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n doc,\n field,\n fieldIndex,\n overrideAccess,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n }),\n )\n })\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","doc","fields","overrideAccess","path","req","schemaPath","siblingDoc","promises","forEach","field","fieldIndex","push","parentPath","parentSchemaPath","Promise","all"],"mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAetC,OAAO,MAAMC,iBAAiB,OAAU,EACtCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,GAAG,EACHC,MAAM,EACNC,cAAc,EACdC,IAAI,EACJC,GAAG,EACHC,UAAU,EACVC,UAAU,EACF;IACR,MAAMC,WAAW,EAAE;IACnBN,OAAOO,OAAO,CAAC,CAACC,OAAOC;QACrBH,SAASI,IAAI,CACXhB,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAS;YACAC;YACAR;YACAU,YAAYT;YACZU,kBAAkBR;YAClBD;YACAE;QACF;IAEJ;IACA,MAAMQ,QAAQC,GAAG,CAACR;AACpB,EAAC"}
|
|
@@ -12,6 +12,7 @@ type Args<T> = {
|
|
|
12
12
|
*/
|
|
13
13
|
doc: T;
|
|
14
14
|
field: Field | TabAsField;
|
|
15
|
+
fieldIndex: number;
|
|
15
16
|
global: null | SanitizedGlobalConfig;
|
|
16
17
|
id?: number | string;
|
|
17
18
|
operation: 'create' | 'update';
|
|
@@ -25,6 +26,6 @@ type Args<T> = {
|
|
|
25
26
|
*/
|
|
26
27
|
siblingDoc: JsonObject;
|
|
27
28
|
};
|
|
28
|
-
export declare const promise: <T>({ id, collection, context, data, doc, field, global, operation, overrideAccess, parentPath, parentSchemaPath, req, siblingData, siblingDoc, }: Args<T>) => Promise<void>;
|
|
29
|
+
export declare const promise: <T>({ id, collection, context, data, doc, field, fieldIndex, global, operation, overrideAccess, parentPath, parentSchemaPath, req, siblingData, siblingDoc, }: Args<T>) => Promise<void>;
|
|
29
30
|
export {};
|
|
30
31
|
//# sourceMappingURL=promise.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAU9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP;;OAEG;IACH,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,IAAI,GAAG,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AASD,eAAO,MAAM,OAAO,GAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAU9D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP;;OAEG;IACH,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,GAAG,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AASD,eAAO,MAAM,OAAO,GAAU,CAAC,6JAgB5B,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAsdxB,CAAA"}
|
|
@@ -11,12 +11,16 @@ import { traverseFields } from './traverseFields.js';
|
|
|
11
11
|
// - Execute field access control
|
|
12
12
|
// - Merge original document data into incoming data
|
|
13
13
|
// - Compute default values for undefined fields
|
|
14
|
-
export const promise = async ({ id, collection, context, data, doc, field, global, operation, overrideAccess, parentPath, parentSchemaPath, req, siblingData, siblingDoc })=>{
|
|
15
|
-
const { path:
|
|
14
|
+
export const promise = async ({ id, collection, context, data, doc, field, fieldIndex, global, operation, overrideAccess, parentPath, parentSchemaPath, req, siblingData, siblingDoc })=>{
|
|
15
|
+
const { path: _fieldPath, schemaPath: _fieldSchemaPath } = getFieldPaths({
|
|
16
16
|
field,
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
index: fieldIndex,
|
|
18
|
+
parentIndexPath: '',
|
|
19
|
+
parentPath: parentPath.join('.'),
|
|
20
|
+
parentSchemaPath: parentSchemaPath.join('.')
|
|
19
21
|
});
|
|
22
|
+
const fieldPath = _fieldPath ? _fieldPath.split('.') : [];
|
|
23
|
+
const fieldSchemaPath = _fieldSchemaPath ? _fieldSchemaPath.split('.') : [];
|
|
20
24
|
if (fieldAffectsData(field)) {
|
|
21
25
|
if (field.name === 'id') {
|
|
22
26
|
if (field.type === 'number' && typeof siblingData[field.name] === 'string') {
|
|
@@ -29,6 +33,28 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
|
|
|
29
33
|
}
|
|
30
34
|
// Sanitize incoming data
|
|
31
35
|
switch(field.type){
|
|
36
|
+
case 'array':
|
|
37
|
+
case 'blocks':
|
|
38
|
+
{
|
|
39
|
+
// Handle cases of arrays being intentionally set to 0
|
|
40
|
+
if (siblingData[field.name] === '0' || siblingData[field.name] === 0) {
|
|
41
|
+
siblingData[field.name] = [];
|
|
42
|
+
}
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case 'checkbox':
|
|
46
|
+
{
|
|
47
|
+
if (siblingData[field.name] === 'true') {
|
|
48
|
+
siblingData[field.name] = true;
|
|
49
|
+
}
|
|
50
|
+
if (siblingData[field.name] === 'false') {
|
|
51
|
+
siblingData[field.name] = false;
|
|
52
|
+
}
|
|
53
|
+
if (siblingData[field.name] === '') {
|
|
54
|
+
siblingData[field.name] = false;
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
32
58
|
case 'number':
|
|
33
59
|
{
|
|
34
60
|
if (typeof siblingData[field.name] === 'string') {
|
|
@@ -52,32 +78,6 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
|
|
|
52
78
|
}
|
|
53
79
|
break;
|
|
54
80
|
}
|
|
55
|
-
case 'checkbox':
|
|
56
|
-
{
|
|
57
|
-
if (siblingData[field.name] === 'true') {
|
|
58
|
-
siblingData[field.name] = true;
|
|
59
|
-
}
|
|
60
|
-
if (siblingData[field.name] === 'false') {
|
|
61
|
-
siblingData[field.name] = false;
|
|
62
|
-
}
|
|
63
|
-
if (siblingData[field.name] === '') {
|
|
64
|
-
siblingData[field.name] = false;
|
|
65
|
-
}
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
case 'richText':
|
|
69
|
-
{
|
|
70
|
-
if (typeof siblingData[field.name] === 'string') {
|
|
71
|
-
try {
|
|
72
|
-
const richTextJSON = JSON.parse(siblingData[field.name]);
|
|
73
|
-
siblingData[field.name] = richTextJSON;
|
|
74
|
-
} catch {
|
|
75
|
-
// Disregard this data as it is not valid.
|
|
76
|
-
// Will be reported to user by field validation
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
81
|
case 'relationship':
|
|
82
82
|
case 'upload':
|
|
83
83
|
{
|
|
@@ -140,12 +140,16 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
|
|
|
140
140
|
}
|
|
141
141
|
break;
|
|
142
142
|
}
|
|
143
|
-
case '
|
|
144
|
-
case 'blocks':
|
|
143
|
+
case 'richText':
|
|
145
144
|
{
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
145
|
+
if (typeof siblingData[field.name] === 'string') {
|
|
146
|
+
try {
|
|
147
|
+
const richTextJSON = JSON.parse(siblingData[field.name]);
|
|
148
|
+
siblingData[field.name] = richTextJSON;
|
|
149
|
+
} catch {
|
|
150
|
+
// Disregard this data as it is not valid.
|
|
151
|
+
// Will be reported to user by field validation
|
|
152
|
+
}
|
|
149
153
|
}
|
|
150
154
|
break;
|
|
151
155
|
}
|
|
@@ -210,34 +214,6 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
|
|
|
210
214
|
}
|
|
211
215
|
// Traverse subfields
|
|
212
216
|
switch(field.type){
|
|
213
|
-
case 'group':
|
|
214
|
-
{
|
|
215
|
-
if (typeof siblingData[field.name] !== 'object') {
|
|
216
|
-
siblingData[field.name] = {};
|
|
217
|
-
}
|
|
218
|
-
if (typeof siblingDoc[field.name] !== 'object') {
|
|
219
|
-
siblingDoc[field.name] = {};
|
|
220
|
-
}
|
|
221
|
-
const groupData = siblingData[field.name];
|
|
222
|
-
const groupDoc = siblingDoc[field.name];
|
|
223
|
-
await traverseFields({
|
|
224
|
-
id,
|
|
225
|
-
collection,
|
|
226
|
-
context,
|
|
227
|
-
data,
|
|
228
|
-
doc,
|
|
229
|
-
fields: field.fields,
|
|
230
|
-
global,
|
|
231
|
-
operation,
|
|
232
|
-
overrideAccess,
|
|
233
|
-
path: fieldPath,
|
|
234
|
-
req,
|
|
235
|
-
schemaPath: fieldSchemaPath,
|
|
236
|
-
siblingData: groupData,
|
|
237
|
-
siblingDoc: groupDoc
|
|
238
|
-
});
|
|
239
|
-
break;
|
|
240
|
-
}
|
|
241
217
|
case 'array':
|
|
242
218
|
{
|
|
243
219
|
const rows = siblingData[field.name];
|
|
@@ -304,8 +280,8 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
|
|
|
304
280
|
}
|
|
305
281
|
break;
|
|
306
282
|
}
|
|
307
|
-
case 'row':
|
|
308
283
|
case 'collapsible':
|
|
284
|
+
case 'row':
|
|
309
285
|
{
|
|
310
286
|
await traverseFields({
|
|
311
287
|
id,
|
|
@@ -325,6 +301,71 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
|
|
|
325
301
|
});
|
|
326
302
|
break;
|
|
327
303
|
}
|
|
304
|
+
case 'group':
|
|
305
|
+
{
|
|
306
|
+
if (typeof siblingData[field.name] !== 'object') {
|
|
307
|
+
siblingData[field.name] = {};
|
|
308
|
+
}
|
|
309
|
+
if (typeof siblingDoc[field.name] !== 'object') {
|
|
310
|
+
siblingDoc[field.name] = {};
|
|
311
|
+
}
|
|
312
|
+
const groupData = siblingData[field.name];
|
|
313
|
+
const groupDoc = siblingDoc[field.name];
|
|
314
|
+
await traverseFields({
|
|
315
|
+
id,
|
|
316
|
+
collection,
|
|
317
|
+
context,
|
|
318
|
+
data,
|
|
319
|
+
doc,
|
|
320
|
+
fields: field.fields,
|
|
321
|
+
global,
|
|
322
|
+
operation,
|
|
323
|
+
overrideAccess,
|
|
324
|
+
path: fieldPath,
|
|
325
|
+
req,
|
|
326
|
+
schemaPath: fieldSchemaPath,
|
|
327
|
+
siblingData: groupData,
|
|
328
|
+
siblingDoc: groupDoc
|
|
329
|
+
});
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
case 'richText':
|
|
333
|
+
{
|
|
334
|
+
if (!field?.editor) {
|
|
335
|
+
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
|
|
336
|
+
;
|
|
337
|
+
}
|
|
338
|
+
if (typeof field?.editor === 'function') {
|
|
339
|
+
throw new Error('Attempted to access unsanitized rich text editor.');
|
|
340
|
+
}
|
|
341
|
+
const editor = field?.editor;
|
|
342
|
+
if (editor?.hooks?.beforeValidate?.length) {
|
|
343
|
+
await editor.hooks.beforeValidate.reduce(async (priorHook, currentHook)=>{
|
|
344
|
+
await priorHook;
|
|
345
|
+
const hookedValue = await currentHook({
|
|
346
|
+
collection,
|
|
347
|
+
context,
|
|
348
|
+
data,
|
|
349
|
+
field,
|
|
350
|
+
global,
|
|
351
|
+
operation,
|
|
352
|
+
originalDoc: doc,
|
|
353
|
+
overrideAccess,
|
|
354
|
+
path: fieldPath,
|
|
355
|
+
previousSiblingDoc: siblingDoc,
|
|
356
|
+
previousValue: siblingData[field.name],
|
|
357
|
+
req,
|
|
358
|
+
schemaPath: fieldSchemaPath,
|
|
359
|
+
siblingData,
|
|
360
|
+
value: siblingData[field.name]
|
|
361
|
+
});
|
|
362
|
+
if (hookedValue !== undefined) {
|
|
363
|
+
siblingData[field.name] = hookedValue;
|
|
364
|
+
}
|
|
365
|
+
}, Promise.resolve());
|
|
366
|
+
}
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
328
369
|
case 'tab':
|
|
329
370
|
{
|
|
330
371
|
let tabSiblingData;
|
|
@@ -383,43 +424,6 @@ export const promise = async ({ id, collection, context, data, doc, field, globa
|
|
|
383
424
|
});
|
|
384
425
|
break;
|
|
385
426
|
}
|
|
386
|
-
case 'richText':
|
|
387
|
-
{
|
|
388
|
-
if (!field?.editor) {
|
|
389
|
-
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
|
|
390
|
-
;
|
|
391
|
-
}
|
|
392
|
-
if (typeof field?.editor === 'function') {
|
|
393
|
-
throw new Error('Attempted to access unsanitized rich text editor.');
|
|
394
|
-
}
|
|
395
|
-
const editor = field?.editor;
|
|
396
|
-
if (editor?.hooks?.beforeValidate?.length) {
|
|
397
|
-
await editor.hooks.beforeValidate.reduce(async (priorHook, currentHook)=>{
|
|
398
|
-
await priorHook;
|
|
399
|
-
const hookedValue = await currentHook({
|
|
400
|
-
collection,
|
|
401
|
-
context,
|
|
402
|
-
data,
|
|
403
|
-
field,
|
|
404
|
-
global,
|
|
405
|
-
operation,
|
|
406
|
-
originalDoc: doc,
|
|
407
|
-
overrideAccess,
|
|
408
|
-
path: fieldPath,
|
|
409
|
-
previousSiblingDoc: siblingDoc,
|
|
410
|
-
previousValue: siblingData[field.name],
|
|
411
|
-
req,
|
|
412
|
-
schemaPath: fieldSchemaPath,
|
|
413
|
-
siblingData,
|
|
414
|
-
value: siblingData[field.name]
|
|
415
|
-
});
|
|
416
|
-
if (hookedValue !== undefined) {
|
|
417
|
-
siblingData[field.name] = hookedValue;
|
|
418
|
-
}
|
|
419
|
-
}, Promise.resolve());
|
|
420
|
-
}
|
|
421
|
-
break;
|
|
422
|
-
}
|
|
423
427
|
default:
|
|
424
428
|
{
|
|
425
429
|
break;
|