@payloadcms/plugin-cloud-storage 3.91.0-internal.c1569dc → 4.0.0-beta.1

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 (106) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +4 -4
  3. package/dist/client/createClientUploadHandler.d.ts +8 -7
  4. package/dist/client/createClientUploadHandler.d.ts.map +1 -1
  5. package/dist/client/createClientUploadHandler.js +26 -22
  6. package/dist/client/createClientUploadHandler.js.map +1 -1
  7. package/dist/exports/client.d.ts +1 -1
  8. package/dist/exports/client.d.ts.map +1 -1
  9. package/dist/exports/client.js +1 -1
  10. package/dist/exports/client.js.map +1 -1
  11. package/dist/exports/utilities.d.ts +2 -4
  12. package/dist/exports/utilities.d.ts.map +1 -1
  13. package/dist/exports/utilities.js +2 -4
  14. package/dist/exports/utilities.js.map +1 -1
  15. package/dist/fields/getFields.d.ts +1 -5
  16. package/dist/fields/getFields.d.ts.map +1 -1
  17. package/dist/fields/getFields.js +102 -35
  18. package/dist/fields/getFields.js.map +1 -1
  19. package/dist/hooks/afterChange.d.ts +3 -1
  20. package/dist/hooks/afterChange.d.ts.map +1 -1
  21. package/dist/hooks/afterChange.js +93 -27
  22. package/dist/hooks/afterChange.js.map +1 -1
  23. package/dist/hooks/afterDelete.d.ts.map +1 -1
  24. package/dist/hooks/afterDelete.js +10 -2
  25. package/dist/hooks/afterDelete.js.map +1 -1
  26. package/dist/hooks/afterRead.d.ts +6 -1
  27. package/dist/hooks/afterRead.d.ts.map +1 -1
  28. package/dist/hooks/afterRead.js +27 -11
  29. package/dist/hooks/afterRead.js.map +1 -1
  30. package/dist/hooks/beforeChange.d.ts +2 -1
  31. package/dist/hooks/beforeChange.d.ts.map +1 -1
  32. package/dist/hooks/beforeChange.js +14 -9
  33. package/dist/hooks/beforeChange.js.map +1 -1
  34. package/dist/hooks/publicOriginalURL.d.ts +8 -0
  35. package/dist/hooks/publicOriginalURL.d.ts.map +1 -0
  36. package/dist/hooks/publicOriginalURL.js +34 -0
  37. package/dist/hooks/publicOriginalURL.js.map +1 -0
  38. package/dist/plugin.d.ts.map +1 -1
  39. package/dist/plugin.js +198 -133
  40. package/dist/plugin.js.map +1 -1
  41. package/dist/types.d.ts +48 -31
  42. package/dist/types.d.ts.map +1 -1
  43. package/dist/types.js.map +1 -1
  44. package/dist/utilities/buildStoragePathData.d.ts +0 -6
  45. package/dist/utilities/buildStoragePathData.d.ts.map +1 -1
  46. package/dist/utilities/buildStoragePathData.js +0 -2
  47. package/dist/utilities/buildStoragePathData.js.map +1 -1
  48. package/dist/utilities/createFileOperations.d.ts +13 -0
  49. package/dist/utilities/createFileOperations.d.ts.map +1 -0
  50. package/dist/utilities/createFileOperations.js +258 -0
  51. package/dist/utilities/createFileOperations.js.map +1 -0
  52. package/dist/utilities/getFilePrefix.d.ts +9 -20
  53. package/dist/utilities/getFilePrefix.d.ts.map +1 -1
  54. package/dist/utilities/getFilePrefix.js +42 -31
  55. package/dist/utilities/getFilePrefix.js.map +1 -1
  56. package/dist/utilities/getIncomingFiles.js +4 -4
  57. package/dist/utilities/getIncomingFiles.js.map +1 -1
  58. package/dist/utilities/getStorageLocationSelect.d.ts +9 -0
  59. package/dist/utilities/getStorageLocationSelect.d.ts.map +1 -0
  60. package/dist/utilities/getStorageLocationSelect.js +54 -0
  61. package/dist/utilities/getStorageLocationSelect.js.map +1 -0
  62. package/dist/utilities/resolveSignedURLKey.d.ts +10 -10
  63. package/dist/utilities/resolveSignedURLKey.d.ts.map +1 -1
  64. package/dist/utilities/resolveSignedURLKey.js +33 -26
  65. package/dist/utilities/resolveSignedURLKey.js.map +1 -1
  66. package/dist/utilities/sanitizePrefix.d.ts +1 -9
  67. package/dist/utilities/sanitizePrefix.d.ts.map +1 -1
  68. package/dist/utilities/sanitizePrefix.js +1 -21
  69. package/dist/utilities/sanitizePrefix.js.map +1 -1
  70. package/package.json +6 -6
  71. package/dist/admin/fields/getFields.d.ts +0 -17
  72. package/dist/admin/fields/getFields.d.ts.map +0 -1
  73. package/dist/admin/fields/getFields.js +0 -98
  74. package/dist/admin/fields/getFields.js.map +0 -1
  75. package/dist/admin/index.d.ts +0 -4
  76. package/dist/admin/index.d.ts.map +0 -1
  77. package/dist/admin/index.js +0 -34
  78. package/dist/admin/index.js.map +0 -1
  79. package/dist/hooks/afterChange.spec.js +0 -150
  80. package/dist/hooks/afterChange.spec.js.map +0 -1
  81. package/dist/hooks/normalizeUploadPrefix.spec.js +0 -154
  82. package/dist/hooks/normalizeUploadPrefix.spec.js.map +0 -1
  83. package/dist/plugin.spec.js +0 -186
  84. package/dist/plugin.spec.js.map +0 -1
  85. package/dist/utilities/assertReceiptMatchesFileKey.d.ts +0 -15
  86. package/dist/utilities/assertReceiptMatchesFileKey.d.ts.map +0 -1
  87. package/dist/utilities/assertReceiptMatchesFileKey.js +0 -31
  88. package/dist/utilities/assertReceiptMatchesFileKey.js.map +0 -1
  89. package/dist/utilities/buildStoragePathData.spec.js +0 -254
  90. package/dist/utilities/buildStoragePathData.spec.js.map +0 -1
  91. package/dist/utilities/getFilePrefix.spec.js +0 -291
  92. package/dist/utilities/getFilePrefix.spec.js.map +0 -1
  93. package/dist/utilities/initClientUploads.d.ts +0 -13
  94. package/dist/utilities/initClientUploads.d.ts.map +0 -1
  95. package/dist/utilities/initClientUploads.js +0 -66
  96. package/dist/utilities/initClientUploads.js.map +0 -1
  97. package/dist/utilities/initClientUploads.spec.js +0 -31
  98. package/dist/utilities/initClientUploads.spec.js.map +0 -1
  99. package/dist/utilities/resolveSignedURLKey.spec.js +0 -56
  100. package/dist/utilities/resolveSignedURLKey.spec.js.map +0 -1
  101. package/dist/utilities/verifyClientUploadReceiptForFileKey.d.ts +0 -20
  102. package/dist/utilities/verifyClientUploadReceiptForFileKey.d.ts.map +0 -1
  103. package/dist/utilities/verifyClientUploadReceiptForFileKey.js +0 -24
  104. package/dist/utilities/verifyClientUploadReceiptForFileKey.js.map +0 -1
  105. package/dist/utilities/verifyClientUploadReceiptForFileKey.spec.js +0 -108
  106. package/dist/utilities/verifyClientUploadReceiptForFileKey.spec.js.map +0 -1
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2018-2025 Payload CMS, Inc. <info@payloadcms.com>
3
+ Copyright (c) 2018-2026 Payload CMS, LLC <info@payloadcms.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
package/README.md CHANGED
@@ -6,10 +6,10 @@ This repository contains the officially supported Payload Cloud Storage plugin.
6
6
 
