payload 3.0.0-alpha.65 → 3.0.0-alpha.67
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 +3 -0
- package/dist/admin/RichText.d.ts.map +1 -1
- package/dist/admin/RichText.js.map +1 -1
- package/dist/admin/elements/Tab.d.ts +3 -0
- package/dist/admin/elements/Tab.d.ts.map +1 -1
- package/dist/admin/elements/Tab.js.map +1 -1
- package/dist/admin/types.d.ts +1 -1
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js.map +1 -1
- package/dist/auth/getAccessResults.js +1 -1
- package/dist/auth/getAccessResults.js.map +1 -1
- package/dist/auth/operations/forgotPassword.js +3 -2
- package/dist/auth/operations/forgotPassword.js.map +1 -1
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/login.js +3 -0
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/sendVerificationEmail.js +3 -2
- package/dist/auth/sendVerificationEmail.js.map +1 -1
- package/dist/bin/loader/index.d.ts.map +1 -1
- package/dist/bin/loader/index.js +2 -1
- package/dist/bin/loader/index.js.map +1 -1
- package/dist/bin/loader/resolveOriginalPath.d.ts +10 -0
- package/dist/bin/loader/resolveOriginalPath.d.ts.map +1 -0
- package/dist/bin/loader/resolveOriginalPath.js +32 -0
- package/dist/bin/loader/resolveOriginalPath.js.map +1 -0
- package/dist/collections/config/sanitize.d.ts +2 -3
- package/dist/collections/config/sanitize.d.ts.map +1 -1
- package/dist/collections/config/sanitize.js +7 -4
- package/dist/collections/config/sanitize.js.map +1 -1
- package/dist/collections/config/schema.d.ts.map +1 -1
- package/dist/collections/config/schema.js +1 -0
- package/dist/collections/config/schema.js.map +1 -1
- package/dist/config/build.d.ts.map +1 -1
- package/dist/config/build.js +3 -4
- package/dist/config/build.js.map +1 -1
- package/dist/config/sanitize.d.ts +1 -1
- package/dist/config/sanitize.d.ts.map +1 -1
- package/dist/config/sanitize.js +28 -7
- package/dist/config/sanitize.js.map +1 -1
- package/dist/config/schema.js +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/config/types.d.ts +11 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database/queryValidation/validateQueryPaths.js +1 -1
- package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
- package/dist/email/consoleEmailAdapter.d.ts.map +1 -1
- package/dist/email/consoleEmailAdapter.js +1 -0
- package/dist/email/consoleEmailAdapter.js.map +1 -1
- package/dist/email/types.d.ts +1 -0
- package/dist/email/types.d.ts.map +1 -1
- package/dist/email/types.js.map +1 -1
- package/dist/errors/APIError.d.ts +2 -2
- package/dist/errors/APIError.d.ts.map +1 -1
- package/dist/errors/APIError.js +1 -2
- package/dist/errors/APIError.js.map +1 -1
- package/dist/errors/AuthenticationError.d.ts +2 -3
- package/dist/errors/AuthenticationError.d.ts.map +1 -1
- package/dist/errors/AuthenticationError.js +2 -3
- package/dist/errors/AuthenticationError.js.map +1 -1
- package/dist/errors/DuplicateCollection.d.ts +2 -3
- package/dist/errors/DuplicateCollection.d.ts.map +1 -1
- package/dist/errors/DuplicateCollection.js +2 -3
- package/dist/errors/DuplicateCollection.js.map +1 -1
- package/dist/errors/DuplicateFieldName.d.ts +2 -3
- package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
- package/dist/errors/DuplicateFieldName.js +2 -3
- package/dist/errors/DuplicateFieldName.js.map +1 -1
- package/dist/errors/DuplicateGlobal.d.ts +2 -3
- package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
- package/dist/errors/DuplicateGlobal.js +2 -3
- package/dist/errors/DuplicateGlobal.js.map +1 -1
- package/dist/errors/ErrorDeletingFile.d.ts +2 -3
- package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
- package/dist/errors/ErrorDeletingFile.js +2 -3
- package/dist/errors/ErrorDeletingFile.js.map +1 -1
- package/dist/errors/FileRetrievalError.d.ts +6 -0
- package/dist/errors/FileRetrievalError.d.ts.map +1 -0
- package/dist/errors/FileRetrievalError.js +13 -0
- package/dist/errors/FileRetrievalError.js.map +1 -0
- package/dist/errors/FileUploadError.d.ts +2 -3
- package/dist/errors/FileUploadError.d.ts.map +1 -1
- package/dist/errors/FileUploadError.js +2 -3
- package/dist/errors/FileUploadError.js.map +1 -1
- package/dist/errors/Forbidden.d.ts +2 -3
- package/dist/errors/Forbidden.d.ts.map +1 -1
- package/dist/errors/Forbidden.js +2 -3
- package/dist/errors/Forbidden.js.map +1 -1
- package/dist/errors/InvalidConfiguration.d.ts +2 -3
- package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
- package/dist/errors/InvalidConfiguration.js +2 -3
- package/dist/errors/InvalidConfiguration.js.map +1 -1
- package/dist/errors/InvalidFieldName.d.ts +2 -3
- package/dist/errors/InvalidFieldName.d.ts.map +1 -1
- package/dist/errors/InvalidFieldName.js +2 -3
- package/dist/errors/InvalidFieldName.js.map +1 -1
- package/dist/errors/InvalidFieldRelationship.d.ts +2 -3
- package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
- package/dist/errors/InvalidFieldRelationship.js +2 -3
- package/dist/errors/InvalidFieldRelationship.js.map +1 -1
- package/dist/errors/InvalidSchema.d.ts +2 -3
- package/dist/errors/InvalidSchema.d.ts.map +1 -1
- package/dist/errors/InvalidSchema.js +2 -3
- package/dist/errors/InvalidSchema.js.map +1 -1
- package/dist/errors/LockedAuth.d.ts +2 -3
- package/dist/errors/LockedAuth.d.ts.map +1 -1
- package/dist/errors/LockedAuth.js +2 -3
- package/dist/errors/LockedAuth.js.map +1 -1
- package/dist/errors/MissingCollectionLabel.d.ts +2 -3
- package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
- package/dist/errors/MissingCollectionLabel.js +2 -3
- package/dist/errors/MissingCollectionLabel.js.map +1 -1
- package/dist/errors/MissingEditorProp.d.ts +2 -3
- package/dist/errors/MissingEditorProp.d.ts.map +1 -1
- package/dist/errors/MissingEditorProp.js +2 -3
- package/dist/errors/MissingEditorProp.js.map +1 -1
- package/dist/errors/MissingFieldInputOptions.d.ts +2 -3
- package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
- package/dist/errors/MissingFieldInputOptions.js +2 -3
- package/dist/errors/MissingFieldInputOptions.js.map +1 -1
- package/dist/errors/MissingFieldType.d.ts +2 -3
- package/dist/errors/MissingFieldType.d.ts.map +1 -1
- package/dist/errors/MissingFieldType.js +2 -3
- package/dist/errors/MissingFieldType.js.map +1 -1
- package/dist/errors/MissingFile.d.ts +2 -3
- package/dist/errors/MissingFile.d.ts.map +1 -1
- package/dist/errors/MissingFile.js +2 -3
- package/dist/errors/MissingFile.js.map +1 -1
- package/dist/errors/NotFound.d.ts +2 -3
- package/dist/errors/NotFound.d.ts.map +1 -1
- package/dist/errors/NotFound.js +2 -3
- package/dist/errors/NotFound.js.map +1 -1
- package/dist/errors/QueryError.d.ts +2 -3
- package/dist/errors/QueryError.d.ts.map +1 -1
- package/dist/errors/QueryError.js +2 -3
- package/dist/errors/QueryError.js.map +1 -1
- package/dist/errors/TimestampsRequired.d.ts +2 -3
- package/dist/errors/TimestampsRequired.d.ts.map +1 -1
- package/dist/errors/TimestampsRequired.js +2 -3
- package/dist/errors/TimestampsRequired.js.map +1 -1
- package/dist/errors/UnathorizedError.d.ts +2 -3
- package/dist/errors/UnathorizedError.d.ts.map +1 -1
- package/dist/errors/UnathorizedError.js +2 -3
- package/dist/errors/UnathorizedError.js.map +1 -1
- package/dist/errors/ValidationError.d.ts +2 -3
- package/dist/errors/ValidationError.d.ts.map +1 -1
- package/dist/errors/ValidationError.js +2 -3
- package/dist/errors/ValidationError.js.map +1 -1
- package/dist/errors/index.d.ts +20 -19
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +20 -19
- package/dist/errors/index.js.map +1 -1
- package/dist/exports/i18n.d.ts +2 -0
- package/dist/exports/i18n.d.ts.map +1 -0
- package/dist/exports/i18n.js +3 -0
- package/dist/exports/i18n.js.map +1 -0
- package/dist/fields/config/client.d.ts +1 -1
- package/dist/fields/config/sanitize.d.ts +7 -2
- package/dist/fields/config/sanitize.d.ts.map +1 -1
- package/dist/fields/config/sanitize.js +56 -45
- package/dist/fields/config/sanitize.js.map +1 -1
- package/dist/fields/config/sanitize.spec.js +76 -85
- package/dist/fields/config/sanitize.spec.js.map +1 -1
- package/dist/fields/config/types.d.ts +4 -3
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js.map +1 -1
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
- package/dist/fields/hooks/afterRead/promise.js +3 -0
- package/dist/fields/hooks/afterRead/promise.js.map +1 -1
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +3 -0
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/config/sanitize.d.ts +2 -3
- package/dist/globals/config/sanitize.d.ts.map +1 -1
- package/dist/globals/config/sanitize.js +36 -35
- package/dist/globals/config/sanitize.js.map +1 -1
- package/dist/preferences/operations/delete.js +2 -2
- package/dist/preferences/operations/delete.js.map +1 -1
- package/dist/preferences/operations/update.js +1 -1
- package/dist/preferences/operations/update.js.map +1 -1
- package/dist/uploads/generateFileData.js +2 -2
- package/dist/uploads/generateFileData.js.map +1 -1
- package/dist/uploads/getExternalFile.d.ts.map +1 -1
- package/dist/uploads/getExternalFile.js +5 -2
- package/dist/uploads/getExternalFile.js.map +1 -1
- package/dist/uploads/types.d.ts +4 -0
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js.map +1 -1
- package/dist/utilities/checkDuplicateCollections.js +1 -1
- package/dist/utilities/checkDuplicateCollections.js.map +1 -1
- package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
- package/dist/utilities/configToJSONSchema.js +3 -0
- package/dist/utilities/configToJSONSchema.js.map +1 -1
- package/dist/utilities/configToJSONSchema.spec.js +2 -2
- package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
- package/dist/utilities/createLocalReq.d.ts.map +1 -1
- package/dist/utilities/createLocalReq.js +4 -2
- package/dist/utilities/createLocalReq.js.map +1 -1
- package/dist/utilities/importWithoutClientFiles.js +1 -1
- package/dist/utilities/importWithoutClientFiles.js.map +1 -1
- package/dist/utilities/parseCookies.js +1 -1
- package/dist/utilities/parseCookies.js.map +1 -1
- package/dist/utilities/telemetry/index.d.ts +7 -1
- package/dist/utilities/telemetry/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/index.js +41 -19
- package/dist/utilities/telemetry/index.js.map +1 -1
- package/package.json +67 -70
package/dist/errors/index.d.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
1
|
+
export { APIError } from './APIError.js';
|
|
2
|
+
export { AuthenticationError } from './AuthenticationError.js';
|
|
3
|
+
export { DuplicateCollection } from './DuplicateCollection.js';
|
|
4
|
+
export { DuplicateFieldName } from './DuplicateFieldName.js';
|
|
5
|
+
export { DuplicateGlobal } from './DuplicateGlobal.js';
|
|
6
|
+
export { ErrorDeletingFile } from './ErrorDeletingFile.js';
|
|
7
|
+
export { FileRetrievalError } from './FileRetrievalError.js';
|
|
8
|
+
export { FileUploadError } from './FileUploadError.js';
|
|
9
|
+
export { Forbidden } from './Forbidden.js';
|
|
10
|
+
export { InvalidConfiguration } from './InvalidConfiguration.js';
|
|
11
|
+
export { InvalidFieldName } from './InvalidFieldName.js';
|
|
12
|
+
export { InvalidFieldRelationship } from './InvalidFieldRelationship.js';
|
|
13
|
+
export { LockedAuth } from './LockedAuth.js';
|
|
14
|
+
export { MissingCollectionLabel } from './MissingCollectionLabel.js';
|
|
15
|
+
export { MissingFieldInputOptions } from './MissingFieldInputOptions.js';
|
|
16
|
+
export { MissingFieldType } from './MissingFieldType.js';
|
|
17
|
+
export { MissingFile } from './MissingFile.js';
|
|
18
|
+
export { NotFound } from './NotFound.js';
|
|
19
|
+
export { QueryError } from './QueryError.js';
|
|
20
|
+
export { ValidationError } from './ValidationError.js';
|
|
20
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/errors/index.js
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
1
|
+
export { APIError } from './APIError.js';
|
|
2
|
+
export { AuthenticationError } from './AuthenticationError.js';
|
|
3
|
+
export { DuplicateCollection } from './DuplicateCollection.js';
|
|
4
|
+
export { DuplicateFieldName } from './DuplicateFieldName.js';
|
|
5
|
+
export { DuplicateGlobal } from './DuplicateGlobal.js';
|
|
6
|
+
export { ErrorDeletingFile } from './ErrorDeletingFile.js';
|
|
7
|
+
export { FileRetrievalError } from './FileRetrievalError.js';
|
|
8
|
+
export { FileUploadError } from './FileUploadError.js';
|
|
9
|
+
export { Forbidden } from './Forbidden.js';
|
|
10
|
+
export { InvalidConfiguration } from './InvalidConfiguration.js';
|
|
11
|
+
export { InvalidFieldName } from './InvalidFieldName.js';
|
|
12
|
+
export { InvalidFieldRelationship } from './InvalidFieldRelationship.js';
|
|
13
|
+
export { LockedAuth } from './LockedAuth.js';
|
|
14
|
+
export { MissingCollectionLabel } from './MissingCollectionLabel.js';
|
|
15
|
+
export { MissingFieldInputOptions } from './MissingFieldInputOptions.js';
|
|
16
|
+
export { MissingFieldType } from './MissingFieldType.js';
|
|
17
|
+
export { MissingFile } from './MissingFile.js';
|
|
18
|
+
export { NotFound } from './NotFound.js';
|
|
19
|
+
export { QueryError } from './QueryError.js';
|
|
20
|
+
export { ValidationError } from './ValidationError.js';
|
|
20
21
|
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
package/dist/errors/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors/index.ts"],"sourcesContent":["export {
|
|
1
|
+
{"version":3,"sources":["../../src/errors/index.ts"],"sourcesContent":["export { APIError } from './APIError.js'\nexport { AuthenticationError } from './AuthenticationError.js'\nexport { DuplicateCollection } from './DuplicateCollection.js'\nexport { DuplicateFieldName } from './DuplicateFieldName.js'\nexport { DuplicateGlobal } from './DuplicateGlobal.js'\nexport { ErrorDeletingFile } from './ErrorDeletingFile.js'\nexport { FileRetrievalError } from './FileRetrievalError.js'\nexport { FileUploadError } from './FileUploadError.js'\nexport { Forbidden } from './Forbidden.js'\nexport { InvalidConfiguration } from './InvalidConfiguration.js'\nexport { InvalidFieldName } from './InvalidFieldName.js'\nexport { InvalidFieldRelationship } from './InvalidFieldRelationship.js'\nexport { LockedAuth } from './LockedAuth.js'\nexport { MissingCollectionLabel } from './MissingCollectionLabel.js'\nexport { MissingFieldInputOptions } from './MissingFieldInputOptions.js'\nexport { MissingFieldType } from './MissingFieldType.js'\nexport { MissingFile } from './MissingFile.js'\nexport { NotFound } from './NotFound.js'\nexport { QueryError } from './QueryError.js'\nexport { ValidationError } from './ValidationError.js'\n"],"names":["APIError","AuthenticationError","DuplicateCollection","DuplicateFieldName","DuplicateGlobal","ErrorDeletingFile","FileRetrievalError","FileUploadError","Forbidden","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","LockedAuth","MissingCollectionLabel","MissingFieldInputOptions","MissingFieldType","MissingFile","NotFound","QueryError","ValidationError"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAe;AACxC,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,iBAAiB,QAAQ,yBAAwB;AAC1D,SAASC,kBAAkB,QAAQ,0BAAyB;AAC5D,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,wBAAwB,QAAQ,gCAA+B;AACxE,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,sBAAsB,QAAQ,8BAA6B;AACpE,SAASC,wBAAwB,QAAQ,gCAA+B;AACxE,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,WAAW,QAAQ,mBAAkB;AAC9C,SAASC,QAAQ,QAAQ,gBAAe;AACxC,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,eAAe,QAAQ,uBAAsB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/exports/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/exports/i18n.ts"],"sourcesContent":["export { getLocalI18n } from '../translations/getLocalI18n.js'\n"],"names":["getLocalI18n"],"rangeMappings":"","mappings":"AAAA,SAASA,YAAY,QAAQ,kCAAiC"}
|
|
@@ -962,7 +962,7 @@ export declare const createClientFieldConfig: ({ field: incomingField, t, }: {
|
|
|
962
962
|
saveToJWT?: string | boolean;
|
|
963
963
|
unique?: boolean;
|
|
964
964
|
validate?: import("../../fields/config/types.js").Validate<any, any, any, object>;
|
|
965
|
-
editor?: import("../../admin/RichText.js").RichTextAdapter<any, any, any>;
|
|
965
|
+
editor?: import("../../admin/RichText.js").RichTextAdapter<any, any, any> | import("../../admin/RichText.js").RichTextAdapterProvider<any, any, any>;
|
|
966
966
|
type: "richText";
|
|
967
967
|
} | {
|
|
968
968
|
custom?: Record<string, any>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Config } from '../../config/types.js';
|
|
1
|
+
import type { Config, SanitizedConfig } from '../../config/types.js';
|
|
2
2
|
import type { Field } from './types.js';
|
|
3
3
|
type Args = {
|
|
4
4
|
config: Config;
|
|
@@ -10,12 +10,17 @@ type Args = {
|
|
|
10
10
|
* @default false
|
|
11
11
|
*/
|
|
12
12
|
requireFieldLevelRichTextEditor?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises
|
|
15
|
+
* so that you can sanitize them together, after the config has been sanitized.
|
|
16
|
+
*/
|
|
17
|
+
richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>;
|
|
13
18
|
/**
|
|
14
19
|
* If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.
|
|
15
20
|
* This validation will be skipped if validRelationships is null.
|
|
16
21
|
*/
|
|
17
22
|
validRelationships: null | string[];
|
|
18
23
|
};
|
|
19
|
-
export declare const sanitizeFields: ({ config, existingFieldNames, fields, requireFieldLevelRichTextEditor, validRelationships, }: Args) => Field[]
|
|
24
|
+
export declare const sanitizeFields: ({ config, existingFieldNames, fields, requireFieldLevelRichTextEditor, richTextSanitizationPromises, validRelationships, }: Args) => Promise<Field[]>;
|
|
20
25
|
export {};
|
|
21
26
|
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAgBvC,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC;;;OAGG;IACH,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAEhF;;;OAGG;IACH,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,+HAOxB,IAAI,KAAG,QAAQ,KAAK,EAAE,CAoMxB,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import MissingEditorProp from '../../errors/MissingEditorProp.js';
|
|
1
|
+
import { MissingEditorProp } from '../../errors/MissingEditorProp.js';
|
|
2
2
|
import { DuplicateFieldName, InvalidFieldName, InvalidFieldRelationship, MissingFieldType } from '../../errors/index.js';
|
|
3
3
|
import { formatLabels, toWords } from '../../utilities/formatLabels.js';
|
|
4
4
|
import { baseBlockFields } from '../baseFields/baseBlockFields.js';
|
|
@@ -6,12 +6,10 @@ import { baseIDField } from '../baseFields/baseIDField.js';
|
|
|
6
6
|
import { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js';
|
|
7
7
|
import validations from '../validations.js';
|
|
8
8
|
import { fieldAffectsData, tabHasName } from './types.js';
|
|
9
|
-
export const sanitizeFields = ({ config, existingFieldNames = new Set(), fields, requireFieldLevelRichTextEditor = false, validRelationships })=>{
|
|
9
|
+
export const sanitizeFields = async ({ config, existingFieldNames = new Set(), fields, requireFieldLevelRichTextEditor = false, richTextSanitizationPromises, validRelationships })=>{
|
|
10
10
|
if (!fields) return [];
|
|
11
|
-
|
|
12
|
-
const field =
|
|
13
|
-
...unsanitizedField
|
|
14
|
-
};
|
|
11
|
+
for(let i = 0; i < fields.length; i++){
|
|
12
|
+
const field = fields[i];
|
|
15
13
|
if (!field.type) throw new MissingFieldType(field);
|
|
16
14
|
// assert that field names do not contain forbidden characters
|
|
17
15
|
if (fieldAffectsData(field) && field.name.includes('.')) {
|
|
@@ -88,74 +86,87 @@ export const sanitizeFields = ({ config, existingFieldNames = new Set(), fields,
|
|
|
88
86
|
}
|
|
89
87
|
// Make sure that the richText field has an editor
|
|
90
88
|
if (field.type === 'richText') {
|
|
91
|
-
|
|
92
|
-
if (
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
const sanitizeRichText = async (_config)=>{
|
|
90
|
+
if (!field.editor) {
|
|
91
|
+
if (_config.editor && !requireFieldLevelRichTextEditor) {
|
|
92
|
+
// config.editor should be sanitized at this point
|
|
93
|
+
field.editor = _config.editor;
|
|
94
|
+
} else {
|
|
95
|
+
throw new MissingEditorProp(field);
|
|
96
|
+
}
|
|
96
97
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
98
|
+
if (typeof field.editor === 'function') {
|
|
99
|
+
field.editor = await field.editor({
|
|
100
|
+
config: _config
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// Add editor adapter hooks to field hooks
|
|
104
|
+
if (!field.hooks) field.hooks = {};
|
|
105
|
+
const mergeHooks = (hookName)=>{
|
|
106
|
+
if (typeof field.editor === 'function') return;
|
|
107
|
+
if (field.editor?.hooks?.[hookName]?.length) {
|
|
108
|
+
field.hooks[hookName] = field.hooks[hookName] ? field.hooks[hookName].concat(field.editor.hooks[hookName]) : [
|
|
109
|
+
...field.editor.hooks[hookName]
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
mergeHooks('afterRead');
|
|
114
|
+
mergeHooks('afterChange');
|
|
115
|
+
mergeHooks('beforeChange');
|
|
116
|
+
mergeHooks('beforeValidate');
|
|
117
|
+
mergeHooks('beforeDuplicate');
|
|
118
|
+
};
|
|
119
|
+
if (richTextSanitizationPromises) {
|
|
120
|
+
richTextSanitizationPromises.push(sanitizeRichText);
|
|
121
|
+
} else {
|
|
122
|
+
await sanitizeRichText(config);
|
|
111
123
|
}
|
|
112
124
|
}
|
|
113
|
-
// TODO: Handle sanitization for any lexical sub-fields here as well
|
|
114
125
|
if ('fields' in field && field.fields) {
|
|
115
|
-
field.fields = sanitizeFields({
|
|
126
|
+
field.fields = await sanitizeFields({
|
|
116
127
|
config,
|
|
117
128
|
existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames,
|
|
118
129
|
fields: field.fields,
|
|
119
130
|
requireFieldLevelRichTextEditor,
|
|
131
|
+
richTextSanitizationPromises,
|
|
120
132
|
validRelationships
|
|
121
133
|
});
|
|
122
134
|
}
|
|
123
135
|
if (field.type === 'tabs') {
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
...tab
|
|
127
|
-
};
|
|
136
|
+
for(let j = 0; j < field.tabs.length; j++){
|
|
137
|
+
const tab = field.tabs[j];
|
|
128
138
|
if (tabHasName(tab) && typeof tab.label === 'undefined') {
|
|
129
|
-
|
|
139
|
+
tab.label = toWords(tab.name);
|
|
130
140
|
}
|
|
131
|
-
|
|
141
|
+
tab.fields = await sanitizeFields({
|
|
132
142
|
config,
|
|
133
143
|
existingFieldNames: tabHasName(tab) ? new Set() : existingFieldNames,
|
|
134
144
|
fields: tab.fields,
|
|
135
145
|
requireFieldLevelRichTextEditor,
|
|
146
|
+
richTextSanitizationPromises,
|
|
136
147
|
validRelationships
|
|
137
148
|
});
|
|
138
|
-
|
|
139
|
-
}
|
|
149
|
+
field.tabs[j] = tab;
|
|
150
|
+
}
|
|
140
151
|
}
|
|
141
152
|
if ('blocks' in field && field.blocks) {
|
|
142
|
-
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
unsanitizedBlock.labels = !unsanitizedBlock.labels ? formatLabels(unsanitizedBlock.slug) : unsanitizedBlock.labels;
|
|
147
|
-
unsanitizedBlock.fields = sanitizeFields({
|
|
153
|
+
for(let j = 0; j < field.blocks.length; j++){
|
|
154
|
+
const block = field.blocks[j];
|
|
155
|
+
block.labels = !block.labels ? formatLabels(block.slug) : block.labels;
|
|
156
|
+
block.fields = await sanitizeFields({
|
|
148
157
|
config,
|
|
149
158
|
existingFieldNames: new Set(),
|
|
150
159
|
fields: block.fields,
|
|
151
160
|
requireFieldLevelRichTextEditor,
|
|
161
|
+
richTextSanitizationPromises,
|
|
152
162
|
validRelationships
|
|
153
163
|
});
|
|
154
|
-
|
|
155
|
-
}
|
|
164
|
+
field.blocks[j] = block;
|
|
165
|
+
}
|
|
156
166
|
}
|
|
157
|
-
|
|
158
|
-
}
|
|
167
|
+
fields[i] = field;
|
|
168
|
+
}
|
|
169
|
+
return fields;
|
|
159
170
|
};
|
|
160
171
|
|
|
161
172
|
//# sourceMappingURL=sanitize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import type { Config } from '../../config/types.js'\nimport type { Field } from './types.js'\n\nimport MissingEditorProp from '../../errors/MissingEditorProp.js'\nimport {\n DuplicateFieldName,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport validations from '../validations.js'\nimport { fieldAffectsData, tabHasName } from './types.js'\n\ntype Args = {\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport const sanitizeFields = ({\n config,\n existingFieldNames = new Set(),\n fields,\n requireFieldLevelRichTextEditor = false,\n validRelationships,\n}: Args): Field[] => {\n if (!fields) return []\n\n return fields.map((unsanitizedField) => {\n const field: Field = { ...unsanitizedField }\n\n if (!field.type) throw new MissingFieldType(field)\n\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData(field) && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.type === 'relationship') {\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n }\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n }\n field.minRows = field.minRows || field.min\n field.maxRows = field.maxRows || field.max\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n field.blocks = field.blocks.map((block) => ({\n ...block,\n fields: block.fields.concat(baseBlockFields),\n }))\n }\n\n if (field.type === 'array' && field.fields) {\n field.fields.push(baseIDField)\n }\n\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData(field)) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (field.localized && !config.localization) delete field.localized\n\n if (typeof field.validate === 'undefined') {\n const defaultValidate = validations[field.type]\n if (defaultValidate) {\n field.validate = (val, options) => defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = () => true\n }\n }\n\n if (!field.hooks) field.hooks = {}\n if (!field.access) field.access = {}\n\n setDefaultBeforeDuplicate(field)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n if (!field.editor) {\n if (config.editor && !requireFieldLevelRichTextEditor) {\n field.editor = config.editor\n } else {\n throw new MissingEditorProp(field)\n }\n }\n\n // Add editor adapter hooks to field hooks\n if (!field.hooks) field.hooks = {}\n\n if (field?.editor?.hooks?.afterRead?.length) {\n field.hooks.afterRead = field.hooks.afterRead\n ? field.hooks.afterRead.concat(field.editor.hooks.afterRead)\n : field.editor.hooks.afterRead\n }\n if (field?.editor?.hooks?.beforeChange?.length) {\n field.hooks.beforeChange = field.hooks.beforeChange\n ? field.hooks.beforeChange.concat(field.editor.hooks.beforeChange)\n : field.editor.hooks.beforeChange\n }\n if (field?.editor?.hooks?.beforeValidate?.length) {\n field.hooks.beforeValidate = field.hooks.beforeValidate\n ? field.hooks.beforeValidate.concat(field.editor.hooks.beforeValidate)\n : field.editor.hooks.beforeValidate\n }\n if (field?.editor?.hooks?.beforeChange?.length) {\n field.hooks.beforeChange = field.hooks.beforeChange\n ? field.hooks.beforeChange.concat(field.editor.hooks.beforeChange)\n : field.editor.hooks.beforeChange\n }\n }\n\n // TODO: Handle sanitization for any lexical sub-fields here as well\n if ('fields' in field && field.fields) {\n field.fields = sanitizeFields({\n config,\n existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames,\n fields: field.fields,\n requireFieldLevelRichTextEditor,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n field.tabs = field.tabs.map((tab) => {\n const unsanitizedTab = { ...tab }\n if (tabHasName(tab) && typeof tab.label === 'undefined') {\n unsanitizedTab.label = toWords(tab.name)\n }\n\n unsanitizedTab.fields = sanitizeFields({\n config,\n existingFieldNames: tabHasName(tab) ? new Set() : existingFieldNames,\n fields: tab.fields,\n requireFieldLevelRichTextEditor,\n validRelationships,\n })\n\n return unsanitizedTab\n })\n }\n\n if ('blocks' in field && field.blocks) {\n field.blocks = field.blocks.map((block) => {\n const unsanitizedBlock = { ...block }\n unsanitizedBlock.labels = !unsanitizedBlock.labels\n ? formatLabels(unsanitizedBlock.slug)\n : unsanitizedBlock.labels\n\n unsanitizedBlock.fields = sanitizeFields({\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n requireFieldLevelRichTextEditor,\n validRelationships,\n })\n\n return unsanitizedBlock\n })\n }\n\n return field\n })\n}\n"],"names":["MissingEditorProp","DuplicateFieldName","InvalidFieldName","InvalidFieldRelationship","MissingFieldType","formatLabels","toWords","baseBlockFields","baseIDField","setDefaultBeforeDuplicate","validations","fieldAffectsData","tabHasName","sanitizeFields","config","existingFieldNames","Set","fields","requireFieldLevelRichTextEditor","validRelationships","map","unsanitizedField","field","type","name","includes","label","defaultValue","required","relationships","Array","isArray","relationTo","forEach","relationship","min","minRows","console","warn","max","maxRows","blocks","block","concat","push","labels","has","add","localized","localization","validate","defaultValidate","val","options","hooks","access","admin","editor","afterRead","length","beforeChange","beforeValidate","tabs","tab","unsanitizedTab","unsanitizedBlock","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { Field } from './types.js'\n\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport {\n DuplicateFieldName,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport validations from '../validations.js'\nimport { fieldAffectsData, tabHasName } from './types.js'\n\ntype Args = {\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport const sanitizeFields = async ({\n config,\n existingFieldNames = new Set(),\n fields,\n requireFieldLevelRichTextEditor = false,\n richTextSanitizationPromises,\n validRelationships,\n}: Args): Promise<Field[]> => {\n if (!fields) return []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]\n\n if (!field.type) throw new MissingFieldType(field)\n\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData(field) && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.type === 'relationship') {\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n }\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n }\n field.minRows = field.minRows || field.min\n field.maxRows = field.maxRows || field.max\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n field.blocks = field.blocks.map((block) => ({\n ...block,\n fields: block.fields.concat(baseBlockFields),\n }))\n }\n\n if (field.type === 'array' && field.fields) {\n field.fields.push(baseIDField)\n }\n\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData(field)) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (field.localized && !config.localization) delete field.localized\n\n if (typeof field.validate === 'undefined') {\n const defaultValidate = validations[field.type]\n if (defaultValidate) {\n field.validate = (val, options) => defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = () => true\n }\n }\n\n if (!field.hooks) field.hooks = {}\n if (!field.access) field.access = {}\n\n setDefaultBeforeDuplicate(field)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n const sanitizeRichText = async (_config: SanitizedConfig) => {\n if (!field.editor) {\n if (_config.editor && !requireFieldLevelRichTextEditor) {\n // config.editor should be sanitized at this point\n field.editor = _config.editor\n } else {\n throw new MissingEditorProp(field)\n }\n }\n\n if (typeof field.editor === 'function') {\n field.editor = await field.editor({ config: _config })\n }\n\n // Add editor adapter hooks to field hooks\n if (!field.hooks) field.hooks = {}\n\n const mergeHooks = (hookName: keyof typeof field.editor.hooks) => {\n if (typeof field.editor === 'function') return\n\n if (field.editor?.hooks?.[hookName]?.length) {\n field.hooks[hookName] = field.hooks[hookName]\n ? field.hooks[hookName].concat(field.editor.hooks[hookName])\n : [...field.editor.hooks[hookName]]\n }\n }\n\n mergeHooks('afterRead')\n mergeHooks('afterChange')\n mergeHooks('beforeChange')\n mergeHooks('beforeValidate')\n mergeHooks('beforeDuplicate')\n }\n if (richTextSanitizationPromises) {\n richTextSanitizationPromises.push(sanitizeRichText)\n } else {\n await sanitizeRichText(config as unknown as SanitizedConfig)\n }\n }\n\n if ('fields' in field && field.fields) {\n field.fields = await sanitizeFields({\n config,\n existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames,\n fields: field.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n for (let j = 0; j < field.tabs.length; j++) {\n const tab = field.tabs[j]\n if (tabHasName(tab) && typeof tab.label === 'undefined') {\n tab.label = toWords(tab.name)\n }\n\n tab.fields = await sanitizeFields({\n config,\n existingFieldNames: tabHasName(tab) ? new Set() : existingFieldNames,\n fields: tab.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n field.tabs[j] = tab\n }\n }\n\n if ('blocks' in field && field.blocks) {\n for (let j = 0; j < field.blocks.length; j++) {\n const block = field.blocks[j]\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n field.blocks[j] = block\n }\n }\n\n fields[i] = field\n }\n\n return fields\n}\n"],"names":["MissingEditorProp","DuplicateFieldName","InvalidFieldName","InvalidFieldRelationship","MissingFieldType","formatLabels","toWords","baseBlockFields","baseIDField","setDefaultBeforeDuplicate","validations","fieldAffectsData","tabHasName","sanitizeFields","config","existingFieldNames","Set","fields","requireFieldLevelRichTextEditor","richTextSanitizationPromises","validRelationships","i","length","field","type","name","includes","label","defaultValue","required","relationships","Array","isArray","relationTo","forEach","relationship","min","minRows","console","warn","max","maxRows","blocks","map","block","concat","push","labels","has","add","localized","localization","validate","defaultValidate","val","options","hooks","access","admin","sanitizeRichText","_config","editor","mergeHooks","hookName","j","tabs","tab","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|