payload 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/admin/api.js +8 -3
  2. package/dist/admin/components/elements/Autosave/index.js +2 -0
  3. package/dist/admin/components/elements/FileDetails/index.js +1 -1
  4. package/dist/admin/components/elements/RenderTitle/index.js +1 -4
  5. package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/index.js +2 -2
  6. package/dist/admin/components/forms/field-types/Relationship/index.js +3 -3
  7. package/dist/admin/components/forms/field-types/RichText/RichText.js +25 -2
  8. package/dist/admin/components/forms/field-types/RichText/index.scss +24 -0
  9. package/dist/admin/components/forms/field-types/Select/index.js +2 -2
  10. package/dist/admin/components/forms/field-types/Textarea/index.scss +1 -0
  11. package/dist/admin/components/forms/field-types/Upload/Input.js +1 -1
  12. package/dist/admin/components/forms/field-types/Upload/index.scss +4 -4
  13. package/dist/admin/components/utilities/DocumentInfo/index.js +3 -3
  14. package/dist/admin/components/views/Verify/index.js +1 -1
  15. package/dist/admin/components/views/Version/Compare/index.js +1 -1
  16. package/dist/admin/components/views/collections/Edit/Auth/index.js +1 -0
  17. package/dist/admin/components/views/collections/List/RelationshipProvider/index.js +1 -1
  18. package/dist/admin/scss/app.scss +1 -0
  19. package/dist/auth/operations/access.js +3 -3
  20. package/dist/collections/config/types.d.ts +1 -1
  21. package/dist/collections/operations/create.js +12 -4
  22. package/dist/collections/operations/find.js +9 -2
  23. package/dist/collections/operations/findByID.js +2 -1
  24. package/dist/collections/operations/findVersions.js +9 -2
  25. package/dist/collections/operations/update.js +12 -4
  26. package/dist/fields/hooks/afterRead/promise.js +3 -3
  27. package/dist/globals/operations/findOne.js +2 -1
  28. package/dist/globals/operations/findVersions.js +9 -2
  29. package/dist/mongoose/buildSortParam.d.ts +11 -1
  30. package/dist/mongoose/buildSortParam.js +13 -3
  31. package/dist/mongoose/getLocalizedSortProperty.d.ts +11 -0
  32. package/dist/mongoose/getLocalizedSortProperty.js +69 -0
  33. package/dist/mongoose/getLocalizedSortProperty.spec.d.ts +1 -0
  34. package/dist/mongoose/getLocalizedSortProperty.spec.js +167 -0
  35. package/dist/uploads/{uploadFile.d.ts → generateFileData.d.ts} +7 -2
  36. package/dist/uploads/generateFileData.js +101 -0
  37. package/dist/uploads/imageResizer.d.ts +6 -2
  38. package/dist/uploads/imageResizer.js +25 -19
  39. package/dist/uploads/types.d.ts +4 -0
  40. package/dist/uploads/uploadFiles.d.ts +3 -0
  41. package/dist/uploads/uploadFiles.js +21 -0
  42. package/dist/utilities/flattenTopLevelFields.js +2 -2
  43. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts +2 -1
  44. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +51 -50
  45. package/docs/authentication/config.mdx +2 -0
  46. package/docs/rest-api/overview.mdx +15 -13
  47. package/package.json +1 -1
  48. package/CHANGELOG.md +0 -1957
  49. package/dist/uploads/uploadFile.js +0 -92
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateFileData = void 0;
7
+ const file_type_1 = require("file-type");
8
+ const mkdirp_1 = __importDefault(require("mkdirp"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const sanitize_filename_1 = __importDefault(require("sanitize-filename"));
11
+ const sharp_1 = __importDefault(require("sharp"));
12
+ const errors_1 = require("../errors");
13
+ const getImageSize_1 = __importDefault(require("./getImageSize"));
14
+ const getSafeFilename_1 = __importDefault(require("./getSafeFilename"));
15
+ const imageResizer_1 = __importDefault(require("./imageResizer"));
16
+ const canResizeImage_1 = __importDefault(require("./canResizeImage"));
17
+ const generateFileData = async ({ config, collection: { config: collectionConfig, Model, }, req, data, throwOnMissingFile, overwriteExistingFiles, }) => {
18
+ var _a;
19
+ let newData = data;
20
+ const filesToSave = [];
21
+ if (collectionConfig.upload) {
22
+ const fileData = {};
23
+ const { staticDir, imageSizes, disableLocalStorage, resizeOptions, formatOptions } = collectionConfig.upload;
24
+ const { file } = req.files || {};
25
+ if (throwOnMissingFile && !file) {
26
+ throw new errors_1.MissingFile();
27
+ }
28
+ let staticPath = staticDir;
29
+ if (staticDir.indexOf('/') !== 0) {
30
+ staticPath = path_1.default.resolve(config.paths.configDir, staticDir);
31
+ }
32
+ if (!disableLocalStorage) {
33
+ mkdirp_1.default.sync(staticPath);
34
+ }
35
+ if (file) {
36
+ try {
37
+ const shouldResize = (0, canResizeImage_1.default)(file.mimetype);
38
+ let fsSafeName;
39
+ let resized;
40
+ let dimensions;
41
+ if (shouldResize) {
42
+ if (resizeOptions) {
43
+ resized = (0, sharp_1.default)(file.data)
44
+ .resize(resizeOptions);
45
+ }
46
+ if (formatOptions) {
47
+ resized = (resized !== null && resized !== void 0 ? resized : (0, sharp_1.default)(file.data)).toFormat(formatOptions.format, formatOptions.options);
48
+ }
49
+ dimensions = await (0, getImageSize_1.default)(file);
50
+ fileData.width = dimensions.width;
51
+ fileData.height = dimensions.height;
52
+ }
53
+ const fileBuffer = resized ? (await resized.toBuffer()) : file.data;
54
+ const bufferInfo = await (0, file_type_1.fromBuffer)(fileBuffer);
55
+ const mime = (_a = bufferInfo.mime) !== null && _a !== void 0 ? _a : file.mimetype;
56
+ const ext = resized ? bufferInfo.ext : file.name.split('.').pop();
57
+ const fileSize = fileBuffer.length;
58
+ const baseFilename = (0, sanitize_filename_1.default)(file.name.substring(0, file.name.lastIndexOf('.')) || file.name);
59
+ fsSafeName = `${baseFilename}.${ext}`;
60
+ if (!overwriteExistingFiles) {
61
+ fsSafeName = await (0, getSafeFilename_1.default)(Model, staticPath, fsSafeName);
62
+ }
63
+ filesToSave.push({
64
+ path: `${staticPath}/${fsSafeName}`,
65
+ buffer: fileBuffer,
66
+ });
67
+ fileData.filename = fsSafeName || (!overwriteExistingFiles ? await (0, getSafeFilename_1.default)(Model, staticPath, file.name) : file.name);
68
+ fileData.filesize = fileSize || file.size;
69
+ fileData.mimeType = mime || (await (0, file_type_1.fromBuffer)(file.data)).mime;
70
+ if (Array.isArray(imageSizes) && shouldResize) {
71
+ req.payloadUploadSizes = {};
72
+ const { sizeData, sizesToSave } = await (0, imageResizer_1.default)({
73
+ req,
74
+ file: file.data,
75
+ dimensions,
76
+ staticPath,
77
+ config: collectionConfig,
78
+ savedFilename: fsSafeName || file.name,
79
+ mimeType: fileData.mimeType,
80
+ });
81
+ fileData.sizes = sizeData;
82
+ filesToSave.push(...sizesToSave);
83
+ }
84
+ }
85
+ catch (err) {
86
+ console.error(err);
87
+ throw new errors_1.FileUploadError();
88
+ }
89
+ newData = {
90
+ ...newData,
91
+ ...fileData,
92
+ };
93
+ }
94
+ }
95
+ return {
96
+ data: newData,
97
+ files: filesToSave,
98
+ };
99
+ };
100
+ exports.generateFileData = generateFileData;
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVGaWxlRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2dlbmVyYXRlRmlsZURhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUNBQXVDO0FBQ3ZDLG9EQUE0QjtBQUM1QixnREFBd0I7QUFDeEIsMEVBQXlDO0FBQ3pDLGtEQUFxQztBQUdyQyxzQ0FBeUQ7QUFFekQsa0VBQStEO0FBQy9ELHdFQUFnRDtBQUNoRCxrRUFBMkM7QUFFM0Msc0VBQThDO0FBZ0J2QyxNQUFNLGdCQUFnQixHQUFHLEtBQUssRUFBRSxFQUNyQyxNQUFNLEVBQ04sVUFBVSxFQUFFLEVBQ1YsTUFBTSxFQUFFLGdCQUFnQixFQUN4QixLQUFLLEdBQ04sRUFDRCxHQUFHLEVBQ0gsSUFBSSxFQUNKLGtCQUFrQixFQUNsQixzQkFBc0IsR0FDakIsRUFBVSxFQUFFOztJQUNqQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDbkIsTUFBTSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztJQUVyQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtRQUMzQixNQUFNLFFBQVEsR0FBc0IsRUFBRSxDQUFDO1FBRXZDLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFFN0csTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBRWpDLElBQUksa0JBQWtCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDL0IsTUFBTSxJQUFJLG9CQUFXLEVBQUUsQ0FBQztTQUN6QjtRQUVELElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUUzQixJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLFVBQVUsR0FBRyxjQUFJLENBQUMs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
@@ -2,7 +2,7 @@
2
2
  import { SanitizedCollectionConfig } from '../collections/config/types';
3
3
  import { PayloadRequest } from '../express/types';
4
4
  import { ProbedImageSize } from './getImageSize';
5
- import { FileSizes } from './types';
5
+ import { FileSizes, FileToSave } from './types';
6
6
  declare type Args = {
7
7
  req: PayloadRequest;
8
8
  file: Buffer;
@@ -12,5 +12,9 @@ declare type Args = {
12
12
  savedFilename: string;
13
13
  mimeType: string;
14
14
  };
15
- export default function resizeAndSave({ req, file, dimensions, staticPath, config, savedFilename, }: Args): Promise<FileSizes>;
15
+ declare type Result = Promise<{
16
+ sizeData: FileSizes;
17
+ sizesToSave: FileToSave[];
18
+ }>;
19
+ export default function resizeAndSave({ req, file, dimensions, staticPath, config, savedFilename, }: Args): Promise<Result>;
16
20
  export {};
@@ -19,7 +19,8 @@ function getOutputImage(sourceImage, size) {
19
19
  };
20
20
  }
21
21
  async function resizeAndSave({ req, file, dimensions, staticPath, config, savedFilename, }) {
22
- const { imageSizes, disableLocalStorage } = config.upload;
22
+ const { imageSizes } = config.upload;
23
+ const sizesToSave = [];
23
24
  const sizes = imageSizes
24
25
  .filter((desiredSize) => needsResize(desiredSize, dimensions))
25
26
  .map(async (desiredSize) => {
@@ -31,43 +32,48 @@ async function resizeAndSave({ req, file, dimensions, staticPath, config, savedF
31
32
  resolveWithObject: true,
32
33
  });
33
34
  req.payloadUploadSizes[desiredSize.name] = bufferObject.data;
35
+ const mimeType = (await (0, file_type_1.fromBuffer)(bufferObject.data));
34
36
  const outputImage = getOutputImage(savedFilename, desiredSize);
35
- const imageNameWithDimensions = createImageName(outputImage, bufferObject);
37
+ const imageNameWithDimensions = createImageName(outputImage, bufferObject, mimeType.ext);
36
38
  const imagePath = `${staticPath}/${imageNameWithDimensions}`;
37
39
  const fileAlreadyExists = await (0, fileExists_1.default)(imagePath);
38
40
  if (fileAlreadyExists) {
39
41
  fs_1.default.unlinkSync(imagePath);
40
42
  }
41
- if (!disableLocalStorage) {
42
- await resized.toFile(imagePath);
43
- }
43
+ sizesToSave.push({
44
+ path: imagePath,
45
+ buffer: bufferObject.data,
46
+ });
44
47
  return {
45
48
  name: desiredSize.name,
46
49
  width: bufferObject.info.width,
47
50
  height: bufferObject.info.height,
48
51
  filename: imageNameWithDimensions,
49
52
  filesize: bufferObject.info.size,
50
- mimeType: (await (0, file_type_1.fromBuffer)(bufferObject.data)).mime,
53
+ mimeType: mimeType.mime,
51
54
  };
52
55
  });
53
56
  const savedSizes = await Promise.all(sizes);
54
- return savedSizes.reduce((results, size) => ({
55
- ...results,
56
- [size.name]: {
57
- width: size.width,
58
- height: size.height,
59
- filename: size.filename,
60
- mimeType: size.mimeType,
61
- filesize: size.filesize,
62
- },
63
- }), {});
57
+ return {
58
+ sizeData: savedSizes.reduce((results, size) => ({
59
+ ...results,
60
+ [size.name]: {
61
+ width: size.width,
62
+ height: size.height,
63
+ filename: size.filename,
64
+ mimeType: size.mimeType,
65
+ filesize: size.filesize,
66
+ },
67
+ }), {}),
68
+ sizesToSave,
69
+ };
64
70
  }
65
71
  exports.default = resizeAndSave;
66
- function createImageName(outputImage, bufferObject) {
67
- return `${outputImage.name}-${bufferObject.info.width}x${bufferObject.info.height}.${outputImage.extension}`;
72
+ function createImageName(outputImage, bufferObject, extension) {
73
+ return `${outputImage.name}-${bufferObject.info.width}x${bufferObject.info.height}.${extension}`;
68
74
  }
69
75
  function needsResize(desiredSize, dimensions) {
70
76
  return (typeof desiredSize.width === 'number' && desiredSize.width <= dimensions.width)
71
77
  || (typeof desiredSize.height === 'number' && desiredSize.height <= dimensions.height);
72
78
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VSZXNpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VwbG9hZHMvaW1hZ2VSZXNpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQXVDO0FBQ3ZDLDRDQUFvQjtBQUNwQiwwRUFBeUM7QUFDekMsa0RBQTBCO0FBRzFCLDhEQUFzQztBQXFCdEMsU0FBUyxjQUFjLENBQUMsV0FBbUIsRUFBRSxJQUFlO0lBQzFELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBUSxFQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztJQUU3RixPQUFPO1FBQ0wsSUFBSTtRQUNKLFNBQVM7UUFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0tBQ3BCLENBQUM7QUFDSixDQUFDO0FBRWMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxFQUMxQyxHQUFHLEVBQ0gsSUFBSSxFQUNKLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLGFBQWEsR0FDUjtJQUNMLE1BQU0sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRTFELE1BQU0sS0FBSyxHQUFHLFVBQVU7U0FDckIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzdELEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7UUFDekIsSUFBSSxPQUFPLEdBQUcsSUFBQSxlQUFLLEVBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcs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
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VSZXNpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VwbG9hZHMvaW1hZ2VSZXNpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQXVDO0FBQ3ZDLDRDQUFvQjtBQUNwQiwwRUFBeUM7QUFDekMsa0RBQTBCO0FBRzFCLDhEQUFzQztBQTBCdEMsU0FBUyxjQUFjLENBQUMsV0FBbUIsRUFBRSxJQUFlO0lBQzFELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBUSxFQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQztJQUU3RixPQUFPO1FBQ0wsSUFBSTtRQUNKLFNBQVM7UUFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0tBQ3BCLENBQUM7QUFDSixDQUFDO0FBRWMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxFQUMxQyxHQUFHLEVBQ0gsSUFBSSxFQUNKLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLGFBQWEsR0FDUjtJQUNMLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFpQixFQUFFLENBQUM7SUFFckMsTUFBTSxLQUFLLEdBQUcsVUFBVTtTQUNyQixNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDN0QsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtRQUN6QixJQUFJLE9BQU8sR0FBRyxJQUFBLGVBQUssRUFBQyxJQUFJLENBQUMs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
@@ -71,3 +71,7 @@ export declare type File = {
71
71
  name: string;
72
72
  size: number;
73
73
  };
74
+ export declare type FileToSave = {
75
+ buffer: Buffer;
76
+ path: string;
77
+ };
@@ -0,0 +1,3 @@
1
+ import { FileToSave } from './types';
2
+ import { Payload } from '..';
3
+ export declare const uploadFiles: (payload: Payload, files: FileToSave[]) => Promise<void>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.uploadFiles = void 0;
7
+ const errors_1 = require("../errors");
8
+ const saveBufferToFile_1 = __importDefault(require("./saveBufferToFile"));
9
+ const uploadFiles = async (payload, files) => {
10
+ try {
11
+ await Promise.all(files.map(async ({ buffer, path }) => {
12
+ await (0, saveBufferToFile_1.default)(buffer, path);
13
+ }));
14
+ }
15
+ catch (err) {
16
+ payload.logger.error(err);
17
+ throw new errors_1.FileUploadError();
18
+ }
19
+ };
20
+ exports.uploadFiles = uploadFiles;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkRmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXBsb2Fkcy91cGxvYWRGaWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzQ0FBNEM7QUFDNUMsMEVBQWtEO0FBSTNDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxPQUFnQixFQUFFLEtBQW1CLEVBQWlCLEVBQUU7SUFDeEYsSUFBSTtRQUNGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3JELE1BQU0sSUFBQSwwQkFBZ0IsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNMO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixNQUFNLElBQUksd0JBQWUsRUFBRSxDQUFDO0tBQzdCO0FBQ0gsQ0FBQyxDQUFDO0FBVFcsUUFBQSxXQUFXLGVBU3RCIn0=
@@ -21,7 +21,7 @@ const flattenFields = (fields, keepPresentationalFields) => {
21
21
  ...field.tabs.reduce((tabFields, tab) => {
22
22
  return [
23
23
  ...tabFields,
24
- ...((0, types_1.tabHasName)(tab) ? [tab] : flattenFields(tab.fields, keepPresentationalFields)),
24
+ ...((0, types_1.tabHasName)(tab) ? [{ ...tab, type: 'tab' }] : flattenFields(tab.fields, keepPresentationalFields)),
25
25
  ];
26
26
  }, []),
27
27
  ];
@@ -30,4 +30,4 @@ const flattenFields = (fields, keepPresentationalFields) => {
30
30
  }, []);
31
31
  };
32
32
  exports.default = flattenFields;
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlblRvcExldmVsRmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9mbGF0dGVuVG9wTGV2ZWxGaWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFRZ0M7QUFFaEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFlLEVBQUUsd0JBQWtDLEVBQW9ELEVBQUU7SUFDOUgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzFDLElBQUksSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUEsaUNBQXlCLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM3RixPQUFPO2dCQUNMLEdBQUcsV0FBVztnQkFDZCxLQUFLO2FBQ04sQ0FBQztTQUNIO1FBRUQsSUFBSSxJQUFBLHlCQUFpQixFQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE9BQU87Z0JBQ0wsR0FBRyxXQUFXO2dCQUNkLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLENBQUM7YUFDekQsQ0FBQztTQUNIO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN6QixPQUFPO2dCQUNMLEdBQUcsV0FBVztnQkFDZCxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUN0QyxPQUFPO3dCQUNMLEdBQUcsU0FBUzt3QkFDWixHQUFHLENBQUMsSUFBQSxrQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO3FCQUNuRixDQUFDO2dCQUNKLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDUCxDQUFDO1NBQ0g7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDLENBQUM7QUFFRixrQkFBZSxhQUFhLENBQUMifQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlblRvcExldmVsRmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9mbGF0dGVuVG9wTGV2ZWxGaWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFRZ0M7QUFFaEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFlLEVBQUUsd0JBQWtDLEVBQW9ELEVBQUU7SUFDOUgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzFDLElBQUksSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUEsaUNBQXlCLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM3RixPQUFPO2dCQUNMLEdBQUcsV0FBVztnQkFDZCxLQUFLO2FBQ04sQ0FBQztTQUNIO1FBRUQsSUFBSSxJQUFBLHlCQUFpQixFQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE9BQU87Z0JBQ0wsR0FBRyxXQUFXO2dCQUNkLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLENBQUM7YUFDekQsQ0FBQztTQUNIO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN6QixPQUFPO2dCQUNMLEdBQUcsV0FBVztnQkFDZCxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUN0QyxPQUFPO3dCQUNMLEdBQUcsU0FBUzt3QkFDWixHQUFHLENBQUMsSUFBQSxrQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUM7cUJBQ3ZHLENBQUM7Z0JBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUNQLENBQUM7U0FDSDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGLGtCQUFlLGFBQWEsQ0FBQyJ9
@@ -5,9 +5,10 @@ import { SanitizedGlobalConfig } from '../../globals/config/types';
5
5
  declare type Arguments<T> = {
6
6
  payload: Payload;
7
7
  entity: SanitizedCollectionConfig | SanitizedGlobalConfig;
8
+ entityType: 'collection' | 'global';
8
9
  doc: T;
9
10
  locale: string;
10
11
  accessResult: AccessResult;
11
12
  };
12
- declare const replaceWithDraftIfAvailable: <T extends TypeWithID>({ payload, entity, doc, locale, accessResult, }: Arguments<T>) => Promise<T>;
13
+ declare const replaceWithDraftIfAvailable: <T extends TypeWithID>({ payload, entity, entityType, doc, locale, accessResult, }: Arguments<T>) => Promise<T>;
13
14
  export default replaceWithDraftIfAvailable;
@@ -8,59 +8,60 @@ const auth_1 = require("../../auth");
8
8
  const flattenWhereConstraints_1 = __importDefault(require("../../utilities/flattenWhereConstraints"));
9
9
  const sanitizeInternalFields_1 = __importDefault(require("../../utilities/sanitizeInternalFields"));
10
10
  const appendVersionToQueryKey_1 = require("./appendVersionToQueryKey");
11
- const replaceWithDraftIfAvailable = async ({ payload, entity, doc, locale, accessResult, }) => {
12
- if ((0, types_1.docHasTimestamps)(doc)) {
13
- const VersionModel = payload.versions[entity.slug];
14
- let useEstimatedCount = false;
15
- const queryToBuild = {
16
- where: {
17
- and: [
18
- {
19
- parent: {
20
- equals: doc.id,
21
- },
22
- },
23
- {
24
- 'version._status': {
25
- equals: 'draft',
26
- },
27
- },
28
- {
29
- updatedAt: {
30
- greater_than: doc.updatedAt,
31
- },
11
+ const replaceWithDraftIfAvailable = async ({ payload, entity, entityType, doc, locale, accessResult, }) => {
12
+ const VersionModel = payload.versions[entity.slug];
13
+ let useEstimatedCount = false;
14
+ const queryToBuild = {
15
+ where: {
16
+ and: [
17
+ {
18
+ 'version._status': {
19
+ equals: 'draft',
32
20
  },
33
- ],
21
+ },
22
+ ],
23
+ },
24
+ };
25
+ if (entityType === 'collection') {
26
+ queryToBuild.where.and.push({
27
+ parent: {
28
+ equals: doc.id,
34
29
  },
35
- };
36
- if ((0, auth_1.hasWhereAccessResult)(accessResult)) {
37
- const versionAccessResult = (0, appendVersionToQueryKey_1.appendVersionToQueryKey)(accessResult);
38
- queryToBuild.where.and.push(versionAccessResult);
39
- }
40
- const constraints = (0, flattenWhereConstraints_1.default)(queryToBuild);
41
- useEstimatedCount = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'));
42
- const query = await VersionModel.buildQuery(queryToBuild, locale);
43
- let draft = await VersionModel.findOne(query, {}, {
44
- lean: true,
45
- useEstimatedCount,
46
- sort: { updatedAt: 'desc' },
47
30
  });
48
- if (!draft) {
49
- return doc;
50
- }
51
- draft = JSON.parse(JSON.stringify(draft));
52
- draft = (0, sanitizeInternalFields_1.default)(draft);
53
- // Disregard all other draft content at this point,
54
- // Only interested in the version itself.
55
- // Operations will handle firing hooks, etc.
56
- return {
57
- id: doc.id,
58
- ...draft.version,
59
- createdAt: draft.createdAt,
60
- updatedAt: draft.updatedAt,
61
- };
62
31
  }
63
- return doc;
32
+ if ((0, types_1.docHasTimestamps)(doc)) {
33
+ queryToBuild.where.and.push({
34
+ updatedAt: {
35
+ greater_than: doc.updatedAt,
36
+ },
37
+ });
38
+ }
39
+ if ((0, auth_1.hasWhereAccessResult)(accessResult)) {
40
+ const versionAccessResult = (0, appendVersionToQueryKey_1.appendVersionToQueryKey)(accessResult);
41
+ queryToBuild.where.and.push(versionAccessResult);
42
+ }
43
+ const constraints = (0, flattenWhereConstraints_1.default)(queryToBuild);
44
+ useEstimatedCount = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'));
45
+ const query = await VersionModel.buildQuery(queryToBuild, locale);
46
+ let draft = await VersionModel.findOne(query, {}, {
47
+ lean: true,
48
+ useEstimatedCount,
49
+ sort: { updatedAt: 'desc' },
50
+ });
51
+ if (!draft) {
52
+ return doc;
53
+ }
54
+ draft = JSON.parse(JSON.stringify(draft));
55
+ draft = (0, sanitizeInternalFields_1.default)(draft);
56
+ // Disregard all other draft content at this point,
57
+ // Only interested in the version itself.
58
+ // Operations will handle firing hooks, etc.
59
+ return {
60
+ id: doc.id,
61
+ ...draft.version,
62
+ createdAt: draft.createdAt,
63
+ updatedAt: draft.updatedAt,
64
+ };
64
65
  };
65
66
  exports.default = replaceWithDraftIfAvailable;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZVdpdGhEcmFmdElmQXZhaWxhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZlcnNpb25zL2RyYWZ0cy9yZXBsYWNlV2l0aERyYWZ0SWZBdmFpbGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1Q0FBc0Q7QUFDdEQscUNBQWtEO0FBR2xELHNHQUE4RTtBQUM5RSxvR0FBNEU7QUFDNUUsdUVBQW9FO0FBV3BFLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxFQUF3QixFQUMvRCxPQUFPLEVBQ1AsTUFBTSxFQUNOLEdBQUcsRUFDSCxNQUFNLEVBQ04sWUFBWSxHQUNDLEVBQWMsRUFBRTtJQUM3QixJQUFJLElBQUEsd0JBQWdCLEVBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFvQixDQUFDO1FBRXRFLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sWUFBWSxHQUFxQjtZQUNyQyxLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxFQUFFO29CQUNIO3dCQUNFLE1BQU0sRUFBRTs0QkFDTixNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7eUJBQ2Y7cUJBQ0Y7b0JBQ0Q7d0JBQ0UsaUJBQWlCLEVBQUU7NEJBQ2pCLE1BQU0sRUFBRSxPQUFPO3lCQUNoQjtxQkFDRjtvQkFDRDt3QkFDRSxTQUFTLEVBQUU7NEJBQ1QsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTO3lCQUM1QjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztRQUVGLElBQUksSUFBQSwyQkFBb0IsRUFBQyxZQUFZLENBQUMsRUFBRTtZQUN0QyxNQUFNLG1CQUFtQixHQUFHLElBQUEsaURBQXVCLEVBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEUsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDbEQ7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLGlDQUF1QixFQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRyxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWxFLElBQUksS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2hELElBQUksRUFBRSxJQUFJO1lBQ1YsaUJBQWlCO1lBQ2pCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFFRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUMsS0FBSyxHQUFHLElBQUEsZ0NBQXNCLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEMsbURBQW1EO1FBQ25ELHlDQUF5QztRQUN6Qyw0Q0FBNEM7UUFDNUMsT0FBTztZQUNMLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNWLEdBQUcsS0FBSyxDQUFDLE9BQU87WUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztTQUMzQixDQUFDO0tBQ0g7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLGtCQUFlLDJCQUEyQixDQUFDIn0=
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZVdpdGhEcmFmdElmQXZhaWxhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZlcnNpb25zL2RyYWZ0cy9yZXBsYWNlV2l0aERyYWZ0SWZBdmFpbGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx1Q0FBc0Q7QUFDdEQscUNBQWtEO0FBR2xELHNHQUE4RTtBQUM5RSxvR0FBNEU7QUFDNUUsdUVBQW9FO0FBWXBFLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxFQUF3QixFQUMvRCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLFlBQVksR0FDQyxFQUFjLEVBQUU7SUFDN0IsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFvQixDQUFDO0lBRXRFLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBRTlCLE1BQU0sWUFBWSxHQUFxQjtRQUNyQyxLQUFLLEVBQUU7WUFDTCxHQUFHLEVBQUU7Z0JBQ0g7b0JBQ0UsaUJBQWlCLEVBQUU7d0JBQ2pCLE1BQU0sRUFBRSxPQUFPO3FCQUNoQjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsSUFBSSxVQUFVLEtBQUssWUFBWSxFQUFFO1FBQy9CLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUMxQixNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2FBQ2Y7U0FDRixDQUFDLENBQUM7S0FDSjtJQUVELElBQUksSUFBQSx3QkFBZ0IsRUFBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDMUIsU0FBUyxFQUFFO2dCQUNULFlBQVksRUFBRSxHQUFHLENBQUMsU0FBUzthQUM1QjtTQUNGLENBQUMsQ0FBQztLQUNKO0lBRUQsSUFBSSxJQUFBLDJCQUFvQixFQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sbUJBQW1CLEdBQUcsSUFBQSxpREFBdUIsRUFBQyxZQUFZLENBQUMsQ0FBQztRQUNsRSxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQUNsRDtJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsaUNBQXVCLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUQsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFbEUsSUFBSSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDaEQsSUFBSSxFQUFFLElBQUk7UUFDVixpQkFBaUI7UUFDakIsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtLQUM1QixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxLQUFLLEdBQUcsSUFBQSxnQ0FBc0IsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUV0QyxtREFBbUQ7SUFDbkQseUNBQXlDO0lBQ3pDLDRDQUE0QztJQUM1QyxPQUFPO1FBQ0wsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ1YsR0FBRyxLQUFLLENBQUMsT0FBTztRQUNoQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0tBQzNCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixrQkFBZSwyQkFBMkIsQ0FBQyJ9
@@ -57,6 +57,8 @@ const response = await fetch("http://localhost:3000/api/pages", {
57
57
  });
58
58
  ```
59
59
 
60
+ Note: The label portion of the header is case-sensitive and will likely have a capitalized first character unless the label has been customized.
61
+
60
62
  ### Forgot Password
61
63
 
62
64
  You can customize how the Forgot Password workflow operates with the following options on the `auth.forgotPassword` property:
@@ -22,15 +22,17 @@ All Payload API routes are mounted prefixed to your config's `routes.api` URL se
22
22
 
23
23
  Each collection is mounted using its `slug` value. For example, if a collection's slug is `users`, all corresponding routes will be mounted on `/api/users`.
24
24
 
25
+ Note: Collection slugs must be formatted in kebab-case
26
+
25
27
  **All CRUD operations are exposed as follows:**
26
28
 
27
29
  | Method | Path | Description |
28
30
  | -------- | --------------------------- | -------------------------------------- |
29
- | `GET` | `/api/{collectionSlug}` | Find paginated documents |
30
- | `GET` | `/api/{collectionSlug}/:id` | Find a specific document by ID |
31
- | `POST` | `/api/{collectionSlug}` | Create a new document |
32
- | `PATCH` | `/api/{collectionSlug}/:id` | Update a document by ID |
33
- | `DELETE` | `/api/{collectionSlug}/:id` | Delete an existing document by ID |
31
+ | `GET` | `/api/{collection-slug}` | Find paginated documents |
32
+ | `GET` | `/api/{collection-slug}/:id` | Find a specific document by ID |
33
+ | `POST` | `/api/{collection-slug}` | Create a new document |
34
+ | `PATCH` | `/api/{collection-slug}/:id` | Update a document by ID |
35
+ | `DELETE` | `/api/{collection-slug}/:id` | Delete an existing document by ID |
34
36
 
35
37
  ##### Additional `find` query parameters
36
38
 
@@ -47,14 +49,14 @@ Auth enabled collections are also given the following endpoints:
47
49
 
48
50
  | Method | Path | Description |
49
51
  | -------- | --------------------------- | ----------- |
50
- | `POST` | `/api/{collectionSlug}/verify/:token` | [Email verification](/docs/authentication/operations#verify-by-email), if enabled. |
51
- | `POST` | `/api/{collectionSlug}/unlock` | [Unlock a user's account](/docs/authentication/operations#unlock), if enabled. |
52
- | `POST` | `/api/{collectionSlug}/login` | [Logs in](/docs/authentication/operations#login) a user with email / password. |
53
- | `POST` | `/api/{collectionSlug}/logout` | [Logs out](/docs/authentication/operations#logout) a user. |
54
- | `POST` | `/api/{collectionSlug}/refresh-token` | [Refreshes a token](/docs/authentication/operations#refresh) that has not yet expired. |
55
- | `GET` | `/api/{collectionSlug}/me` | [Returns the currently logged in user with token](/docs/authentication/operations#me). |
56
- | `POST` | `/api/{collectionSlug}/forgot-password` | [Password reset workflow](/docs/authentication/operations#forgot-password) entry point. |
57
- | `POST` | `/api/{collectionSlug}/reset-password` | [To reset the user's password](/docs/authentication/operations#reset-password). |
52
+ | `POST` | `/api/{collection-slug}/verify/:token` | [Email verification](/docs/authentication/operations#verify-by-email), if enabled. |
53
+ | `POST` | `/api/{collection-slug}/unlock` | [Unlock a user's account](/docs/authentication/operations#unlock), if enabled. |
54
+ | `POST` | `/api/{collection-slug}/login` | [Logs in](/docs/authentication/operations#login) a user with email / password. |
55
+ | `POST` | `/api/{collection-slug}/logout` | [Logs out](/docs/authentication/operations#logout) a user. |
56
+ | `POST` | `/api/{collection-slug}/refresh-token` | [Refreshes a token](/docs/authentication/operations#refresh) that has not yet expired. |
57
+ | `GET` | `/api/{collection-slug}/me` | [Returns the currently logged in user with token](/docs/authentication/operations#me). |
58
+ | `POST` | `/api/{collection-slug}/forgot-password` | [Password reset workflow](/docs/authentication/operations#forgot-password) entry point. |
59
+ | `POST` | `/api/{collection-slug}/reset-password` | [To reset the user's password](/docs/authentication/operations#reset-password). |
58
60
 
59
61
  ## Globals
60
62
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "MIT",
6
6
  "author": {