7
7
  | Service | Package |
8
8
  | -------------------- | ----------------------------------------------------------------------------------------------------------------- |
9
- | Vercel Blob | [`@payloadcms/storage-vercel-blob`](https://github.com/payloadcms/payload/tree/3.x/packages/storage-vercel-blob) |
10
- | AWS S3 | [`@payloadcms/storage-s3`](https://github.com/payloadcms/payload/tree/3.x/packages/storage-s3) |
11
- | Azure | [`@payloadcms/storage-azure`](https://github.com/payloadcms/payload/tree/3.x/packages/storage-azure) |
12
- | Google Cloud Storage | [`@payloadcms/storage-gcs`](https://github.com/payloadcms/payload/tree/3.x/packages/storage-gcs) |
9
+ | Vercel Blob | [`@payloadcms/storage-vercel-blob`](https://github.com/payloadcms/payload/tree/main/packages/storage-vercel-blob) |
10
+ | AWS S3 | [`@payloadcms/storage-s3`](https://github.com/payloadcms/payload/tree/main/packages/storage-s3) |
11
+ | Azure | [`@payloadcms/storage-azure`](https://github.com/payloadcms/payload/tree/main/packages/storage-azure) |
12
+ | Google Cloud Storage | [`@payloadcms/storage-gcs`](https://github.com/payloadcms/payload/tree/main/packages/storage-gcs) |
13
13
 
14
14
  This package is now best used for implementing custom storage solutions or third-party storage services that do not have `@payloadcms/storage-*` packages.
15
15
 
@@ -3,23 +3,24 @@ import { type ReactNode } from 'react';
3
3
  type ClientUploadHandlerProps<T extends Record<string, unknown>> = {
4
4
  children: ReactNode;
5
5
  collectionSlug: UploadCollectionSlug;
6
- enabled?: boolean;
7
- extra: T;
6
+ endpointPath?: `/${string}`;
8
7
  prefix?: string;
9
- serverHandlerPath: `/${string}`;
8
+ props: T;
10
9
  };
11
- export declare const createClientUploadHandler: <T extends Record<string, unknown>>({ handler, }: {
10
+ export declare const createClientUploadHandler: <T extends Record<string, unknown>>({ name, handler, }: {
12
11
  handler: (args: {
13
12
  apiRoute: string;
14
13
  collectionSlug: UploadCollectionSlug;
14
+ data?: unknown;
15
15
  docPrefix?: string;
16
- extra: T;
16
+ endpointPath?: `/${string}`;
17
17
  file: File;
18
18
  prefix?: string;
19
- serverHandlerPath: `/${string}`;
19
+ props: T;
20
20
  serverURL: string;
21
21
  updateFilename: (value: string) => void;
22
22
  }) => Promise<unknown>;
23
- }) => ({ children, collectionSlug, enabled, extra, prefix, serverHandlerPath, }: ClientUploadHandlerProps<T>) => import("react").JSX.Element;
23
+ name: string;
24
+ }) => ({ children, collectionSlug, endpointPath, prefix, props, }: ClientUploadHandlerProps<T>) => import("react").JSX.Element;
24
25
  export {};
25
26
  //# sourceMappingURL=createClientUploadHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createClientUploadHandler.d.ts","sourceRoot":"","sources":["../../src/client/createClientUploadHandler.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGnD,OAAO,EAAY,KAAK,SAAS,EAAa,MAAM,OAAO,CAAA;AAE3D,KAAK,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACjE,QAAQ,EAAE,SAAS,CAAA;IACnB,cAAc,EAAE,oBAAoB,CAAA;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,CAAC,CAAA;IACR,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,IAAI,MAAM,EAAE,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBAExE;IACD,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,cAAc,EAAE,oBAAoB,CAAA;QACpC,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,CAAC,CAAA;QACR,IAAI,EAAE,IAAI,CAAA;QACV,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,iBAAiB,EAAE,IAAI,MAAM,EAAE,CAAA;QAC/B,SAAS,EAAE,MAAM,CAAA;QACjB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KACxC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACvB,gFAQI,wBAAwB,CAAC,CAAC,CAAC,gCAoC/B,CAAA"}
1
+ {"version":3,"file":"createClientUploadHandler.d.ts","sourceRoot":"","sources":["../../src/client/createClientUploadHandler.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGnD,OAAO,EAAY,KAAK,SAAS,EAAa,MAAM,OAAO,CAAA;AAE3D,KAAK,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IACjE,QAAQ,EAAE,SAAS,CAAA;IACnB,cAAc,EAAE,oBAAoB,CAAA;IACpC,YAAY,CAAC,EAAE,IAAI,MAAM,EAAE,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sBAGxE;IACD,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,cAAc,EAAE,oBAAoB,CAAA;QACpC,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,YAAY,CAAC,EAAE,IAAI,MAAM,EAAE,CAAA;QAC3B,IAAI,EAAE,IAAI,CAAA;QACV,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,EAAE,CAAC,CAAA;QACR,SAAS,EAAE,MAAM,CAAA;QACjB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KACxC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb,kEAOI,wBAAwB,CAAC,CAAC,CAAC,gCAmD/B,CAAA"}
@@ -1,33 +1,37 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useConfig, useEffectEvent, useUploadHandlers } from '@payloadcms/ui';
3
+ import { useConfig, useEffectEvent } from '@payloadcms/ui';
4
4
  import { Fragment, useEffect } from 'react';
5
- export const createClientUploadHandler = ({ handler })=>{
6
- return function ClientUploadHandler({ children, collectionSlug, enabled, extra, prefix, serverHandlerPath }) {
7
- const { setUploadHandler } = useUploadHandlers();
5
+ export const createClientUploadHandler = ({ name, handler })=>{
6
+ return function ClientUploadHandler({ children, collectionSlug, endpointPath, prefix, props }) {
8
7
  const { config: { routes: { api: apiRoute }, serverURL } } = useConfig();
9
8
  const initializeHandler = useEffectEvent(()=>{
10
- if (enabled) {
11
- setUploadHandler({
9
+ const listener = (event)=>{
10
+ const customEvent = event;
11
+ if (customEvent.detail.collectionSlug !== collectionSlug) {
12
+ return;
13
+ }
14
+ customEvent.preventDefault();
15
+ void handler({
16
+ apiRoute,
12
17
  collectionSlug,
13
- handler: ({ docPrefix, file, updateFilename })=>{
14
- return handler({
15
- apiRoute,
16
- collectionSlug,
17
- docPrefix,
18
- extra,
19
- file,
20
- prefix,
21
- serverHandlerPath,
22
- serverURL,
23
- updateFilename
24
- });
25
- }
26
- });
27
- }
18
+ data: customEvent.detail.data,
19
+ docPrefix: customEvent.detail.docPrefix,
20
+ endpointPath,
21
+ file: customEvent.detail.file,
22
+ prefix,
23
+ props,
24
+ serverURL,
25
+ updateFilename: customEvent.detail.updateFilename
26
+ }).then(customEvent.detail.resolve, customEvent.detail.reject);
27
+ };
28
+ const eventName = `payload:upload:${name}`;
29
+ const eventTarget = globalThis;
30
+ eventTarget.addEventListener(eventName, listener);
31
+ return ()=>eventTarget.removeEventListener(eventName, listener);
28
32
  });
29
33
  useEffect(()=>{
30
- initializeHandler();
34
+ return initializeHandler();
31
35
  }, []);
32
36
  return /*#__PURE__*/ _jsx(Fragment, {
33
37
  children: children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/createClientUploadHandler.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadCollectionSlug } from 'payload'\n\nimport { useConfig, useEffectEvent, useUploadHandlers } from '@payloadcms/ui'\nimport { Fragment, type ReactNode, useEffect } from 'react'\n\ntype ClientUploadHandlerProps<T extends Record<string, unknown>> = {\n children: ReactNode\n collectionSlug: UploadCollectionSlug\n enabled?: boolean\n extra: T\n prefix?: string\n serverHandlerPath: `/${string}`\n}\n\nexport const createClientUploadHandler = <T extends Record<string, unknown>>({\n handler,\n}: {\n handler: (args: {\n apiRoute: string\n collectionSlug: UploadCollectionSlug\n docPrefix?: string\n extra: T\n file: File\n prefix?: string\n serverHandlerPath: `/${string}`\n serverURL: string\n updateFilename: (value: string) => void\n }) => Promise<unknown>\n}) => {\n return function ClientUploadHandler({\n children,\n collectionSlug,\n enabled,\n extra,\n prefix,\n serverHandlerPath,\n }: ClientUploadHandlerProps<T>) {\n const { setUploadHandler } = useUploadHandlers()\n const {\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const initializeHandler = useEffectEvent(() => {\n if (enabled) {\n setUploadHandler({\n collectionSlug,\n handler: ({ docPrefix, file, updateFilename }) => {\n return handler({\n apiRoute,\n collectionSlug,\n docPrefix,\n extra,\n file,\n prefix,\n serverHandlerPath,\n serverURL,\n updateFilename,\n })\n },\n })\n }\n })\n\n useEffect(() => {\n initializeHandler()\n }, [])\n\n return <Fragment>{children}</Fragment>\n }\n}\n"],"names":["useConfig","useEffectEvent","useUploadHandlers","Fragment","useEffect","createClientUploadHandler","handler","ClientUploadHandler","children","collectionSlug","enabled","extra","prefix","serverHandlerPath","setUploadHandler","config","routes","api","apiRoute","serverURL","initializeHandler","docPrefix","file","updateFilename"],"mappings":"AAAA;;AAIA,SAASA,SAAS,EAAEC,cAAc,EAAEC,iBAAiB,QAAQ,iBAAgB;AAC7E,SAASC,QAAQ,EAAkBC,SAAS,QAAQ,QAAO;AAW3D,OAAO,MAAMC,4BAA4B,CAAoC,EAC3EC,OAAO,EAaR;IACC,OAAO,SAASC,oBAAoB,EAClCC,QAAQ,EACRC,cAAc,EACdC,OAAO,EACPC,KAAK,EACLC,MAAM,EACNC,iBAAiB,EACW;QAC5B,MAAM,EAAEC,gBAAgB,EAAE,GAAGZ;QAC7B,MAAM,EACJa,QAAQ,EACNC,QAAQ,EAAEC,KAAKC,QAAQ,EAAE,EACzBC,SAAS,EACV,EACF,GAAGnB;QAEJ,MAAMoB,oBAAoBnB,eAAe;YACvC,IAAIS,SAAS;gBACXI,iBAAiB;oBACfL;oBACAH,SAAS,CAAC,EAAEe,SAAS,EAAEC,IAAI,EAAEC,cAAc,EAAE;wBAC3C,OAAOjB,QAAQ;4BACbY;4BACAT;4BACAY;4BACAV;4BACAW;4BACAV;4BACAC;4BACAM;4BACAI;wBACF;oBACF;gBACF;YACF;QACF;QAEAnB,UAAU;YACRgB;QACF,GAAG,EAAE;QAEL,qBAAO,KAACjB;sBAAUK;;IACpB;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/client/createClientUploadHandler.tsx"],"sourcesContent":["'use client'\n\nimport type { UploadCollectionSlug } from 'payload'\n\nimport { useConfig, useEffectEvent } from '@payloadcms/ui'\nimport { Fragment, type ReactNode, useEffect } from 'react'\n\ntype ClientUploadHandlerProps<T extends Record<string, unknown>> = {\n children: ReactNode\n collectionSlug: UploadCollectionSlug\n endpointPath?: `/${string}`\n prefix?: string\n props: T\n}\n\nexport const createClientUploadHandler = <T extends Record<string, unknown>>({\n name,\n handler,\n}: {\n handler: (args: {\n apiRoute: string\n collectionSlug: UploadCollectionSlug\n data?: unknown\n docPrefix?: string\n endpointPath?: `/${string}`\n file: File\n prefix?: string\n props: T\n serverURL: string\n updateFilename: (value: string) => void\n }) => Promise<unknown>\n name: string\n}) => {\n return function ClientUploadHandler({\n children,\n collectionSlug,\n endpointPath,\n prefix,\n props,\n }: ClientUploadHandlerProps<T>) {\n const {\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const initializeHandler = useEffectEvent(() => {\n const listener = (event: Event) => {\n const customEvent = event as CustomEvent<{\n collectionSlug: UploadCollectionSlug\n data?: unknown\n docPrefix?: string\n file: File\n reject: (reason?: unknown) => void\n resolve: (value: unknown) => void\n updateFilename: (value: string) => void\n }>\n\n if (customEvent.detail.collectionSlug !== collectionSlug) {\n return\n }\n\n customEvent.preventDefault()\n void handler({\n apiRoute,\n collectionSlug,\n data: customEvent.detail.data,\n docPrefix: customEvent.detail.docPrefix,\n endpointPath,\n file: customEvent.detail.file,\n prefix,\n props,\n serverURL,\n updateFilename: customEvent.detail.updateFilename,\n }).then(customEvent.detail.resolve, customEvent.detail.reject)\n }\n\n const eventName = `payload:upload:${name}`\n const eventTarget = globalThis as unknown as EventTarget\n eventTarget.addEventListener(eventName, listener)\n return () => eventTarget.removeEventListener(eventName, listener)\n })\n\n useEffect(() => {\n return initializeHandler()\n }, [])\n\n return <Fragment>{children}</Fragment>\n }\n}\n"],"names":["useConfig","useEffectEvent","Fragment","useEffect","createClientUploadHandler","name","handler","ClientUploadHandler","children","collectionSlug","endpointPath","prefix","props","config","routes","api","apiRoute","serverURL","initializeHandler","listener","event","customEvent","detail","preventDefault","data","docPrefix","file","updateFilename","then","resolve","reject","eventName","eventTarget","globalThis","addEventListener","removeEventListener"],"mappings":"AAAA;;AAIA,SAASA,SAAS,EAAEC,cAAc,QAAQ,iBAAgB;AAC1D,SAASC,QAAQ,EAAkBC,SAAS,QAAQ,QAAO;AAU3D,OAAO,MAAMC,4BAA4B,CAAoC,EAC3EC,IAAI,EACJC,OAAO,EAeR;IACC,OAAO,SAASC,oBAAoB,EAClCC,QAAQ,EACRC,cAAc,EACdC,YAAY,EACZC,MAAM,EACNC,KAAK,EACuB;QAC5B,MAAM,EACJC,QAAQ,EACNC,QAAQ,EAAEC,KAAKC,QAAQ,EAAE,EACzBC,SAAS,EACV,EACF,GAAGjB;QAEJ,MAAMkB,oBAAoBjB,eAAe;YACvC,MAAMkB,WAAW,CAACC;gBAChB,MAAMC,cAAcD;gBAUpB,IAAIC,YAAYC,MAAM,CAACb,cAAc,KAAKA,gBAAgB;oBACxD;gBACF;gBAEAY,YAAYE,cAAc;gBAC1B,KAAKjB,QAAQ;oBACXU;oBACAP;oBACAe,MAAMH,YAAYC,MAAM,CAACE,IAAI;oBAC7BC,WAAWJ,YAAYC,MAAM,CAACG,SAAS;oBACvCf;oBACAgB,MAAML,YAAYC,MAAM,CAACI,IAAI;oBAC7Bf;oBACAC;oBACAK;oBACAU,gBAAgBN,YAAYC,MAAM,CAACK,cAAc;gBACnD,GAAGC,IAAI,CAACP,YAAYC,MAAM,CAACO,OAAO,EAAER,YAAYC,MAAM,CAACQ,MAAM;YAC/D;YAEA,MAAMC,YAAY,CAAC,eAAe,EAAE1B,MAAM;YAC1C,MAAM2B,cAAcC;YACpBD,YAAYE,gBAAgB,CAACH,WAAWZ;YACxC,OAAO,IAAMa,YAAYG,mBAAmB,CAACJ,WAAWZ;QAC1D;QAEAhB,UAAU;YACR,OAAOe;QACT,GAAG,EAAE;QAEL,qBAAO,KAAChB;sBAAUM;;IACpB;AACF,EAAC"}
@@ -1,4 +1,4 @@
1
1
  export { createClientUploadHandler } from '../client/createClientUploadHandler.js';
2
- export { buildStoragePathData, buildStoragePathData as getFileKey, buildUploadStoragePathData, } from '../utilities/buildStoragePathData.js';
2
+ export { buildStoragePathData, buildUploadStoragePathData, } from '../utilities/buildStoragePathData.js';
3
3
  export { sanitizePrefix } from '../utilities/sanitizePrefix.js';
4
4
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;AAClF,OAAO,EACL,oBAAoB,EACpB,oBAAoB,IAAI,UAAU,EAClC,0BAA0B,GAC3B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;AAClF,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  export { createClientUploadHandler } from '../client/createClientUploadHandler.js';
2
- export { buildStoragePathData, buildStoragePathData as getFileKey, buildUploadStoragePathData } from '../utilities/buildStoragePathData.js';
2
+ export { buildStoragePathData, buildUploadStoragePathData } from '../utilities/buildStoragePathData.js';
3
3
  export { sanitizePrefix } from '../utilities/sanitizePrefix.js';
4
4
 
5
5
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { createClientUploadHandler } from '../client/createClientUploadHandler.js'\nexport {\n buildStoragePathData,\n buildStoragePathData as getFileKey,\n buildUploadStoragePathData,\n} from '../utilities/buildStoragePathData.js'\nexport { sanitizePrefix } from '../utilities/sanitizePrefix.js'\n"],"names":["createClientUploadHandler","buildStoragePathData","getFileKey","buildUploadStoragePathData","sanitizePrefix"],"mappings":"AAAA,SAASA,yBAAyB,QAAQ,yCAAwC;AAClF,SACEC,oBAAoB,EACpBA,wBAAwBC,UAAU,EAClCC,0BAA0B,QACrB,uCAAsC;AAC7C,SAASC,cAAc,QAAQ,iCAAgC"}
1
+ {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { createClientUploadHandler } from '../client/createClientUploadHandler.js'\nexport {\n buildStoragePathData,\n buildUploadStoragePathData,\n} from '../utilities/buildStoragePathData.js'\nexport { sanitizePrefix } from '../utilities/sanitizePrefix.js'\n"],"names":["createClientUploadHandler","buildStoragePathData","buildUploadStoragePathData","sanitizePrefix"],"mappings":"AAAA,SAASA,yBAAyB,QAAQ,yCAAwC;AAClF,SACEC,oBAAoB,EACpBC,0BAA0B,QACrB,uCAAsC;AAC7C,SAASC,cAAc,QAAQ,iCAAgC"}
@@ -1,7 +1,5 @@
1
- export { buildStoragePathData as getFileKey, buildStoragePathData, buildUploadStoragePathData, isStoragePathWithinCollectionPrefix, } from '../utilities/buildStoragePathData.js';
2
- export { getFilePrefix, getStorageFilePath } from '../utilities/getFilePrefix.js';
3
- export { initClientUploads } from '../utilities/initClientUploads.js';
1
+ export { buildStoragePathData, buildUploadStoragePathData, isStoragePathWithinCollectionPrefix, } from '../utilities/buildStoragePathData.js';
2
+ export { getFilePrefix } from '../utilities/getFilePrefix.js';
4
3
  export { resolveSignedURLKey } from '../utilities/resolveSignedURLKey.js';
5
4
  export { sanitizePrefix } from '../utilities/sanitizePrefix.js';
6
- export { verifyClientUploadReceiptForFileKey } from '../utilities/verifyClientUploadReceiptForFileKey.js';
7
5
  //# sourceMappingURL=utilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/exports/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,IAAI,UAAU,EAClC,oBAAoB,EACpB,0BAA0B,EAC1B,mCAAmC,GACpC,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,mCAAmC,EAAE,MAAM,qDAAqD,CAAA"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/exports/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,mCAAmC,GACpC,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA"}
@@ -1,8 +1,6 @@
1
- export { buildStoragePathData as getFileKey, buildStoragePathData, buildUploadStoragePathData, isStoragePathWithinCollectionPrefix } from '../utilities/buildStoragePathData.js';
2
- export { getFilePrefix, getStorageFilePath } from '../utilities/getFilePrefix.js';
3
- export { initClientUploads } from '../utilities/initClientUploads.js';
1
+ export { buildStoragePathData, buildUploadStoragePathData, isStoragePathWithinCollectionPrefix } from '../utilities/buildStoragePathData.js';
2
+ export { getFilePrefix } from '../utilities/getFilePrefix.js';
4
3
  export { resolveSignedURLKey } from '../utilities/resolveSignedURLKey.js';
5
4
  export { sanitizePrefix } from '../utilities/sanitizePrefix.js';
6
- export { verifyClientUploadReceiptForFileKey } from '../utilities/verifyClientUploadReceiptForFileKey.js';
7
5
 
8
6
  //# sourceMappingURL=utilities.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/utilities.ts"],"sourcesContent":["export {\n buildStoragePathData as getFileKey,\n buildStoragePathData,\n buildUploadStoragePathData,\n isStoragePathWithinCollectionPrefix,\n} from '../utilities/buildStoragePathData.js'\nexport { getFilePrefix, getStorageFilePath } from '../utilities/getFilePrefix.js'\nexport { initClientUploads } from '../utilities/initClientUploads.js'\nexport { resolveSignedURLKey } from '../utilities/resolveSignedURLKey.js'\nexport { sanitizePrefix } from '../utilities/sanitizePrefix.js'\nexport { verifyClientUploadReceiptForFileKey } from '../utilities/verifyClientUploadReceiptForFileKey.js'\n"],"names":["buildStoragePathData","getFileKey","buildUploadStoragePathData","isStoragePathWithinCollectionPrefix","getFilePrefix","getStorageFilePath","initClientUploads","resolveSignedURLKey","sanitizePrefix","verifyClientUploadReceiptForFileKey"],"mappings":"AAAA,SACEA,wBAAwBC,UAAU,EAClCD,oBAAoB,EACpBE,0BAA0B,EAC1BC,mCAAmC,QAC9B,uCAAsC;AAC7C,SAASC,aAAa,EAAEC,kBAAkB,QAAQ,gCAA+B;AACjF,SAASC,iBAAiB,QAAQ,oCAAmC;AACrE,SAASC,mBAAmB,QAAQ,sCAAqC;AACzE,SAASC,cAAc,QAAQ,iCAAgC;AAC/D,SAASC,mCAAmC,QAAQ,sDAAqD"}
1
+ {"version":3,"sources":["../../src/exports/utilities.ts"],"sourcesContent":["export {\n buildStoragePathData,\n buildUploadStoragePathData,\n isStoragePathWithinCollectionPrefix,\n} from '../utilities/buildStoragePathData.js'\nexport { getFilePrefix } from '../utilities/getFilePrefix.js'\nexport { resolveSignedURLKey } from '../utilities/resolveSignedURLKey.js'\nexport { sanitizePrefix } from '../utilities/sanitizePrefix.js'\n"],"names":["buildStoragePathData","buildUploadStoragePathData","isStoragePathWithinCollectionPrefix","getFilePrefix","resolveSignedURLKey","sanitizePrefix"],"mappings":"AAAA,SACEA,oBAAoB,EACpBC,0BAA0B,EAC1BC,mCAAmC,QAC9B,uCAAsC;AAC7C,SAASC,aAAa,QAAQ,gCAA+B;AAC7D,SAASC,mBAAmB,QAAQ,sCAAqC;AACzE,SAASC,cAAc,QAAQ,iCAAgC"}
@@ -2,10 +2,6 @@ import type { CollectionConfig, Field } from 'payload';
2
2
  import type { GeneratedAdapter, GenerateFileURL } from '../types.js';
3
3
  interface Args {
4
4
  adapter?: GeneratedAdapter;
5
- /**
6
- * When true, always insert the prefix field regardless of whether a prefix is configured.
7
- */
8
- alwaysInsertFields?: boolean;
9
5
  collection: CollectionConfig;
10
6
  disablePayloadAccessControl?: true;
11
7
  generateFileURL?: GenerateFileURL;
@@ -16,6 +12,6 @@ interface Args {
16
12
  */
17
13
  useCompositePrefixes?: boolean;
18
14
  }
19
- export declare const getFields: ({ adapter, alwaysInsertFields, collection, disablePayloadAccessControl, generateFileURL, prefix, useCompositePrefixes, }: Args) => Field[];
15
+ export declare const getFields: ({ adapter, collection, disablePayloadAccessControl, generateFileURL, prefix, useCompositePrefixes, }: Args) => Field[];
20
16
  export {};
21
17
  //# sourceMappingURL=getFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/fields/getFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAyB,MAAM,SAAS,CAAA;AAI7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAMpE,UAAU,IAAI;IACZ,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,UAAU,EAAE,gBAAgB,CAAA;IAC5B,2BAA2B,CAAC,EAAE,IAAI,CAAA;IAClC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,eAAO,MAAM,SAAS,6HAQnB,IAAI,KAAG,KAAK,EAyMd,CAAA"}
1
+ {"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/fields/getFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAgD,MAAM,SAAS,CAAA;AAIpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAMpE,UAAU,IAAI;IACZ,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,UAAU,EAAE,gBAAgB,CAAA;IAC5B,2BAA2B,CAAC,EAAE,IAAI,CAAA;IAClC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,eAAO,MAAM,SAAS,yGAOnB,IAAI,KAAG,KAAK,EAgSd,CAAA"}
@@ -2,7 +2,7 @@ import path from 'path';
2
2
  import { getAfterReadHook } from '../hooks/afterRead.js';
3
3
  import { getBeforeChangeHook } from '../hooks/beforeChange.js';
4
4
  import { getNormalizeUploadPrefixFieldHook } from '../hooks/normalizeUploadPrefix.js';
5
- export const getFields = ({ adapter, alwaysInsertFields, collection, disablePayloadAccessControl, generateFileURL, prefix, useCompositePrefixes = false })=>{
5
+ export const getFields = ({ adapter, collection, disablePayloadAccessControl, generateFileURL, prefix, useCompositePrefixes = false })=>{
6
6
  const baseURLField = {
7
7
  name: 'url',
8
8
  type: 'text',
@@ -16,19 +16,38 @@ export const getFields = ({ adapter, alwaysInsertFields, collection, disablePayl
16
16
  name: 'prefix',
17
17
  type: 'text',
18
18
  admin: {
19
+ disabled: {
20
+ bulkEdit: true,
21
+ column: true,
22
+ filter: true,
23
+ groupBy: true
24
+ },
19
25
  hidden: true,
20
26
  readOnly: true
21
27
  }
22
28
  };
23
- // Unique storage object key
29
+ // Server-owned key segment. Field-level `hidden` would remove it before the URL hooks can read it.
24
30
  const baseObjectKeyField = {
25
31
  name: '_objectKey',
26
32
  type: 'text',
27
33
  admin: {
34
+ disabled: {
35
+ bulkEdit: true,
36
+ column: true,
37
+ filter: true,
38
+ groupBy: true
39
+ },
28
40
  hidden: true,
29
41
  readOnly: true
30
42
  }
31
43
  };
44
+ const storedPrefixField = {
45
+ ...basePrefixField,
46
+ admin: {
47
+ ...basePrefixField.admin,
48
+ disabled: true
49
+ }
50
+ };
32
51
  const fields = [
33
52
  ...collection.fields,
34
53
  ...adapter?.fields || []
@@ -77,10 +96,54 @@ export const getFields = ({ adapter, alwaysInsertFields, collection, disablePayl
77
96
  ...existingURLField || {}
78
97
  });
79
98
  }
80
- if (typeof collection.upload === 'object' && collection.upload.imageSizes) {
99
+ let originalField = fields.find((field)=>field.type === 'group' && 'name' in field && field.name === 'original');
100
+ if (adapter && !originalField) {
101
+ originalField = {
102
+ name: 'original',
103
+ type: 'group',
104
+ fields: [
105
+ baseURLField
106
+ ]
107
+ };
108
+ fields.push(originalField);
109
+ }
110
+ const originalURLFieldIndex = originalField?.fields.findIndex((field)=>'name' in field && field.name === 'url');
111
+ if (adapter && originalField && originalURLFieldIndex !== undefined && originalURLFieldIndex >= 0) {
112
+ const originalURLField = originalField.fields[originalURLFieldIndex];
113
+ originalField.fields[originalURLFieldIndex] = {
114
+ ...baseURLField,
115
+ ...originalURLField,
116
+ hooks: {
117
+ afterRead: [
118
+ getAfterReadHook({
119
+ adapter,
120
+ collection,
121
+ disablePayloadAccessControl,
122
+ generateFileURL,
123
+ isOriginal: true
124
+ }),
125
+ ...originalURLField.hooks?.afterRead || []
126
+ ],
127
+ beforeChange: [
128
+ getBeforeChangeHook({
129
+ adapter,
130
+ collection,
131
+ disablePayloadAccessControl,
132
+ generateFileURL,
133
+ isOriginal: true
134
+ }),
135
+ ...originalURLField.hooks?.beforeChange || []
136
+ ]
137
+ }
138
+ };
139
+ }
140
+ // Storage adapters add these fields during their `init`, after transformers (e.g. Sharp) have
141
+ // written each collection's image sizes onto its upload config.
142
+ const variants = typeof collection.upload === 'object' ? collection.upload.variants : undefined;
143
+ if (variants) {
81
144
  let existingSizesFieldIndex = -1;
82
145
  const existingSizesField = fields.find((existingField, i)=>{
83
- if ('name' in existingField && existingField.name === 'sizes') {
146
+ if ('name' in existingField && existingField.name === 'variants') {
84
147
  existingSizesFieldIndex = i;
85
148
  return true;
86
149
  }
@@ -91,12 +154,12 @@ export const getFields = ({ adapter, alwaysInsertFields, collection, disablePayl
91
154
  }
92
155
  const sizesField = {
93
156
  ...existingSizesField || {},
94
- name: 'sizes',
157
+ name: 'variants',
95
158
  type: 'group',
96
159
  admin: {
97
160
  hidden: true
98
161
  },
99
- fields: collection.upload.imageSizes.map((size)=>{
162
+ fields: variants.map((size)=>{
100
163
  const existingSizeField = existingSizesField?.fields.find((existingField)=>'name' in existingField && existingField.name === size.name);
101
164
  const existingSizeURLField = existingSizeField?.fields.find((existingField)=>'name' in existingField && existingField.name === 'url');
102
165
  // Only add afterRead hook if adapter is provided
@@ -134,43 +197,47 @@ export const getFields = ({ adapter, alwaysInsertFields, collection, disablePayl
134
197
  name: size.name,
135
198
  type: 'group',
136
199
  fields: [
137
- ...adapter?.fields || [],
138
- sizeURLField
200
+ ...(adapter?.fields || []).filter((field)=>!('name' in field && [
201
+ '_objectKey',
202
+ 'prefix'
203
+ ].includes(field.name))),
204
+ sizeURLField,
205
+ storedPrefixField,
206
+ baseObjectKeyField
139
207
  ]
140
208
  };
141
209
  })
142
210
  };
143
211
  fields.push(sizesField);
144
212
  }
145
- // If prefix is enabled or alwaysInsertFields is true, save it to db
146
- if (typeof prefix !== 'undefined' || alwaysInsertFields) {
147
- let existingPrefixFieldIndex = -1;
148
- const existingPrefixField = fields.find((existingField, i)=>{
149
- if ('name' in existingField && existingField.name === 'prefix') {
150
- existingPrefixFieldIndex = i;
151
- return true;
152
- }
153
- return false;
154
- });
155
- if (existingPrefixFieldIndex > -1) {
156
- fields.splice(existingPrefixFieldIndex, 1);
213
+ // Always insert the prefix field so the schema stays consistent regardless of
214
+ // whether the plugin is enabled or a prefix is configured.
215
+ let existingPrefixFieldIndex = -1;
216
+ const existingPrefixField = fields.find((existingField, i)=>{
217
+ if ('name' in existingField && existingField.name === 'prefix') {
218
+ existingPrefixFieldIndex = i;
219
+ return true;
157
220
  }
158
- fields.push({
159
- ...basePrefixField,
160
- ...existingPrefixField || {},
161
- defaultValue: existingPrefixField?.defaultValue ?? (useCompositePrefixes ? '' : prefix ? path.posix.join(prefix) : ''),
162
- hooks: {
163
- ...existingPrefixField?.hooks,
164
- beforeChange: [
165
- ...existingPrefixField?.hooks?.beforeChange || [],
166
- getNormalizeUploadPrefixFieldHook({
167
- collectionPrefix: prefix,
168
- useCompositePrefixes
169
- })
170
- ]
171
- }
172
- });
221
+ return false;
222
+ });
223
+ if (existingPrefixFieldIndex > -1) {
224
+ fields.splice(existingPrefixFieldIndex, 1);
173
225
  }
226
+ fields.push({
227
+ ...basePrefixField,
228
+ ...existingPrefixField || {},
229
+ defaultValue: existingPrefixField?.defaultValue ?? (useCompositePrefixes ? '' : prefix ? path.posix.join(prefix) : ''),
230
+ hooks: {
231
+ ...existingPrefixField?.hooks,
232
+ beforeChange: [
233
+ ...existingPrefixField?.hooks?.beforeChange || [],
234
+ getNormalizeUploadPrefixFieldHook({
235
+ collectionPrefix: prefix,
236
+ useCompositePrefixes
237
+ })
238
+ ]
239
+ }
240
+ });
174
241
  const existingObjectKeyFieldIndex = fields.findIndex((existingField)=>'name' in existingField && existingField.name === '_objectKey');
175
242
  if (existingObjectKeyFieldIndex > -1) {
176
243
  fields.splice(existingObjectKeyFieldIndex, 1);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/getFields.ts"],"sourcesContent":["import type { CollectionConfig, Field, GroupField, TextField } from 'payload'\n\nimport path from 'path'\n\nimport type { GeneratedAdapter, GenerateFileURL } from '../types.js'\n\nimport { getAfterReadHook } from '../hooks/afterRead.js'\nimport { getBeforeChangeHook } from '../hooks/beforeChange.js'\nimport { getNormalizeUploadPrefixFieldHook } from '../hooks/normalizeUploadPrefix.js'\n\ninterface Args {\n adapter?: GeneratedAdapter\n /**\n * When true, always insert the prefix field regardless of whether a prefix is configured.\n */\n alwaysInsertFields?: boolean\n collection: CollectionConfig\n disablePayloadAccessControl?: true\n generateFileURL?: GenerateFileURL\n prefix?: string\n /**\n * When true, do not default the `prefix` field to the collection prefix; the\n * document field holds only the document-level segment.\n */\n useCompositePrefixes?: boolean\n}\n\nexport const getFields = ({\n adapter,\n alwaysInsertFields,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n prefix,\n useCompositePrefixes = false,\n}: Args): Field[] => {\n const baseURLField: TextField = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n const basePrefixField: TextField = {\n name: 'prefix',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n }\n\n // Unique storage object key\n const baseObjectKeyField: TextField = {\n name: '_objectKey',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n }\n\n const fields = [...collection.fields, ...(adapter?.fields || [])]\n\n // Inject a hook into all URL fields to generate URLs\n\n let existingURLFieldIndex = -1\n\n const existingURLField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'url') {\n existingURLFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingURLFieldIndex > -1) {\n fields.splice(existingURLFieldIndex, 1)\n }\n\n // Only add afterRead hook if adapter is provided\n if (adapter) {\n fields.push({\n ...baseURLField,\n ...(existingURLField || {}),\n hooks: {\n afterRead: [\n getAfterReadHook({ adapter, collection, disablePayloadAccessControl, generateFileURL }),\n ...(existingURLField?.hooks?.afterRead || []),\n ],\n beforeChange: [\n getBeforeChangeHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n }),\n ...(existingURLField?.hooks?.beforeChange || []),\n ],\n },\n } as TextField)\n } else {\n fields.push({\n ...baseURLField,\n ...(existingURLField || {}),\n } as TextField)\n }\n\n if (typeof collection.upload === 'object' && collection.upload.imageSizes) {\n let existingSizesFieldIndex = -1\n\n const existingSizesField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'sizes') {\n existingSizesFieldIndex = i\n return true\n }\n\n return false\n }) as GroupField\n\n if (existingSizesFieldIndex > -1) {\n fields.splice(existingSizesFieldIndex, 1)\n }\n\n const sizesField: Field = {\n ...(existingSizesField || {}),\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: collection.upload.imageSizes.map((size) => {\n const existingSizeField = existingSizesField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === size.name,\n ) as GroupField\n\n const existingSizeURLField = existingSizeField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === 'url',\n ) as TextField\n\n // Only add afterRead hook if adapter is provided\n const sizeURLField: TextField = adapter\n ? ({\n ...(existingSizeURLField || {}),\n ...baseURLField,\n hooks: {\n afterRead: [\n getAfterReadHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n size,\n }),\n ...((typeof existingSizeURLField === 'object' &&\n 'hooks' in existingSizeURLField &&\n existingSizeURLField?.hooks?.afterRead) ||\n []),\n ],\n beforeChange: [\n getBeforeChangeHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n size,\n }),\n ...((typeof existingSizeURLField === 'object' &&\n 'hooks' in existingSizeURLField &&\n existingSizeURLField?.hooks?.beforeChange) ||\n []),\n ],\n },\n } as TextField)\n : ({\n ...(existingSizeURLField || {}),\n ...baseURLField,\n } as TextField)\n\n return {\n ...existingSizeField,\n name: size.name,\n type: 'group',\n fields: [...(adapter?.fields || []), sizeURLField],\n } as Field\n }),\n }\n\n fields.push(sizesField)\n }\n\n // If prefix is enabled or alwaysInsertFields is true, save it to db\n if (typeof prefix !== 'undefined' || alwaysInsertFields) {\n let existingPrefixFieldIndex = -1\n\n const existingPrefixField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'prefix') {\n existingPrefixFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingPrefixFieldIndex > -1) {\n fields.splice(existingPrefixFieldIndex, 1)\n }\n\n fields.push({\n ...basePrefixField,\n ...(existingPrefixField || {}),\n defaultValue:\n existingPrefixField?.defaultValue ??\n (useCompositePrefixes ? '' : prefix ? path.posix.join(prefix) : ''),\n hooks: {\n ...existingPrefixField?.hooks,\n beforeChange: [\n ...(existingPrefixField?.hooks?.beforeChange || []),\n getNormalizeUploadPrefixFieldHook({ collectionPrefix: prefix, useCompositePrefixes }),\n ],\n },\n } as TextField)\n }\n\n const existingObjectKeyFieldIndex = fields.findIndex(\n (existingField) => 'name' in existingField && existingField.name === '_objectKey',\n )\n if (existingObjectKeyFieldIndex > -1) {\n fields.splice(existingObjectKeyFieldIndex, 1)\n }\n\n fields.push({ ...baseObjectKeyField } as TextField)\n\n return fields\n}\n"],"names":["path","getAfterReadHook","getBeforeChangeHook","getNormalizeUploadPrefixFieldHook","getFields","adapter","alwaysInsertFields","collection","disablePayloadAccessControl","generateFileURL","prefix","useCompositePrefixes","baseURLField","name","type","admin","hidden","readOnly","label","basePrefixField","baseObjectKeyField","fields","existingURLFieldIndex","existingURLField","find","existingField","i","splice","push","hooks","afterRead","beforeChange","upload","imageSizes","existingSizesFieldIndex","existingSizesField","sizesField","map","size","existingSizeField","existingSizeURLField","sizeURLField","existingPrefixFieldIndex","existingPrefixField","defaultValue","posix","join","collectionPrefix","existingObjectKeyFieldIndex","findIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/fields/getFields.ts"],"sourcesContent":["import type { CollectionConfig, Field, GroupField, SanitizedUploadConfig, TextField } from 'payload'\n\nimport path from 'path'\n\nimport type { GeneratedAdapter, GenerateFileURL } from '../types.js'\n\nimport { getAfterReadHook } from '../hooks/afterRead.js'\nimport { getBeforeChangeHook } from '../hooks/beforeChange.js'\nimport { getNormalizeUploadPrefixFieldHook } from '../hooks/normalizeUploadPrefix.js'\n\ninterface Args {\n adapter?: GeneratedAdapter\n collection: CollectionConfig\n disablePayloadAccessControl?: true\n generateFileURL?: GenerateFileURL\n prefix?: string\n /**\n * When true, do not default the `prefix` field to the collection prefix; the\n * document field holds only the document-level segment.\n */\n useCompositePrefixes?: boolean\n}\n\nexport const getFields = ({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n prefix,\n useCompositePrefixes = false,\n}: Args): Field[] => {\n const baseURLField: TextField = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n const basePrefixField: TextField = {\n name: 'prefix',\n type: 'text',\n admin: {\n disabled: {\n bulkEdit: true,\n column: true,\n filter: true,\n groupBy: true,\n },\n hidden: true,\n readOnly: true,\n },\n }\n\n // Server-owned key segment. Field-level `hidden` would remove it before the URL hooks can read it.\n const baseObjectKeyField: TextField = {\n name: '_objectKey',\n type: 'text',\n admin: {\n disabled: {\n bulkEdit: true,\n column: true,\n filter: true,\n groupBy: true,\n },\n hidden: true,\n readOnly: true,\n },\n }\n\n const storedPrefixField: TextField = {\n ...basePrefixField,\n admin: {\n ...basePrefixField.admin,\n disabled: true,\n },\n }\n\n const fields = [...collection.fields, ...(adapter?.fields || [])]\n\n // Inject a hook into all URL fields to generate URLs\n\n let existingURLFieldIndex = -1\n\n const existingURLField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'url') {\n existingURLFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingURLFieldIndex > -1) {\n fields.splice(existingURLFieldIndex, 1)\n }\n\n // Only add afterRead hook if adapter is provided\n if (adapter) {\n fields.push({\n ...baseURLField,\n ...(existingURLField || {}),\n hooks: {\n afterRead: [\n getAfterReadHook({ adapter, collection, disablePayloadAccessControl, generateFileURL }),\n ...(existingURLField?.hooks?.afterRead || []),\n ],\n beforeChange: [\n getBeforeChangeHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n }),\n ...(existingURLField?.hooks?.beforeChange || []),\n ],\n },\n } as TextField)\n } else {\n fields.push({\n ...baseURLField,\n ...(existingURLField || {}),\n } as TextField)\n }\n\n let originalField = fields.find(\n (field): field is GroupField =>\n field.type === 'group' && 'name' in field && field.name === 'original',\n )\n\n if (adapter && !originalField) {\n originalField = {\n name: 'original',\n type: 'group',\n fields: [baseURLField],\n }\n fields.push(originalField)\n }\n\n const originalURLFieldIndex = originalField?.fields.findIndex(\n (field) => 'name' in field && field.name === 'url',\n )\n\n if (\n adapter &&\n originalField &&\n originalURLFieldIndex !== undefined &&\n originalURLFieldIndex >= 0\n ) {\n const originalURLField = originalField.fields[originalURLFieldIndex] as TextField\n\n originalField.fields[originalURLFieldIndex] = {\n ...baseURLField,\n ...originalURLField,\n hooks: {\n afterRead: [\n getAfterReadHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n isOriginal: true,\n }),\n ...(originalURLField.hooks?.afterRead || []),\n ],\n beforeChange: [\n getBeforeChangeHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n isOriginal: true,\n }),\n ...(originalURLField.hooks?.beforeChange || []),\n ],\n },\n } as TextField\n }\n\n // Storage adapters add these fields during their `init`, after transformers (e.g. Sharp) have\n // written each collection's image sizes onto its upload config.\n const variants =\n typeof collection.upload === 'object'\n ? (collection.upload as SanitizedUploadConfig).variants\n : undefined\n\n if (variants) {\n let existingSizesFieldIndex = -1\n\n const existingSizesField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'variants') {\n existingSizesFieldIndex = i\n return true\n }\n\n return false\n }) as GroupField\n\n if (existingSizesFieldIndex > -1) {\n fields.splice(existingSizesFieldIndex, 1)\n }\n\n const sizesField: Field = {\n ...(existingSizesField || {}),\n name: 'variants',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: variants.map((size) => {\n const existingSizeField = existingSizesField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === size.name,\n ) as GroupField\n\n const existingSizeURLField = existingSizeField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === 'url',\n ) as TextField\n\n // Only add afterRead hook if adapter is provided\n const sizeURLField: TextField = adapter\n ? ({\n ...(existingSizeURLField || {}),\n ...baseURLField,\n hooks: {\n afterRead: [\n getAfterReadHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n size,\n }),\n ...((typeof existingSizeURLField === 'object' &&\n 'hooks' in existingSizeURLField &&\n existingSizeURLField?.hooks?.afterRead) ||\n []),\n ],\n beforeChange: [\n getBeforeChangeHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n size,\n }),\n ...((typeof existingSizeURLField === 'object' &&\n 'hooks' in existingSizeURLField &&\n existingSizeURLField?.hooks?.beforeChange) ||\n []),\n ],\n },\n } as TextField)\n : ({\n ...(existingSizeURLField || {}),\n ...baseURLField,\n } as TextField)\n\n return {\n ...existingSizeField,\n name: size.name,\n type: 'group',\n fields: [\n ...(adapter?.fields || []).filter(\n (field) => !('name' in field && ['_objectKey', 'prefix'].includes(field.name)),\n ),\n sizeURLField,\n storedPrefixField,\n baseObjectKeyField,\n ],\n } as Field\n }),\n }\n\n fields.push(sizesField)\n }\n\n // Always insert the prefix field so the schema stays consistent regardless of\n // whether the plugin is enabled or a prefix is configured.\n let existingPrefixFieldIndex = -1\n\n const existingPrefixField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'prefix') {\n existingPrefixFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingPrefixFieldIndex > -1) {\n fields.splice(existingPrefixFieldIndex, 1)\n }\n\n fields.push({\n ...basePrefixField,\n ...(existingPrefixField || {}),\n defaultValue:\n existingPrefixField?.defaultValue ??\n (useCompositePrefixes ? '' : prefix ? path.posix.join(prefix) : ''),\n hooks: {\n ...existingPrefixField?.hooks,\n beforeChange: [\n ...(existingPrefixField?.hooks?.beforeChange || []),\n getNormalizeUploadPrefixFieldHook({ collectionPrefix: prefix, useCompositePrefixes }),\n ],\n },\n } as TextField)\n\n const existingObjectKeyFieldIndex = fields.findIndex(\n (existingField) => 'name' in existingField && existingField.name === '_objectKey',\n )\n if (existingObjectKeyFieldIndex > -1) {\n fields.splice(existingObjectKeyFieldIndex, 1)\n }\n\n fields.push({ ...baseObjectKeyField } as TextField)\n\n return fields\n}\n"],"names":["path","getAfterReadHook","getBeforeChangeHook","getNormalizeUploadPrefixFieldHook","getFields","adapter","collection","disablePayloadAccessControl","generateFileURL","prefix","useCompositePrefixes","baseURLField","name","type","admin","hidden","readOnly","label","basePrefixField","disabled","bulkEdit","column","filter","groupBy","baseObjectKeyField","storedPrefixField","fields","existingURLFieldIndex","existingURLField","find","existingField","i","splice","push","hooks","afterRead","beforeChange","originalField","field","originalURLFieldIndex","findIndex","undefined","originalURLField","isOriginal","variants","upload","existingSizesFieldIndex","existingSizesField","sizesField","map","size","existingSizeField","existingSizeURLField","sizeURLField","includes","existingPrefixFieldIndex","existingPrefixField","defaultValue","posix","join","collectionPrefix","existingObjectKeyFieldIndex"],"mappings":"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"}
@@ -4,8 +4,10 @@ interface Args {
4
4
  adapter: GeneratedAdapter;
5
5
  collection: CollectionConfig;
6
6
  collectionPrefix?: string;
7
+ disablePayloadAccessControl?: boolean;
8
+ hasCustomFileURL?: boolean;
7
9
  useCompositePrefixes?: boolean;
8
10
  }
9
- export declare const getAfterChangeHook: ({ adapter, collection, collectionPrefix, useCompositePrefixes, }: Args) => CollectionAfterChangeHook<FileData & TypeWithID>;
11
+ export declare const getAfterChangeHook: ({ adapter, collection, collectionPrefix, disablePayloadAccessControl, hasCustomFileURL, useCompositePrefixes, }: Args) => CollectionAfterChangeHook<FileData & TypeWithID>;
10
12
  export {};
11
13
  //# sourceMappingURL=afterChange.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"afterChange.d.ts","sourceRoot":"","sources":["../../src/hooks/afterChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEhG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AASnD,UAAU,IAAI;IACZ,OAAO,EAAE,gBAAgB,CAAA;IACzB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAQD,eAAO,MAAM,kBAAkB,qEAM1B,IAAI,KAAG,yBAAyB,CAAC,QAAQ,GAAG,UAAU,CA8KxD,CAAA"}
1
+ {"version":3,"file":"afterChange.d.ts","sourceRoot":"","sources":["../../src/hooks/afterChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIhG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAUnD,UAAU,IAAI;IACZ,OAAO,EAAE,gBAAgB,CAAA;IACzB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAQD,eAAO,MAAM,kBAAkB,oHAQ1B,IAAI,KAAG,yBAAyB,CAAC,QAAQ,GAAG,UAAU,CA2OxD,CAAA"}