payload 3.0.0-beta.10 → 3.0.0-beta.11

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 (36) hide show
  1. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  2. package/dist/auth/getFieldsToSign.js.map +1 -1
  3. package/dist/collections/config/client.d.ts.map +1 -1
  4. package/dist/collections/config/client.js +1 -0
  5. package/dist/collections/config/client.js.map +1 -1
  6. package/dist/collections/config/schema.d.ts.map +1 -1
  7. package/dist/collections/config/schema.js +1 -0
  8. package/dist/collections/config/schema.js.map +1 -1
  9. package/dist/exports/auth.d.ts +1 -0
  10. package/dist/exports/auth.d.ts.map +1 -1
  11. package/dist/exports/auth.js +1 -0
  12. package/dist/exports/auth.js.map +1 -1
  13. package/dist/uploads/generateFileData.d.ts.map +1 -1
  14. package/dist/uploads/generateFileData.js +3 -2
  15. package/dist/uploads/generateFileData.js.map +1 -1
  16. package/dist/uploads/getExternalFile.d.ts +3 -2
  17. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  18. package/dist/uploads/getExternalFile.js +5 -4
  19. package/dist/uploads/getExternalFile.js.map +1 -1
  20. package/dist/uploads/getImageSize.d.ts +1 -1
  21. package/dist/uploads/getImageSize.d.ts.map +1 -1
  22. package/dist/uploads/getImageSize.js +19 -5
  23. package/dist/uploads/getImageSize.js.map +1 -1
  24. package/dist/uploads/tempFile.d.ts +7 -0
  25. package/dist/uploads/tempFile.d.ts.map +1 -0
  26. package/dist/uploads/tempFile.js +39 -0
  27. package/dist/uploads/tempFile.js.map +1 -0
  28. package/dist/uploads/types.d.ts +6 -0
  29. package/dist/uploads/types.d.ts.map +1 -1
  30. package/dist/uploads/types.js.map +1 -1
  31. package/dist/utilities/isEntityHidden.d.ts +1 -1
  32. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  33. package/dist/utilities/isEntityHidden.js.map +1 -1
  34. package/dist/versions/saveVersion.js +1 -1
  35. package/dist/versions/saveVersion.js.map +1 -1
  36. package/package.json +12 -3
@@ -1 +1 @@
1
- {"version":3,"file":"getFieldsToSign.d.ts","sourceRoot":"","sources":["../../src/auth/getFieldsToSign.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAsGvD,eAAO,MAAM,eAAe,SAAU;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,OAAO,MAAM,EAAE,OAAO,CAgBzB,CAAA"}
1
+ {"version":3,"file":"getFieldsToSign.d.ts","sourceRoot":"","sources":["../../src/auth/getFieldsToSign.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAqGvD,eAAO,MAAM,eAAe,SAAU;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,OAAO,MAAM,EAAE,OAAO,CAgBzB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/getFieldsToSign.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { CollectionConfig } from '../collections/config/types.js'\nimport type { Field, TabAsField } from '../fields/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { User } from './index.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\n\ntype TraverseFieldsArgs = {\n data: Record<string, unknown>\n fields: (Field | TabAsField)[]\n result: Record<string, unknown>\n}\nconst traverseFields = ({\n data,\n // parent,\n fields,\n result,\n}: TraverseFieldsArgs) => {\n fields.forEach((field) => {\n switch (field.type) {\n case 'row':\n case 'collapsible': {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n break\n }\n case 'group': {\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = data[field.name]\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = data[field.name]\n }\n const groupData: Record<string, unknown> = data[field.name] as Record<string, unknown>\n const groupResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: groupData,\n fields: field.fields,\n result: groupResult,\n })\n break\n }\n case 'tabs': {\n traverseFields({\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n result,\n })\n break\n }\n case 'tab': {\n if (tabHasName(field)) {\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = data[field.name]\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = data[field.name]\n }\n const tabData: Record<string, unknown> = data[field.name] as Record<string, unknown>\n const tabResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: tabData,\n fields: field.fields,\n result: tabResult,\n })\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n }\n break\n }\n default:\n if (fieldAffectsData(field)) {\n if (field.saveToJWT) {\n if (typeof field.saveToJWT === 'string') {\n result[field.saveToJWT] = data[field.name]\n delete result[field.name]\n } else {\n result[field.name] = data[field.name] as Record<string, unknown>\n }\n } else if (field.saveToJWT === false) {\n delete result[field.name]\n }\n }\n }\n })\n return result\n}\nexport const getFieldsToSign = (args: {\n collectionConfig: CollectionConfig\n email: string\n user: PayloadRequest['user']\n}): Record<string, unknown> => {\n const { collectionConfig, email, user } = args\n\n const result: Record<string, unknown> = {\n id: user.id,\n collection: collectionConfig.slug,\n email,\n }\n\n traverseFields({\n data: user,\n fields: collectionConfig.fields,\n result,\n })\n\n return result\n}\n"],"names":["fieldAffectsData","tabHasName","traverseFields","data","fields","result","forEach","field","type","targetResult","saveToJWT","name","groupData","groupResult","tabs","map","tab","tabData","tabResult","getFieldsToSign","args","collectionConfig","email","user","id","collection","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/auth/getFieldsToSign.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { CollectionConfig } from '../collections/config/types.js'\nimport type { Field, TabAsField } from '../fields/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\n\ntype TraverseFieldsArgs = {\n data: Record<string, unknown>\n fields: (Field | TabAsField)[]\n result: Record<string, unknown>\n}\nconst traverseFields = ({\n data,\n // parent,\n fields,\n result,\n}: TraverseFieldsArgs) => {\n fields.forEach((field) => {\n switch (field.type) {\n case 'row':\n case 'collapsible': {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n break\n }\n case 'group': {\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = data[field.name]\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = data[field.name]\n }\n const groupData: Record<string, unknown> = data[field.name] as Record<string, unknown>\n const groupResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: groupData,\n fields: field.fields,\n result: groupResult,\n })\n break\n }\n case 'tabs': {\n traverseFields({\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n result,\n })\n break\n }\n case 'tab': {\n if (tabHasName(field)) {\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = data[field.name]\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = data[field.name]\n }\n const tabData: Record<string, unknown> = data[field.name] as Record<string, unknown>\n const tabResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: tabData,\n fields: field.fields,\n result: tabResult,\n })\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n }\n break\n }\n default:\n if (fieldAffectsData(field)) {\n if (field.saveToJWT) {\n if (typeof field.saveToJWT === 'string') {\n result[field.saveToJWT] = data[field.name]\n delete result[field.name]\n } else {\n result[field.name] = data[field.name] as Record<string, unknown>\n }\n } else if (field.saveToJWT === false) {\n delete result[field.name]\n }\n }\n }\n })\n return result\n}\nexport const getFieldsToSign = (args: {\n collectionConfig: CollectionConfig\n email: string\n user: PayloadRequest['user']\n}): Record<string, unknown> => {\n const { collectionConfig, email, user } = args\n\n const result: Record<string, unknown> = {\n id: user.id,\n collection: collectionConfig.slug,\n email,\n }\n\n traverseFields({\n data: user,\n fields: collectionConfig.fields,\n result,\n })\n\n return result\n}\n"],"names":["fieldAffectsData","tabHasName","traverseFields","data","fields","result","forEach","field","type","targetResult","saveToJWT","name","groupData","groupResult","tabs","map","tab","tabData","tabResult","getFieldsToSign","args","collectionConfig","email","user","id","collection","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,oCAAoC,GAKpC,SAASA,gBAAgB,EAAEC,UAAU,QAAQ,4BAA2B;AAOxE,MAAMC,iBAAiB,CAAC,EACtBC,IAAI,EACJ,UAAU;AACVC,MAAM,EACNC,MAAM,EACa;IACnBD,OAAOE,OAAO,CAAC,CAACC;QACd,OAAQA,MAAMC,IAAI;YAChB,KAAK;YACL,KAAK;gBAAe;oBAClBN,eAAe;wBACbC;wBACAC,QAAQG,MAAMH,MAAM;wBACpBC;oBACF;oBACA;gBACF;YACA,KAAK;gBAAS;oBACZ,IAAII;oBACJ,IAAI,OAAOF,MAAMG,SAAS,KAAK,UAAU;wBACvCD,eAAeF,MAAMG,SAAS;wBAC9BL,MAAM,CAACE,MAAMG,SAAS,CAAC,GAAGP,IAAI,CAACI,MAAMI,IAAI,CAAC;oBAC5C,OAAO,IAAIJ,MAAMG,SAAS,EAAE;wBAC1BD,eAAeF,MAAMI,IAAI;wBACzBN,MAAM,CAACE,MAAMI,IAAI,CAAC,GAAGR,IAAI,CAACI,MAAMI,IAAI,CAAC;oBACvC;oBACA,MAAMC,YAAqCT,IAAI,CAACI,MAAMI,IAAI,CAAC;oBAC3D,MAAME,cAAeJ,eAAeJ,MAAM,CAACI,aAAa,GAAGJ;oBAI3DH,eAAe;wBACbC,MAAMS;wBACNR,QAAQG,MAAMH,MAAM;wBACpBC,QAAQQ;oBACV;oBACA;gBACF;YACA,KAAK;gBAAQ;oBACXX,eAAe;wBACbC;wBACAC,QAAQG,MAAMO,IAAI,CAACC,GAAG,CAAC,CAACC,MAAS,CAAA;gCAAE,GAAGA,GAAG;gCAAER,MAAM;4BAAM,CAAA;wBACvDH;oBACF;oBACA;gBACF;YACA,KAAK;gBAAO;oBACV,IAAIJ,WAAWM,QAAQ;wBACrB,IAAIE;wBACJ,IAAI,OAAOF,MAAMG,SAAS,KAAK,UAAU;4BACvCD,eAAeF,MAAMG,SAAS;4BAC9BL,MAAM,CAACE,MAAMG,SAAS,CAAC,GAAGP,IAAI,CAACI,MAAMI,IAAI,CAAC;wBAC5C,OAAO,IAAIJ,MAAMG,SAAS,EAAE;4BAC1BD,eAAeF,MAAMI,IAAI;4BACzBN,MAAM,CAACE,MAAMI,IAAI,CAAC,GAAGR,IAAI,CAACI,MAAMI,IAAI,CAAC;wBACvC;wBACA,MAAMM,UAAmCd,IAAI,CAACI,MAAMI,IAAI,CAAC;wBACzD,MAAMO,YAAaT,eAAeJ,MAAM,CAACI,aAAa,GAAGJ;wBAIzDH,eAAe;4BACbC,MAAMc;4BACNb,QAAQG,MAAMH,MAAM;4BACpBC,QAAQa;wBACV;oBACF,OAAO;wBACLhB,eAAe;4BACbC;4BACAC,QAAQG,MAAMH,MAAM;4BACpBC;wBACF;oBACF;oBACA;gBACF;YACA;gBACE,IAAIL,iBAAiBO,QAAQ;oBAC3B,IAAIA,MAAMG,SAAS,EAAE;wBACnB,IAAI,OAAOH,MAAMG,SAAS,KAAK,UAAU;4BACvCL,MAAM,CAACE,MAAMG,SAAS,CAAC,GAAGP,IAAI,CAACI,MAAMI,IAAI,CAAC;4BAC1C,OAAON,MAAM,CAACE,MAAMI,IAAI,CAAC;wBAC3B,OAAO;4BACLN,MAAM,CAACE,MAAMI,IAAI,CAAC,GAAGR,IAAI,CAACI,MAAMI,IAAI,CAAC;wBACvC;oBACF,OAAO,IAAIJ,MAAMG,SAAS,KAAK,OAAO;wBACpC,OAAOL,MAAM,CAACE,MAAMI,IAAI,CAAC;oBAC3B;gBACF;QACJ;IACF;IACA,OAAON;AACT;AACA,OAAO,MAAMc,kBAAkB,CAACC;IAK9B,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGH;IAE1C,MAAMf,SAAkC;QACtCmB,IAAID,KAAKC,EAAE;QACXC,YAAYJ,iBAAiBK,IAAI;QACjCJ;IACF;IAEApB,eAAe;QACbC,MAAMoB;QACNnB,QAAQiB,iBAAiBjB,MAAM;QAC/BC;IACF;IAEA,OAAOA;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/collections/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AAE/F,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,yBAAyB,EACzB,QAAQ,GAAG,WAAW,GAAG,OAAO,CACjC,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,MAAM,IAAI,CAC1D,yBAAyB,CAAC,OAAO,CAAC,EAClC,YAAY,GAAG,QAAQ,GAAG,SAAS,CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,yBAAyB,EACzB,OAAO,GAAG,QAAQ,GAAG,8BAA8B,CACpD,GAAG;IACF,KAAK,EAAE,IAAI,CACT,yBAAyB,CAAC,OAAO,CAAC,EAClC,QAAQ,GAAG,aAAa,GAAG,mCAAmC,CAC/D,GAAG;QACF,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;KACvE,CAAA;IACD,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAC5B,CAAA;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAI3D,eAAO,MAAM,4BAA4B,uBAGtC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,CAAC,EAAE,SAAS,CAAA;CACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DA,CAAA;AAED,eAAO,MAAM,6BAA6B,wBAGvC;IACD,WAAW,EAAE,yBAAyB,EAAE,CAAA;IACxC,CAAC,EAAE,SAAS,CAAA;CACb,KAAG,sBAAsB,EACwD,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/collections/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AAE/F,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,yBAAyB,EACzB,QAAQ,GAAG,WAAW,GAAG,OAAO,CACjC,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,MAAM,IAAI,CAC1D,yBAAyB,CAAC,OAAO,CAAC,EAClC,YAAY,GAAG,QAAQ,GAAG,SAAS,CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,yBAAyB,EACzB,OAAO,GAAG,QAAQ,GAAG,8BAA8B,CACpD,GAAG;IACF,KAAK,EAAE,IAAI,CACT,yBAAyB,CAAC,OAAO,CAAC,EAClC,QAAQ,GAAG,aAAa,GAAG,mCAAmC,CAC/D,GAAG;QACF,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;KACvE,CAAA;IACD,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAC5B,CAAA;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAI3D,eAAO,MAAM,4BAA4B,uBAGtC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,CAAC,EAAE,SAAS,CAAA;CACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEA,CAAA;AAED,eAAO,MAAM,6BAA6B,wBAGvC;IACD,WAAW,EAAE,yBAAyB,EAAE,CAAA;IACxC,CAAC,EAAE,SAAS,CAAA;CACb,KAAG,sBAAsB,EACwD,CAAA"}
@@ -23,6 +23,7 @@ export const createClientCollectionConfig = ({ collection, t })=>{
23
23
  };
24
24
  delete sanitized.upload.handlers;
25
25
  delete sanitized.upload.adminThumbnail;
26
+ delete sanitized.upload.externalFileHeaderFilter;
26
27
  }
27
28
  if ('auth' in sanitized && typeof sanitized.auth === 'object') {
28
29
  sanitized.auth = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/config/client.ts"],"sourcesContent":["import type { LivePreviewConfig, ServerOnlyLivePreviewProperties } from '../../config/types.js'\n\nexport type ServerOnlyCollectionProperties = keyof Pick<\n SanitizedCollectionConfig,\n 'access' | 'endpoints' | 'hooks'\n>\n\nexport type ServerOnlyCollectionAdminProperties = keyof Pick<\n SanitizedCollectionConfig['admin'],\n 'components' | 'hidden' | 'preview'\n>\n\nexport type ClientCollectionConfig = Omit<\n SanitizedCollectionConfig,\n 'admin' | 'fields' | ServerOnlyCollectionProperties\n> & {\n admin: Omit<\n SanitizedCollectionConfig['admin'],\n 'fields' | 'livePreview' | ServerOnlyCollectionAdminProperties\n > & {\n livePreview?: Omit<LivePreviewConfig, ServerOnlyLivePreviewProperties>\n }\n fields: ClientFieldConfig[]\n}\n\nimport type { TFunction } from '@payloadcms/translations'\n\nimport type { ClientFieldConfig } from '../../fields/config/client.js'\nimport type { SanitizedCollectionConfig } from './types.js'\n\nimport { createClientFieldConfigs } from '../../fields/config/client.js'\n\nexport const createClientCollectionConfig = ({\n collection,\n t,\n}: {\n collection: SanitizedCollectionConfig\n t: TFunction\n}) => {\n const sanitized = { ...collection }\n sanitized.fields = createClientFieldConfigs({ fields: sanitized.fields, t })\n\n const serverOnlyCollectionProperties: Partial<ServerOnlyCollectionProperties>[] = [\n 'hooks',\n 'access',\n 'endpoints',\n // `upload`\n // `admin`\n // are all handled separately\n ]\n\n serverOnlyCollectionProperties.forEach((key) => {\n if (key in sanitized) {\n delete sanitized[key]\n }\n })\n\n if ('upload' in sanitized && typeof sanitized.upload === 'object') {\n sanitized.upload = { ...sanitized.upload }\n delete sanitized.upload.handlers\n delete sanitized.upload.adminThumbnail\n }\n\n if ('auth' in sanitized && typeof sanitized.auth === 'object') {\n sanitized.auth = { ...sanitized.auth }\n delete sanitized.auth.strategies\n delete sanitized.auth.forgotPassword\n delete sanitized.auth.verify\n }\n\n if (sanitized.labels) {\n Object.entries(sanitized.labels).forEach(([labelType, collectionLabel]) => {\n if (typeof collectionLabel === 'function') {\n sanitized.labels[labelType] = collectionLabel({ t })\n }\n })\n }\n\n if ('admin' in sanitized) {\n sanitized.admin = { ...sanitized.admin }\n\n const serverOnlyCollectionAdminProperties: Partial<ServerOnlyCollectionAdminProperties>[] = [\n 'components',\n 'hidden',\n 'preview',\n // `livePreview` is handled separately\n ]\n\n serverOnlyCollectionAdminProperties.forEach((key) => {\n if (key in sanitized.admin) {\n delete sanitized.admin[key]\n }\n })\n\n if ('livePreview' in sanitized.admin) {\n sanitized.admin.livePreview = { ...sanitized.admin.livePreview }\n delete sanitized.admin.livePreview.url\n }\n }\n\n return sanitized\n}\n\nexport const createClientCollectionConfigs = ({\n collections,\n t,\n}: {\n collections: SanitizedCollectionConfig[]\n t: TFunction\n}): ClientCollectionConfig[] =>\n collections.map((collection) => createClientCollectionConfig({ collection, t }))\n"],"names":["createClientFieldConfigs","createClientCollectionConfig","collection","t","sanitized","fields","serverOnlyCollectionProperties","forEach","key","upload","handlers","adminThumbnail","auth","strategies","forgotPassword","verify","labels","Object","entries","labelType","collectionLabel","admin","serverOnlyCollectionAdminProperties","livePreview","url","createClientCollectionConfigs","collections","map"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AA8BA,SAASA,wBAAwB,QAAQ,gCAA+B;AAExE,OAAO,MAAMC,+BAA+B,CAAC,EAC3CC,UAAU,EACVC,CAAC,EAIF;IACC,MAAMC,YAAY;QAAE,GAAGF,UAAU;IAAC;IAClCE,UAAUC,MAAM,GAAGL,yBAAyB;QAAEK,QAAQD,UAAUC,MAAM;QAAEF;IAAE;IAE1E,MAAMG,iCAA4E;QAChF;QACA;QACA;KAID;IAEDA,+BAA+BC,OAAO,CAAC,CAACC;QACtC,IAAIA,OAAOJ,WAAW;YACpB,OAAOA,SAAS,CAACI,IAAI;QACvB;IACF;IAEA,IAAI,YAAYJ,aAAa,OAAOA,UAAUK,MAAM,KAAK,UAAU;QACjEL,UAAUK,MAAM,GAAG;YAAE,GAAGL,UAAUK,MAAM;QAAC;QACzC,OAAOL,UAAUK,MAAM,CAACC,QAAQ;QAChC,OAAON,UAAUK,MAAM,CAACE,cAAc;IACxC;IAEA,IAAI,UAAUP,aAAa,OAAOA,UAAUQ,IAAI,KAAK,UAAU;QAC7DR,UAAUQ,IAAI,GAAG;YAAE,GAAGR,UAAUQ,IAAI;QAAC;QACrC,OAAOR,UAAUQ,IAAI,CAACC,UAAU;QAChC,OAAOT,UAAUQ,IAAI,CAACE,cAAc;QACpC,OAAOV,UAAUQ,IAAI,CAACG,MAAM;IAC9B;IAEA,IAAIX,UAAUY,MAAM,EAAE;QACpBC,OAAOC,OAAO,CAACd,UAAUY,MAAM,EAAET,OAAO,CAAC,CAAC,CAACY,WAAWC,gBAAgB;YACpE,IAAI,OAAOA,oBAAoB,YAAY;gBACzChB,UAAUY,MAAM,CAACG,UAAU,GAAGC,gBAAgB;oBAAEjB;gBAAE;YACpD;QACF;IACF;IAEA,IAAI,WAAWC,WAAW;QACxBA,UAAUiB,KAAK,GAAG;YAAE,GAAGjB,UAAUiB,KAAK;QAAC;QAEvC,MAAMC,sCAAsF;YAC1F;YACA;YACA;SAED;QAEDA,oCAAoCf,OAAO,CAAC,CAACC;YAC3C,IAAIA,OAAOJ,UAAUiB,KAAK,EAAE;gBAC1B,OAAOjB,UAAUiB,KAAK,CAACb,IAAI;YAC7B;QACF;QAEA,IAAI,iBAAiBJ,UAAUiB,KAAK,EAAE;YACpCjB,UAAUiB,KAAK,CAACE,WAAW,GAAG;gBAAE,GAAGnB,UAAUiB,KAAK,CAACE,WAAW;YAAC;YAC/D,OAAOnB,UAAUiB,KAAK,CAACE,WAAW,CAACC,GAAG;QACxC;IACF;IAEA,OAAOpB;AACT,EAAC;AAED,OAAO,MAAMqB,gCAAgC,CAAC,EAC5CC,WAAW,EACXvB,CAAC,EAIF,GACCuB,YAAYC,GAAG,CAAC,CAACzB,aAAeD,6BAA6B;YAAEC;YAAYC;QAAE,IAAG"}
1
+ {"version":3,"sources":["../../../src/collections/config/client.ts"],"sourcesContent":["import type { LivePreviewConfig, ServerOnlyLivePreviewProperties } from '../../config/types.js'\n\nexport type ServerOnlyCollectionProperties = keyof Pick<\n SanitizedCollectionConfig,\n 'access' | 'endpoints' | 'hooks'\n>\n\nexport type ServerOnlyCollectionAdminProperties = keyof Pick<\n SanitizedCollectionConfig['admin'],\n 'components' | 'hidden' | 'preview'\n>\n\nexport type ClientCollectionConfig = Omit<\n SanitizedCollectionConfig,\n 'admin' | 'fields' | ServerOnlyCollectionProperties\n> & {\n admin: Omit<\n SanitizedCollectionConfig['admin'],\n 'fields' | 'livePreview' | ServerOnlyCollectionAdminProperties\n > & {\n livePreview?: Omit<LivePreviewConfig, ServerOnlyLivePreviewProperties>\n }\n fields: ClientFieldConfig[]\n}\n\nimport type { TFunction } from '@payloadcms/translations'\n\nimport type { ClientFieldConfig } from '../../fields/config/client.js'\nimport type { SanitizedCollectionConfig } from './types.js'\n\nimport { createClientFieldConfigs } from '../../fields/config/client.js'\n\nexport const createClientCollectionConfig = ({\n collection,\n t,\n}: {\n collection: SanitizedCollectionConfig\n t: TFunction\n}) => {\n const sanitized = { ...collection }\n sanitized.fields = createClientFieldConfigs({ fields: sanitized.fields, t })\n\n const serverOnlyCollectionProperties: Partial<ServerOnlyCollectionProperties>[] = [\n 'hooks',\n 'access',\n 'endpoints',\n // `upload`\n // `admin`\n // are all handled separately\n ]\n\n serverOnlyCollectionProperties.forEach((key) => {\n if (key in sanitized) {\n delete sanitized[key]\n }\n })\n\n if ('upload' in sanitized && typeof sanitized.upload === 'object') {\n sanitized.upload = { ...sanitized.upload }\n delete sanitized.upload.handlers\n delete sanitized.upload.adminThumbnail\n delete sanitized.upload.externalFileHeaderFilter\n }\n\n if ('auth' in sanitized && typeof sanitized.auth === 'object') {\n sanitized.auth = { ...sanitized.auth }\n delete sanitized.auth.strategies\n delete sanitized.auth.forgotPassword\n delete sanitized.auth.verify\n }\n\n if (sanitized.labels) {\n Object.entries(sanitized.labels).forEach(([labelType, collectionLabel]) => {\n if (typeof collectionLabel === 'function') {\n sanitized.labels[labelType] = collectionLabel({ t })\n }\n })\n }\n\n if ('admin' in sanitized) {\n sanitized.admin = { ...sanitized.admin }\n\n const serverOnlyCollectionAdminProperties: Partial<ServerOnlyCollectionAdminProperties>[] = [\n 'components',\n 'hidden',\n 'preview',\n // `livePreview` is handled separately\n ]\n\n serverOnlyCollectionAdminProperties.forEach((key) => {\n if (key in sanitized.admin) {\n delete sanitized.admin[key]\n }\n })\n\n if ('livePreview' in sanitized.admin) {\n sanitized.admin.livePreview = { ...sanitized.admin.livePreview }\n delete sanitized.admin.livePreview.url\n }\n }\n\n return sanitized\n}\n\nexport const createClientCollectionConfigs = ({\n collections,\n t,\n}: {\n collections: SanitizedCollectionConfig[]\n t: TFunction\n}): ClientCollectionConfig[] =>\n collections.map((collection) => createClientCollectionConfig({ collection, t }))\n"],"names":["createClientFieldConfigs","createClientCollectionConfig","collection","t","sanitized","fields","serverOnlyCollectionProperties","forEach","key","upload","handlers","adminThumbnail","externalFileHeaderFilter","auth","strategies","forgotPassword","verify","labels","Object","entries","labelType","collectionLabel","admin","serverOnlyCollectionAdminProperties","livePreview","url","createClientCollectionConfigs","collections","map"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AA8BA,SAASA,wBAAwB,QAAQ,gCAA+B;AAExE,OAAO,MAAMC,+BAA+B,CAAC,EAC3CC,UAAU,EACVC,CAAC,EAIF;IACC,MAAMC,YAAY;QAAE,GAAGF,UAAU;IAAC;IAClCE,UAAUC,MAAM,GAAGL,yBAAyB;QAAEK,QAAQD,UAAUC,MAAM;QAAEF;IAAE;IAE1E,MAAMG,iCAA4E;QAChF;QACA;QACA;KAID;IAEDA,+BAA+BC,OAAO,CAAC,CAACC;QACtC,IAAIA,OAAOJ,WAAW;YACpB,OAAOA,SAAS,CAACI,IAAI;QACvB;IACF;IAEA,IAAI,YAAYJ,aAAa,OAAOA,UAAUK,MAAM,KAAK,UAAU;QACjEL,UAAUK,MAAM,GAAG;YAAE,GAAGL,UAAUK,MAAM;QAAC;QACzC,OAAOL,UAAUK,MAAM,CAACC,QAAQ;QAChC,OAAON,UAAUK,MAAM,CAACE,cAAc;QACtC,OAAOP,UAAUK,MAAM,CAACG,wBAAwB;IAClD;IAEA,IAAI,UAAUR,aAAa,OAAOA,UAAUS,IAAI,KAAK,UAAU;QAC7DT,UAAUS,IAAI,GAAG;YAAE,GAAGT,UAAUS,IAAI;QAAC;QACrC,OAAOT,UAAUS,IAAI,CAACC,UAAU;QAChC,OAAOV,UAAUS,IAAI,CAACE,cAAc;QACpC,OAAOX,UAAUS,IAAI,CAACG,MAAM;IAC9B;IAEA,IAAIZ,UAAUa,MAAM,EAAE;QACpBC,OAAOC,OAAO,CAACf,UAAUa,MAAM,EAAEV,OAAO,CAAC,CAAC,CAACa,WAAWC,gBAAgB;YACpE,IAAI,OAAOA,oBAAoB,YAAY;gBACzCjB,UAAUa,MAAM,CAACG,UAAU,GAAGC,gBAAgB;oBAAElB;gBAAE;YACpD;QACF;IACF;IAEA,IAAI,WAAWC,WAAW;QACxBA,UAAUkB,KAAK,GAAG;YAAE,GAAGlB,UAAUkB,KAAK;QAAC;QAEvC,MAAMC,sCAAsF;YAC1F;YACA;YACA;SAED;QAEDA,oCAAoChB,OAAO,CAAC,CAACC;YAC3C,IAAIA,OAAOJ,UAAUkB,KAAK,EAAE;gBAC1B,OAAOlB,UAAUkB,KAAK,CAACd,IAAI;YAC7B;QACF;QAEA,IAAI,iBAAiBJ,UAAUkB,KAAK,EAAE;YACpClB,UAAUkB,KAAK,CAACE,WAAW,GAAG;gBAAE,GAAGpB,UAAUkB,KAAK,CAACE,WAAW;YAAC;YAC/D,OAAOpB,UAAUkB,KAAK,CAACE,WAAW,CAACC,GAAG;QACxC;IACF;IAEA,OAAOrB;AACT,EAAC;AAED,OAAO,MAAMsB,gCAAgC,CAAC,EAC5CC,WAAW,EACXxB,CAAC,EAIF,GACCwB,YAAYC,GAAG,CAAC,CAAC1B,aAAeD,6BAA6B;YAAEC;YAAYC;QAAE,IAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/collections/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAcrB,QAAA,MAAM,gBAAgB,uBA8MpB,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/collections/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAcrB,QAAA,MAAM,gBAAgB,uBA+MpB,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
@@ -129,6 +129,7 @@ const collectionSchema = joi.object().keys({
129
129
  adminThumbnail: joi.alternatives().try(joi.string(), componentSchema),
130
130
  crop: joi.bool(),
131
131
  disableLocalStorage: joi.bool(),
132
+ externalFileHeaderFilter: joi.func(),
132
133
  filesRequiredOnCreate: joi.bool(),
133
134
  focalPoint: joi.bool(),
134
135
  formatOptions: joi.object().keys({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/config/schema.ts"],"sourcesContent":["import joi from 'joi'\n\nimport { endpointsSchema } from '../../config/schema.js'\nimport {\n componentSchema,\n customViewSchema,\n livePreviewSchema,\n} from '../../config/shared/componentSchema.js'\n\nconst strategyBaseSchema = joi.object().keys({\n logout: joi.boolean(),\n refresh: joi.boolean(),\n})\n\nconst collectionSchema = joi.object().keys({\n slug: joi.string().required(),\n access: joi.object({\n admin: joi.func(),\n create: joi.func(),\n delete: joi.func(),\n read: joi.func(),\n readVersions: joi.func(),\n unlock: joi.func(),\n update: joi.func(),\n }),\n admin: joi.object({\n components: joi.object({\n AfterList: joi.array().items(componentSchema),\n AfterListTable: joi.array().items(componentSchema),\n BeforeList: joi.array().items(componentSchema),\n BeforeListTable: joi.array().items(componentSchema),\n edit: joi.object({\n PreviewButton: componentSchema,\n PublishButton: componentSchema,\n SaveButton: componentSchema,\n SaveDraftButton: componentSchema,\n }),\n views: joi.object({\n Edit: joi.alternatives().try(\n componentSchema,\n joi.object({\n API: joi.alternatives().try(componentSchema, customViewSchema),\n Default: joi.alternatives().try(componentSchema, customViewSchema),\n LivePreview: joi.alternatives().try(componentSchema, customViewSchema),\n Version: joi.alternatives().try(componentSchema, customViewSchema),\n Versions: joi.alternatives().try(componentSchema, customViewSchema),\n // Relationships\n // References\n }),\n ),\n List: joi.alternatives().try(\n componentSchema,\n joi.object({\n Component: componentSchema,\n actions: joi.array().items(componentSchema),\n }),\n ),\n }),\n }),\n defaultColumns: joi.array().items(joi.string()),\n description: joi.alternatives().try(joi.string(), componentSchema),\n enableRichTextLink: joi.boolean(),\n enableRichTextRelationship: joi.boolean(),\n group: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n hidden: joi.alternatives().try(joi.boolean(), joi.func()),\n hideAPIURL: joi.bool(),\n listSearchableFields: joi.array().items(joi.string()),\n livePreview: joi.object(livePreviewSchema),\n pagination: joi.object({\n defaultLimit: joi.number(),\n limits: joi.array().items(joi.number()),\n }),\n preview: joi.func(),\n useAsTitle: joi.string(),\n }),\n auth: joi.alternatives().try(\n joi.object({\n cookies: joi.object().keys({\n domain: joi.string(),\n sameSite: joi.string(), // TODO: add further specificity with joi.xor\n secure: joi.boolean(),\n }),\n depth: joi.number(),\n disableLocalStrategy: joi.boolean().valid(true),\n forgotPassword: joi.object().keys({\n generateEmailHTML: joi.func(),\n generateEmailSubject: joi.func(),\n }),\n lockTime: joi.number(),\n maxLoginAttempts: joi.number(),\n removeTokenFromResponses: joi.boolean().valid(true),\n strategies: joi.array().items(\n joi.object().keys({\n name: joi.string().required(),\n authenticate: joi.func().required(),\n }),\n ),\n tokenExpiration: joi.number(),\n useAPIKey: joi.boolean(),\n verify: joi.alternatives().try(\n joi.boolean(),\n joi.object().keys({\n generateEmailHTML: joi.func(),\n generateEmailSubject: joi.func(),\n }),\n ),\n }),\n joi.boolean(),\n ),\n custom: joi.object().pattern(joi.string(), joi.any()),\n dbName: joi.alternatives().try(joi.string(), joi.func()),\n defaultSort: joi.string(),\n disableDuplicate: joi.bool(),\n endpoints: endpointsSchema,\n fields: joi.array(),\n graphQL: joi.alternatives().try(\n joi.object().keys({\n pluralName: joi.string(),\n singularName: joi.string(),\n }),\n joi.boolean(),\n ),\n hooks: joi.object({\n afterChange: joi.array().items(joi.func()),\n afterDelete: joi.array().items(joi.func()),\n afterForgotPassword: joi.array().items(joi.func()),\n afterLogin: joi.array().items(joi.func()),\n afterLogout: joi.array().items(joi.func()),\n afterMe: joi.array().items(joi.func()),\n afterOperation: joi.array().items(joi.func()),\n afterRead: joi.array().items(joi.func()),\n afterRefresh: joi.array().items(joi.func()),\n beforeChange: joi.array().items(joi.func()),\n beforeDelete: joi.array().items(joi.func()),\n beforeLogin: joi.array().items(joi.func()),\n beforeOperation: joi.array().items(joi.func()),\n beforeRead: joi.array().items(joi.func()),\n beforeValidate: joi.array().items(joi.func()),\n }),\n labels: joi.object({\n plural: joi\n .alternatives()\n .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n singular: joi\n .alternatives()\n .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n }),\n timestamps: joi.boolean(),\n typescript: joi.object().keys({\n interface: joi.string(),\n }),\n upload: joi.alternatives().try(\n joi.object({\n adminThumbnail: joi.alternatives().try(joi.string(), componentSchema),\n crop: joi.bool(),\n disableLocalStorage: joi.bool(),\n filesRequiredOnCreate: joi.bool(),\n focalPoint: joi.bool(),\n formatOptions: joi.object().keys({\n format: joi.string(),\n options: joi.object(),\n }),\n handlers: joi.array().items(joi.func()),\n imageSizes: joi.array().items(\n joi\n .object()\n .keys({\n name: joi.string(),\n crop: joi.string(), // TODO: add further specificity with joi.xor\n height: joi.number().integer().allow(null),\n width: joi.number().integer().allow(null),\n })\n .unknown(),\n ),\n mimeTypes: joi.array().items(joi.string()),\n resizeOptions: joi\n .object()\n .keys({\n background: joi.string(),\n fastShrinkOnLoad: joi.bool(),\n fit: joi.string(),\n height: joi.number().allow(null),\n kernel: joi.string(),\n position: joi.alternatives().try(joi.string(), joi.number()),\n width: joi.number().allow(null),\n withoutEnlargement: joi.bool(),\n })\n .allow(null),\n staticDir: joi.string(),\n staticOptions: joi.object(),\n tempFileDir: joi.string(),\n trimOptions: joi.alternatives().try(\n joi.object().keys({\n format: joi.string(),\n options: joi.object(),\n }),\n joi.string(),\n joi.number(),\n ),\n useTempFiles: joi.bool(),\n }),\n joi.boolean(),\n ),\n versions: joi.alternatives().try(\n joi.object({\n drafts: joi.alternatives().try(\n joi.object({\n autosave: joi.alternatives().try(\n joi.boolean(),\n joi.object({\n interval: joi.number(),\n }),\n ),\n }),\n joi.boolean(),\n ),\n maxPerDoc: joi.number(),\n }),\n joi.boolean(),\n ),\n})\n\nexport default collectionSchema\n"],"names":["joi","endpointsSchema","componentSchema","customViewSchema","livePreviewSchema","strategyBaseSchema","object","keys","logout","boolean","refresh","collectionSchema","slug","string","required","access","admin","func","create","delete","read","readVersions","unlock","update","components","AfterList","array","items","AfterListTable","BeforeList","BeforeListTable","edit","PreviewButton","PublishButton","SaveButton","SaveDraftButton","views","Edit","alternatives","try","API","Default","LivePreview","Version","Versions","List","Component","actions","defaultColumns","description","enableRichTextLink","enableRichTextRelationship","group","pattern","hidden","hideAPIURL","bool","listSearchableFields","livePreview","pagination","defaultLimit","number","limits","preview","useAsTitle","auth","cookies","domain","sameSite","secure","depth","disableLocalStrategy","valid","forgotPassword","generateEmailHTML","generateEmailSubject","lockTime","maxLoginAttempts","removeTokenFromResponses","strategies","name","authenticate","tokenExpiration","useAPIKey","verify","custom","any","dbName","defaultSort","disableDuplicate","endpoints","fields","graphQL","pluralName","singularName","hooks","afterChange","afterDelete","afterForgotPassword","afterLogin","afterLogout","afterMe","afterOperation","afterRead","afterRefresh","beforeChange","beforeDelete","beforeLogin","beforeOperation","beforeRead","beforeValidate","labels","plural","singular","timestamps","typescript","interface","upload","adminThumbnail","crop","disableLocalStorage","filesRequiredOnCreate","focalPoint","formatOptions","format","options","handlers","imageSizes","height","integer","allow","width","unknown","mimeTypes","resizeOptions","background","fastShrinkOnLoad","fit","kernel","position","withoutEnlargement","staticDir","staticOptions","tempFileDir","trimOptions","useTempFiles","versions","drafts","autosave","interval","maxPerDoc"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/collections/config/schema.ts"],"sourcesContent":["import joi from 'joi'\n\nimport { endpointsSchema } from '../../config/schema.js'\nimport {\n componentSchema,\n customViewSchema,\n livePreviewSchema,\n} from '../../config/shared/componentSchema.js'\n\nconst strategyBaseSchema = joi.object().keys({\n logout: joi.boolean(),\n refresh: joi.boolean(),\n})\n\nconst collectionSchema = joi.object().keys({\n slug: joi.string().required(),\n access: joi.object({\n admin: joi.func(),\n create: joi.func(),\n delete: joi.func(),\n read: joi.func(),\n readVersions: joi.func(),\n unlock: joi.func(),\n update: joi.func(),\n }),\n admin: joi.object({\n components: joi.object({\n AfterList: joi.array().items(componentSchema),\n AfterListTable: joi.array().items(componentSchema),\n BeforeList: joi.array().items(componentSchema),\n BeforeListTable: joi.array().items(componentSchema),\n edit: joi.object({\n PreviewButton: componentSchema,\n PublishButton: componentSchema,\n SaveButton: componentSchema,\n SaveDraftButton: componentSchema,\n }),\n views: joi.object({\n Edit: joi.alternatives().try(\n componentSchema,\n joi.object({\n API: joi.alternatives().try(componentSchema, customViewSchema),\n Default: joi.alternatives().try(componentSchema, customViewSchema),\n LivePreview: joi.alternatives().try(componentSchema, customViewSchema),\n Version: joi.alternatives().try(componentSchema, customViewSchema),\n Versions: joi.alternatives().try(componentSchema, customViewSchema),\n // Relationships\n // References\n }),\n ),\n List: joi.alternatives().try(\n componentSchema,\n joi.object({\n Component: componentSchema,\n actions: joi.array().items(componentSchema),\n }),\n ),\n }),\n }),\n defaultColumns: joi.array().items(joi.string()),\n description: joi.alternatives().try(joi.string(), componentSchema),\n enableRichTextLink: joi.boolean(),\n enableRichTextRelationship: joi.boolean(),\n group: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n hidden: joi.alternatives().try(joi.boolean(), joi.func()),\n hideAPIURL: joi.bool(),\n listSearchableFields: joi.array().items(joi.string()),\n livePreview: joi.object(livePreviewSchema),\n pagination: joi.object({\n defaultLimit: joi.number(),\n limits: joi.array().items(joi.number()),\n }),\n preview: joi.func(),\n useAsTitle: joi.string(),\n }),\n auth: joi.alternatives().try(\n joi.object({\n cookies: joi.object().keys({\n domain: joi.string(),\n sameSite: joi.string(), // TODO: add further specificity with joi.xor\n secure: joi.boolean(),\n }),\n depth: joi.number(),\n disableLocalStrategy: joi.boolean().valid(true),\n forgotPassword: joi.object().keys({\n generateEmailHTML: joi.func(),\n generateEmailSubject: joi.func(),\n }),\n lockTime: joi.number(),\n maxLoginAttempts: joi.number(),\n removeTokenFromResponses: joi.boolean().valid(true),\n strategies: joi.array().items(\n joi.object().keys({\n name: joi.string().required(),\n authenticate: joi.func().required(),\n }),\n ),\n tokenExpiration: joi.number(),\n useAPIKey: joi.boolean(),\n verify: joi.alternatives().try(\n joi.boolean(),\n joi.object().keys({\n generateEmailHTML: joi.func(),\n generateEmailSubject: joi.func(),\n }),\n ),\n }),\n joi.boolean(),\n ),\n custom: joi.object().pattern(joi.string(), joi.any()),\n dbName: joi.alternatives().try(joi.string(), joi.func()),\n defaultSort: joi.string(),\n disableDuplicate: joi.bool(),\n endpoints: endpointsSchema,\n fields: joi.array(),\n graphQL: joi.alternatives().try(\n joi.object().keys({\n pluralName: joi.string(),\n singularName: joi.string(),\n }),\n joi.boolean(),\n ),\n hooks: joi.object({\n afterChange: joi.array().items(joi.func()),\n afterDelete: joi.array().items(joi.func()),\n afterForgotPassword: joi.array().items(joi.func()),\n afterLogin: joi.array().items(joi.func()),\n afterLogout: joi.array().items(joi.func()),\n afterMe: joi.array().items(joi.func()),\n afterOperation: joi.array().items(joi.func()),\n afterRead: joi.array().items(joi.func()),\n afterRefresh: joi.array().items(joi.func()),\n beforeChange: joi.array().items(joi.func()),\n beforeDelete: joi.array().items(joi.func()),\n beforeLogin: joi.array().items(joi.func()),\n beforeOperation: joi.array().items(joi.func()),\n beforeRead: joi.array().items(joi.func()),\n beforeValidate: joi.array().items(joi.func()),\n }),\n labels: joi.object({\n plural: joi\n .alternatives()\n .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n singular: joi\n .alternatives()\n .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n }),\n timestamps: joi.boolean(),\n typescript: joi.object().keys({\n interface: joi.string(),\n }),\n upload: joi.alternatives().try(\n joi.object({\n adminThumbnail: joi.alternatives().try(joi.string(), componentSchema),\n crop: joi.bool(),\n disableLocalStorage: joi.bool(),\n externalFileHeaderFilter: joi.func(),\n filesRequiredOnCreate: joi.bool(),\n focalPoint: joi.bool(),\n formatOptions: joi.object().keys({\n format: joi.string(),\n options: joi.object(),\n }),\n handlers: joi.array().items(joi.func()),\n imageSizes: joi.array().items(\n joi\n .object()\n .keys({\n name: joi.string(),\n crop: joi.string(), // TODO: add further specificity with joi.xor\n height: joi.number().integer().allow(null),\n width: joi.number().integer().allow(null),\n })\n .unknown(),\n ),\n mimeTypes: joi.array().items(joi.string()),\n resizeOptions: joi\n .object()\n .keys({\n background: joi.string(),\n fastShrinkOnLoad: joi.bool(),\n fit: joi.string(),\n height: joi.number().allow(null),\n kernel: joi.string(),\n position: joi.alternatives().try(joi.string(), joi.number()),\n width: joi.number().allow(null),\n withoutEnlargement: joi.bool(),\n })\n .allow(null),\n staticDir: joi.string(),\n staticOptions: joi.object(),\n tempFileDir: joi.string(),\n trimOptions: joi.alternatives().try(\n joi.object().keys({\n format: joi.string(),\n options: joi.object(),\n }),\n joi.string(),\n joi.number(),\n ),\n useTempFiles: joi.bool(),\n }),\n joi.boolean(),\n ),\n versions: joi.alternatives().try(\n joi.object({\n drafts: joi.alternatives().try(\n joi.object({\n autosave: joi.alternatives().try(\n joi.boolean(),\n joi.object({\n interval: joi.number(),\n }),\n ),\n }),\n joi.boolean(),\n ),\n maxPerDoc: joi.number(),\n }),\n joi.boolean(),\n ),\n})\n\nexport default collectionSchema\n"],"names":["joi","endpointsSchema","componentSchema","customViewSchema","livePreviewSchema","strategyBaseSchema","object","keys","logout","boolean","refresh","collectionSchema","slug","string","required","access","admin","func","create","delete","read","readVersions","unlock","update","components","AfterList","array","items","AfterListTable","BeforeList","BeforeListTable","edit","PreviewButton","PublishButton","SaveButton","SaveDraftButton","views","Edit","alternatives","try","API","Default","LivePreview","Version","Versions","List","Component","actions","defaultColumns","description","enableRichTextLink","enableRichTextRelationship","group","pattern","hidden","hideAPIURL","bool","listSearchableFields","livePreview","pagination","defaultLimit","number","limits","preview","useAsTitle","auth","cookies","domain","sameSite","secure","depth","disableLocalStrategy","valid","forgotPassword","generateEmailHTML","generateEmailSubject","lockTime","maxLoginAttempts","removeTokenFromResponses","strategies","name","authenticate","tokenExpiration","useAPIKey","verify","custom","any","dbName","defaultSort","disableDuplicate","endpoints","fields","graphQL","pluralName","singularName","hooks","afterChange","afterDelete","afterForgotPassword","afterLogin","afterLogout","afterMe","afterOperation","afterRead","afterRefresh","beforeChange","beforeDelete","beforeLogin","beforeOperation","beforeRead","beforeValidate","labels","plural","singular","timestamps","typescript","interface","upload","adminThumbnail","crop","disableLocalStorage","externalFileHeaderFilter","filesRequiredOnCreate","focalPoint","formatOptions","format","options","handlers","imageSizes","height","integer","allow","width","unknown","mimeTypes","resizeOptions","background","fastShrinkOnLoad","fit","kernel","position","withoutEnlargement","staticDir","staticOptions","tempFileDir","trimOptions","useTempFiles","versions","drafts","autosave","interval","maxPerDoc"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -2,5 +2,6 @@ export * from '../auth/index.js';
2
2
  export { default as executeAccess } from '../auth/executeAccess.js';
3
3
  export { executeAuthStrategies } from '../auth/executeAuthStrategies.js';
4
4
  export { getAccessResults } from '../auth/getAccessResults.js';
5
+ export { getFieldsToSign } from '../auth/getFieldsToSign.js';
5
6
  export type { AuthStrategyFunction, AuthStrategyFunctionArgs, CollectionPermission, FieldPermissions, GlobalPermission, IncomingAuthType, Permission, Permissions, User, VerifyConfig, } from '../auth/types.js';
6
7
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/exports/auth.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D,YAAY,EACV,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,IAAI,EACJ,YAAY,GACb,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/exports/auth.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,YAAY,EACV,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,IAAI,EACJ,YAAY,GACb,MAAM,kBAAkB,CAAA"}
@@ -2,5 +2,6 @@ export * from '../auth/index.js';
2
2
  export { default as executeAccess } from '../auth/executeAccess.js';
3
3
  export { executeAuthStrategies } from '../auth/executeAuthStrategies.js';
4
4
  export { getAccessResults } from '../auth/getAccessResults.js';
5
+ export { getFieldsToSign } from '../auth/getFieldsToSign.js';
5
6
 
6
7
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/exports/auth.ts"],"sourcesContent":["export * from '../auth/index.js'\nexport { default as executeAccess } from '../auth/executeAccess.js'\nexport { executeAuthStrategies } from '../auth/executeAuthStrategies.js'\nexport { getAccessResults } from '../auth/getAccessResults.js'\n\nexport type {\n AuthStrategyFunction,\n AuthStrategyFunctionArgs,\n CollectionPermission,\n FieldPermissions,\n GlobalPermission,\n IncomingAuthType,\n Permission,\n Permissions,\n User,\n VerifyConfig,\n} from '../auth/types.js'\n"],"names":["default","executeAccess","executeAuthStrategies","getAccessResults"],"rangeMappings":";;;","mappings":"AAAA,cAAc,mBAAkB;AAChC,SAASA,WAAWC,aAAa,QAAQ,2BAA0B;AACnE,SAASC,qBAAqB,QAAQ,mCAAkC;AACxE,SAASC,gBAAgB,QAAQ,8BAA6B"}
1
+ {"version":3,"sources":["../../src/exports/auth.ts"],"sourcesContent":["export * from '../auth/index.js'\nexport { default as executeAccess } from '../auth/executeAccess.js'\nexport { executeAuthStrategies } from '../auth/executeAuthStrategies.js'\nexport { getAccessResults } from '../auth/getAccessResults.js'\nexport { getFieldsToSign } from '../auth/getFieldsToSign.js'\n\nexport type {\n AuthStrategyFunction,\n AuthStrategyFunctionArgs,\n CollectionPermission,\n FieldPermissions,\n GlobalPermission,\n IncomingAuthType,\n Permission,\n Permissions,\n User,\n VerifyConfig,\n} from '../auth/types.js'\n"],"names":["default","executeAccess","executeAuthStrategies","getAccessResults","getFieldsToSign"],"rangeMappings":";;;;","mappings":"AAAA,cAAc,mBAAkB;AAChC,SAASA,WAAWC,aAAa,QAAQ,2BAA0B;AACnE,SAASC,qBAAqB,QAAQ,mCAAkC;AACxE,SAASC,gBAAgB,QAAQ,8BAA6B;AAC9D,SAASC,eAAe,QAAQ,6BAA4B"}
@@ -1 +1 @@
1
- {"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAY,UAAU,EAAmB,MAAM,YAAY,CAAA;AAYvE,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAC,CAAA;AAEF,eAAO,MAAM,gBAAgB,4GAM1B,KAAK,CAAC,CAAC,KAAG,OAAO,CAAC,CA2NpB,CAAA"}
1
+ {"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAY,UAAU,EAAmB,MAAM,YAAY,CAAA;AAYvE,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAC,CAAA;AAEF,eAAO,MAAM,gBAAgB,4GAM1B,KAAK,CAAC,CAAC,KAAG,OAAO,CAAC,CA+NpB,CAAA"}
@@ -35,7 +35,8 @@ export const generateFileData = async ({ collection: { config: collectionConfig
35
35
  } else if (filename && url) {
36
36
  file = await getExternalFile({
37
37
  data: data,
38
- req
38
+ req,
39
+ uploadConfig: collectionConfig.upload
39
40
  });
40
41
  overwriteExistingFiles = true;
41
42
  }
@@ -88,7 +89,7 @@ export const generateFileData = async ({ collection: { config: collectionConfig
88
89
  }
89
90
  }
90
91
  if (fileSupportsResize || isImage(file.mimetype)) {
91
- dimensions = getImageSize(file);
92
+ dimensions = await getImageSize(file);
92
93
  fileData.width = dimensions.width;
93
94
  fileData.height = dimensions.height;
94
95
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["import type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport fileType from 'file-type'\nconst { fromBuffer } = fileType\nimport fs from 'fs'\nimport mkdirp from 'mkdirp'\nimport sanitize from 'sanitize-filename'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileData, FileToSave, ProbedImageSize } from './types.js'\n\nimport { FileUploadError, MissingFile } from '../errors/index.js'\nimport canResizeImage from './canResizeImage.js'\nimport cropImage from './cropImage.js'\nimport { getExternalFile } from './getExternalFile.js'\nimport { getFileByPath } from './getFileByPath.js'\nimport { getImageSize } from './getImageSize.js'\nimport getSafeFileName from './getSafeFilename.js'\nimport resizeAndTransformImageSizes from './imageResizer.js'\nimport isImage from './isImage.js'\n\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n throwOnMissingFile?: boolean\n}\n\ntype Result<T> = Promise<{\n data: T\n files: FileToSave[]\n}>\n\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n overwriteExistingFiles,\n req,\n throwOnMissingFile,\n}: Args<T>): Result<T> => {\n if (!collectionConfig.upload) {\n return {\n data,\n files: [],\n }\n }\n\n const { sharp } = req.payload.config\n\n let file = req.file\n\n const uploadEdits = req.query['uploadEdits'] || {}\n\n const { disableLocalStorage, formatOptions, imageSizes, resizeOptions, staticDir, trimOptions } =\n collectionConfig.upload\n\n const staticPath = staticDir\n\n if (!file && uploadEdits && data) {\n const { filename, url } = data as FileData\n\n try {\n if (url && url.startsWith('/') && !disableLocalStorage) {\n const filePath = `${staticPath}/${filename}`\n const response = await getFileByPath(filePath)\n file = response\n overwriteExistingFiles = true\n } else if (filename && url) {\n file = await getExternalFile({ data: data as FileData, req })\n overwriteExistingFiles = true\n }\n } catch (err) {\n throw new FileUploadError(req.t)\n }\n }\n\n if (!file) {\n if (throwOnMissingFile) throw new MissingFile(req.t)\n\n return {\n data,\n files: [],\n }\n }\n\n if (!disableLocalStorage) {\n mkdirp.sync(staticPath)\n }\n\n let newData = data\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const fileIsAnimated = file.mimetype === 'image/gif' || file.mimetype === 'image/webp'\n const cropData =\n typeof uploadEdits === 'object' && 'crop' in uploadEdits ? uploadEdits.crop : undefined\n\n try {\n const fileSupportsResize = canResizeImage(file.mimetype)\n let fsSafeName: string\n let sharpFile: Sharp | undefined\n let dimensions: ProbedImageSize | undefined\n let fileBuffer: { data: Buffer; info: OutputInfo }\n let ext\n let mime: string\n const fileHasAdjustments =\n fileSupportsResize &&\n Boolean(resizeOptions || formatOptions || trimOptions || file.tempFilePath)\n\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimated) sharpOptions.animated = true\n\n if (fileHasAdjustments && sharp) {\n if (file.tempFilePath) {\n sharpFile = sharp(file.tempFilePath, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n } else {\n sharpFile = sharp(file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n }\n\n if (resizeOptions) {\n sharpFile = sharpFile.resize(resizeOptions)\n }\n if (formatOptions) {\n sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options)\n }\n if (trimOptions) {\n sharpFile = sharpFile.trim(trimOptions)\n }\n }\n\n if (fileSupportsResize || isImage(file.mimetype)) {\n dimensions = getImageSize(file)\n fileData.width = dimensions.width\n fileData.height = dimensions.height\n }\n\n if (sharpFile) {\n const metadata = await sharpFile.metadata()\n fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })\n ;({ ext, mime } = await fromBuffer(fileBuffer.data)) // This is getting an incorrect gif height back.\n fileData.width = fileBuffer.info.width\n fileData.height = fileBuffer.info.height\n fileData.filesize = fileBuffer.info.size\n\n // Animated GIFs + WebP aggregate the height from every frame, so we need to use divide by number of pages\n if (metadata.pages) {\n fileData.height = fileBuffer.info.height / metadata.pages\n fileData.filesize = fileBuffer.data.length\n }\n } else {\n mime = file.mimetype\n fileData.filesize = file.size\n\n if (file.name.includes('.')) {\n ext = file.name.split('.').pop()\n } else {\n ext = ''\n }\n }\n\n // Adust SVG mime type. fromBuffer modifies it.\n if (mime === 'application/xml' && ext === 'svg') mime = 'image/svg+xml'\n fileData.mimeType = mime\n\n const baseFilename = sanitize(file.name.substring(0, file.name.lastIndexOf('.')) || file.name)\n fsSafeName = `${baseFilename}${ext ? `.${ext}` : ''}`\n\n if (!overwriteExistingFiles) {\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n req,\n staticPath,\n })\n }\n\n fileData.filename = fsSafeName\n let fileForResize = file\n\n if (cropData && sharp) {\n const { data: croppedImage, info } = await cropImage({ cropData, dimensions, file, sharp })\n\n filesToSave.push({\n buffer: croppedImage,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...file,\n data: croppedImage,\n size: info.size,\n }\n fileData.width = info.width\n fileData.height = info.height\n fileData.filesize = info.size\n\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, croppedImage) // write fileBuffer to the temp path\n } else {\n req.file = fileForResize\n }\n } else {\n filesToSave.push({\n buffer: fileBuffer?.data || file.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n // If using temp files and the image is being resized, write the file to the temp path\n if (fileBuffer?.data || file.data.length > 0) {\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, fileBuffer?.data || file.data) // write fileBuffer to the temp path\n } else {\n // Assign the _possibly modified_ file to the request object\n req.file = {\n ...file,\n data: fileBuffer?.data || file.data,\n size: fileBuffer?.info.size,\n }\n }\n }\n }\n\n if (Array.isArray(imageSizes) && fileSupportsResize && sharp) {\n req.payloadUploadSizes = {}\n const { sizeData, sizesToSave } = await resizeAndTransformImageSizes({\n config: collectionConfig,\n dimensions: !cropData\n ? dimensions\n : {\n ...dimensions,\n height: fileData.height,\n width: fileData.width,\n },\n file: fileForResize,\n mimeType: fileData.mimeType,\n req,\n savedFilename: fsSafeName || file.name,\n sharp,\n staticPath,\n })\n\n fileData.sizes = sizeData\n filesToSave.push(...sizesToSave)\n }\n } catch (err) {\n console.error(err)\n throw new FileUploadError(req.t)\n }\n\n newData = {\n ...newData,\n ...fileData,\n }\n\n return {\n data: newData,\n files: filesToSave,\n }\n}\n"],"names":["fileType","fromBuffer","fs","mkdirp","sanitize","FileUploadError","MissingFile","canResizeImage","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","generateFileData","collection","config","collectionConfig","data","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","uploadEdits","query","disableLocalStorage","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","staticPath","filename","url","startsWith","filePath","response","err","t","sync","newData","filesToSave","fileData","fileIsAnimated","mimetype","cropData","crop","undefined","fileSupportsResize","fsSafeName","sharpFile","dimensions","fileBuffer","ext","mime","fileHasAdjustments","Boolean","tempFilePath","sharpOptions","animated","rotate","resize","toFormat","format","options","trim","width","height","metadata","toBuffer","resolveWithObject","info","filesize","size","pages","length","name","includes","split","pop","mimeType","baseFilename","substring","lastIndexOf","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","push","buffer","path","promises","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","console","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["import type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport fileType from 'file-type'\nconst { fromBuffer } = fileType\nimport fs from 'fs'\nimport mkdirp from 'mkdirp'\nimport sanitize from 'sanitize-filename'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileData, FileToSave, ProbedImageSize } from './types.js'\n\nimport { FileUploadError, MissingFile } from '../errors/index.js'\nimport canResizeImage from './canResizeImage.js'\nimport cropImage from './cropImage.js'\nimport { getExternalFile } from './getExternalFile.js'\nimport { getFileByPath } from './getFileByPath.js'\nimport { getImageSize } from './getImageSize.js'\nimport getSafeFileName from './getSafeFilename.js'\nimport resizeAndTransformImageSizes from './imageResizer.js'\nimport isImage from './isImage.js'\n\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n throwOnMissingFile?: boolean\n}\n\ntype Result<T> = Promise<{\n data: T\n files: FileToSave[]\n}>\n\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n overwriteExistingFiles,\n req,\n throwOnMissingFile,\n}: Args<T>): Result<T> => {\n if (!collectionConfig.upload) {\n return {\n data,\n files: [],\n }\n }\n\n const { sharp } = req.payload.config\n\n let file = req.file\n\n const uploadEdits = req.query['uploadEdits'] || {}\n\n const { disableLocalStorage, formatOptions, imageSizes, resizeOptions, staticDir, trimOptions } =\n collectionConfig.upload\n\n const staticPath = staticDir\n\n if (!file && uploadEdits && data) {\n const { filename, url } = data as FileData\n\n try {\n if (url && url.startsWith('/') && !disableLocalStorage) {\n const filePath = `${staticPath}/${filename}`\n const response = await getFileByPath(filePath)\n file = response\n overwriteExistingFiles = true\n } else if (filename && url) {\n file = await getExternalFile({\n data: data as FileData,\n req,\n uploadConfig: collectionConfig.upload,\n })\n overwriteExistingFiles = true\n }\n } catch (err) {\n throw new FileUploadError(req.t)\n }\n }\n\n if (!file) {\n if (throwOnMissingFile) throw new MissingFile(req.t)\n\n return {\n data,\n files: [],\n }\n }\n\n if (!disableLocalStorage) {\n mkdirp.sync(staticPath)\n }\n\n let newData = data\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const fileIsAnimated = file.mimetype === 'image/gif' || file.mimetype === 'image/webp'\n const cropData =\n typeof uploadEdits === 'object' && 'crop' in uploadEdits ? uploadEdits.crop : undefined\n\n try {\n const fileSupportsResize = canResizeImage(file.mimetype)\n let fsSafeName: string\n let sharpFile: Sharp | undefined\n let dimensions: ProbedImageSize | undefined\n let fileBuffer: { data: Buffer; info: OutputInfo }\n let ext\n let mime: string\n const fileHasAdjustments =\n fileSupportsResize &&\n Boolean(resizeOptions || formatOptions || trimOptions || file.tempFilePath)\n\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimated) sharpOptions.animated = true\n\n if (fileHasAdjustments && sharp) {\n if (file.tempFilePath) {\n sharpFile = sharp(file.tempFilePath, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n } else {\n sharpFile = sharp(file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n }\n\n if (resizeOptions) {\n sharpFile = sharpFile.resize(resizeOptions)\n }\n if (formatOptions) {\n sharpFile = sharpFile.toFormat(formatOptions.format, formatOptions.options)\n }\n if (trimOptions) {\n sharpFile = sharpFile.trim(trimOptions)\n }\n }\n\n if (fileSupportsResize || isImage(file.mimetype)) {\n dimensions = await getImageSize(file)\n fileData.width = dimensions.width\n fileData.height = dimensions.height\n }\n\n if (sharpFile) {\n const metadata = await sharpFile.metadata()\n fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })\n ;({ ext, mime } = await fromBuffer(fileBuffer.data)) // This is getting an incorrect gif height back.\n fileData.width = fileBuffer.info.width\n fileData.height = fileBuffer.info.height\n fileData.filesize = fileBuffer.info.size\n\n // Animated GIFs + WebP aggregate the height from every frame, so we need to use divide by number of pages\n if (metadata.pages) {\n fileData.height = fileBuffer.info.height / metadata.pages\n fileData.filesize = fileBuffer.data.length\n }\n } else {\n mime = file.mimetype\n fileData.filesize = file.size\n\n if (file.name.includes('.')) {\n ext = file.name.split('.').pop()\n } else {\n ext = ''\n }\n }\n\n // Adust SVG mime type. fromBuffer modifies it.\n if (mime === 'application/xml' && ext === 'svg') mime = 'image/svg+xml'\n fileData.mimeType = mime\n\n const baseFilename = sanitize(file.name.substring(0, file.name.lastIndexOf('.')) || file.name)\n fsSafeName = `${baseFilename}${ext ? `.${ext}` : ''}`\n\n if (!overwriteExistingFiles) {\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n req,\n staticPath,\n })\n }\n\n fileData.filename = fsSafeName\n let fileForResize = file\n\n if (cropData && sharp) {\n const { data: croppedImage, info } = await cropImage({ cropData, dimensions, file, sharp })\n\n filesToSave.push({\n buffer: croppedImage,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n fileForResize = {\n ...file,\n data: croppedImage,\n size: info.size,\n }\n fileData.width = info.width\n fileData.height = info.height\n fileData.filesize = info.size\n\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, croppedImage) // write fileBuffer to the temp path\n } else {\n req.file = fileForResize\n }\n } else {\n filesToSave.push({\n buffer: fileBuffer?.data || file.data,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n // If using temp files and the image is being resized, write the file to the temp path\n if (fileBuffer?.data || file.data.length > 0) {\n if (file.tempFilePath) {\n await fs.promises.writeFile(file.tempFilePath, fileBuffer?.data || file.data) // write fileBuffer to the temp path\n } else {\n // Assign the _possibly modified_ file to the request object\n req.file = {\n ...file,\n data: fileBuffer?.data || file.data,\n size: fileBuffer?.info.size,\n }\n }\n }\n }\n\n if (Array.isArray(imageSizes) && fileSupportsResize && sharp) {\n req.payloadUploadSizes = {}\n const { sizeData, sizesToSave } = await resizeAndTransformImageSizes({\n config: collectionConfig,\n dimensions: !cropData\n ? dimensions\n : {\n ...dimensions,\n height: fileData.height,\n width: fileData.width,\n },\n file: fileForResize,\n mimeType: fileData.mimeType,\n req,\n savedFilename: fsSafeName || file.name,\n sharp,\n staticPath,\n })\n\n fileData.sizes = sizeData\n filesToSave.push(...sizesToSave)\n }\n } catch (err) {\n console.error(err)\n throw new FileUploadError(req.t)\n }\n\n newData = {\n ...newData,\n ...fileData,\n }\n\n return {\n data: newData,\n files: filesToSave,\n }\n}\n"],"names":["fileType","fromBuffer","fs","mkdirp","sanitize","FileUploadError","MissingFile","canResizeImage","cropImage","getExternalFile","getFileByPath","getImageSize","getSafeFileName","resizeAndTransformImageSizes","isImage","generateFileData","collection","config","collectionConfig","data","overwriteExistingFiles","req","throwOnMissingFile","upload","files","sharp","payload","file","uploadEdits","query","disableLocalStorage","formatOptions","imageSizes","resizeOptions","staticDir","trimOptions","staticPath","filename","url","startsWith","filePath","response","uploadConfig","err","t","sync","newData","filesToSave","fileData","fileIsAnimated","mimetype","cropData","crop","undefined","fileSupportsResize","fsSafeName","sharpFile","dimensions","fileBuffer","ext","mime","fileHasAdjustments","Boolean","tempFilePath","sharpOptions","animated","rotate","resize","toFormat","format","options","trim","width","height","metadata","toBuffer","resolveWithObject","info","filesize","size","pages","length","name","includes","split","pop","mimeType","baseFilename","substring","lastIndexOf","collectionSlug","slug","desiredFilename","fileForResize","croppedImage","push","buffer","path","promises","writeFile","Array","isArray","payloadUploadSizes","sizeData","sizesToSave","savedFilename","sizes","console","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import type { PayloadRequest } from '../types/index.ts';
2
- import type { File, FileData } from './types.js';
2
+ import type { File, FileData, UploadConfig } from './types.js';
3
3
  type Args = {
4
4
  data: FileData;
5
5
  req: PayloadRequest;
6
+ uploadConfig: UploadConfig;
6
7
  };
7
- export declare const getExternalFile: ({ data, req }: Args) => Promise<File>;
8
+ export declare const getExternalFile: ({ data, req, uploadConfig }: Args) => Promise<File>;
8
9
  export {};
9
10
  //# sourceMappingURL=getExternalFile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getExternalFile.d.ts","sourceRoot":"","sources":["../../src/uploads/getExternalFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIhD,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AACD,eAAO,MAAM,eAAe,kBAAyB,IAAI,KAAG,QAAQ,IAAI,CA4BvE,CAAA"}
1
+ {"version":3,"file":"getExternalFile.d.ts","sourceRoot":"","sources":["../../src/uploads/getExternalFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,EAAE,cAAc,CAAA;IACnB,YAAY,EAAE,YAAY,CAAA;CAC3B,CAAA;AACD,eAAO,MAAM,eAAe,gCAAuC,IAAI,KAAG,QAAQ,IAAI,CAgCrF,CAAA"}
@@ -1,14 +1,15 @@
1
1
  import { APIError } from '../errors/index.js';
2
- export const getExternalFile = async ({ data, req })=>{
2
+ export const getExternalFile = async ({ data, req, uploadConfig })=>{
3
3
  const baseUrl = req.origin || `${req.protocol}://${req.host}`;
4
4
  const { filename, url } = data;
5
5
  if (typeof url === 'string') {
6
6
  const fileURL = `${baseUrl}${url}`;
7
+ const headers = uploadConfig.externalFileHeaderFilter ? uploadConfig.externalFileHeaderFilter(Object.fromEntries(new Headers(req.headers))) : {
8
+ cookie: req.headers['cookie']
9
+ };
7
10
  const res = await fetch(fileURL, {
8
11
  credentials: 'include',
9
- headers: {
10
- ...req.headers
11
- },
12
+ headers,
12
13
  method: 'GET'
13
14
  });
14
15
  if (!res.ok) throw new APIError(`Failed to fetch file from ${fileURL}`, res.status);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getExternalFile.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.ts'\nimport type { File, FileData } from './types.js'\n\nimport { APIError } from '../errors/index.js'\n\ntype Args = {\n data: FileData\n req: PayloadRequest\n}\nexport const getExternalFile = async ({ data, req }: Args): Promise<File> => {\n const baseUrl = req.origin || `${req.protocol}://${req.host}`\n const { filename, url } = data\n\n if (typeof url === 'string') {\n const fileURL = `${baseUrl}${url}`\n\n const res = await fetch(fileURL, {\n credentials: 'include',\n headers: {\n ...req.headers,\n },\n method: 'GET',\n })\n\n if (!res.ok) throw new APIError(`Failed to fetch file from ${fileURL}`, res.status)\n\n const data = await res.arrayBuffer()\n\n return {\n name: filename,\n data: Buffer.from(data),\n mimetype: res.headers.get('content-type') || undefined,\n size: Number(res.headers.get('content-length')) || 0,\n }\n }\n\n throw new APIError('Invalid file url', 400)\n}\n"],"names":["APIError","getExternalFile","data","req","baseUrl","origin","protocol","host","filename","url","fileURL","res","fetch","credentials","headers","method","ok","status","arrayBuffer","name","Buffer","from","mimetype","get","undefined","size","Number"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAGA,SAASA,QAAQ,QAAQ,qBAAoB;AAM7C,OAAO,MAAMC,kBAAkB,OAAO,EAAEC,IAAI,EAAEC,GAAG,EAAQ;IACvD,MAAMC,UAAUD,IAAIE,MAAM,IAAI,CAAC,EAAEF,IAAIG,QAAQ,CAAC,GAAG,EAAEH,IAAII,IAAI,CAAC,CAAC;IAC7D,MAAM,EAAEC,QAAQ,EAAEC,GAAG,EAAE,GAAGP;IAE1B,IAAI,OAAOO,QAAQ,UAAU;QAC3B,MAAMC,UAAU,CAAC,EAAEN,QAAQ,EAAEK,IAAI,CAAC;QAElC,MAAME,MAAM,MAAMC,MAAMF,SAAS;YAC/BG,aAAa;YACbC,SAAS;gBACP,GAAGX,IAAIW,OAAO;YAChB;YACAC,QAAQ;QACV;QAEA,IAAI,CAACJ,IAAIK,EAAE,EAAE,MAAM,IAAIhB,SAAS,CAAC,0BAA0B,EAAEU,QAAQ,CAAC,EAAEC,IAAIM,MAAM;QAElF,MAAMf,OAAO,MAAMS,IAAIO,WAAW;QAElC,OAAO;YACLC,MAAMX;YACNN,MAAMkB,OAAOC,IAAI,CAACnB;YAClBoB,UAAUX,IAAIG,OAAO,CAACS,GAAG,CAAC,mBAAmBC;YAC7CC,MAAMC,OAAOf,IAAIG,OAAO,CAACS,GAAG,CAAC,sBAAsB;QACrD;IACF;IAEA,MAAM,IAAIvB,SAAS,oBAAoB;AACzC,EAAC"}
1
+ {"version":3,"sources":["../../src/uploads/getExternalFile.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.ts'\nimport type { File, FileData, UploadConfig } from './types.js'\n\nimport { APIError } from '../errors/index.js'\n\ntype Args = {\n data: FileData\n req: PayloadRequest\n uploadConfig: UploadConfig\n}\nexport const getExternalFile = async ({ data, req, uploadConfig }: Args): Promise<File> => {\n const baseUrl = req.origin || `${req.protocol}://${req.host}`\n const { filename, url } = data\n\n if (typeof url === 'string') {\n const fileURL = `${baseUrl}${url}`\n\n const headers = uploadConfig.externalFileHeaderFilter\n ? uploadConfig.externalFileHeaderFilter(Object.fromEntries(new Headers(req.headers)))\n : {\n cookie: req.headers['cookie'],\n }\n\n const res = await fetch(fileURL, {\n credentials: 'include',\n headers,\n method: 'GET',\n })\n\n if (!res.ok) throw new APIError(`Failed to fetch file from ${fileURL}`, res.status)\n\n const data = await res.arrayBuffer()\n\n return {\n name: filename,\n data: Buffer.from(data),\n mimetype: res.headers.get('content-type') || undefined,\n size: Number(res.headers.get('content-length')) || 0,\n }\n }\n\n throw new APIError('Invalid file url', 400)\n}\n"],"names":["APIError","getExternalFile","data","req","uploadConfig","baseUrl","origin","protocol","host","filename","url","fileURL","headers","externalFileHeaderFilter","Object","fromEntries","Headers","cookie","res","fetch","credentials","method","ok","status","arrayBuffer","name","Buffer","from","mimetype","get","undefined","size","Number"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAGA,SAASA,QAAQ,QAAQ,qBAAoB;AAO7C,OAAO,MAAMC,kBAAkB,OAAO,EAAEC,IAAI,EAAEC,GAAG,EAAEC,YAAY,EAAQ;IACrE,MAAMC,UAAUF,IAAIG,MAAM,IAAI,CAAC,EAAEH,IAAII,QAAQ,CAAC,GAAG,EAAEJ,IAAIK,IAAI,CAAC,CAAC;IAC7D,MAAM,EAAEC,QAAQ,EAAEC,GAAG,EAAE,GAAGR;IAE1B,IAAI,OAAOQ,QAAQ,UAAU;QAC3B,MAAMC,UAAU,CAAC,EAAEN,QAAQ,EAAEK,IAAI,CAAC;QAElC,MAAME,UAAUR,aAAaS,wBAAwB,GACjDT,aAAaS,wBAAwB,CAACC,OAAOC,WAAW,CAAC,IAAIC,QAAQb,IAAIS,OAAO,MAChF;YACEK,QAAQd,IAAIS,OAAO,CAAC,SAAS;QAC/B;QAEJ,MAAMM,MAAM,MAAMC,MAAMR,SAAS;YAC/BS,aAAa;YACbR;YACAS,QAAQ;QACV;QAEA,IAAI,CAACH,IAAII,EAAE,EAAE,MAAM,IAAItB,SAAS,CAAC,0BAA0B,EAAEW,QAAQ,CAAC,EAAEO,IAAIK,MAAM;QAElF,MAAMrB,OAAO,MAAMgB,IAAIM,WAAW;QAElC,OAAO;YACLC,MAAMhB;YACNP,MAAMwB,OAAOC,IAAI,CAACzB;YAClB0B,UAAUV,IAAIN,OAAO,CAACiB,GAAG,CAAC,mBAAmBC;YAC7CC,MAAMC,OAAOd,IAAIN,OAAO,CAACiB,GAAG,CAAC,sBAAsB;QACrD;IACF;IAEA,MAAM,IAAI7B,SAAS,oBAAoB;AACzC,EAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { PayloadRequest } from '../types/index.js';
2
2
  import type { ProbedImageSize } from './types.js';
3
- export declare function getImageSize(file: PayloadRequest['file']): ProbedImageSize;
3
+ export declare function getImageSize(file: PayloadRequest['file']): Promise<ProbedImageSize>;
4
4
  //# sourceMappingURL=getImageSize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getImageSize.d.ts","sourceRoot":"","sources":["../../src/uploads/getImageSize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,eAAe,CAO1E"}
1
+ {"version":3,"file":"getImageSize.d.ts","sourceRoot":"","sources":["../../src/uploads/getImageSize.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAOjD,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAmBzF"}
@@ -1,11 +1,25 @@
1
1
  import fs from 'fs';
2
- import probeImageSize from 'probe-image-size';
3
- export function getImageSize(file) {
2
+ import sizeOfImport from 'image-size';
3
+ import { promisify } from 'util';
4
+ import { temporaryFileTask } from './tempFile.js';
5
+ const { imageSize } = sizeOfImport;
6
+ const imageSizePromise = promisify(imageSize);
7
+ export async function getImageSize(file) {
4
8
  if (file.tempFilePath) {
5
- const data = fs.readFileSync(file.tempFilePath);
6
- return probeImageSize.sync(data);
9
+ return imageSizePromise(file.tempFilePath);
7
10
  }
8
- return probeImageSize.sync(file.data);
11
+ // Tiff file do not support buffers or streams, so we must write to file first
12
+ // then retrieve dimensions. https://github.com/image-size/image-size/issues/103
13
+ if (file.mimetype === 'image/tiff') {
14
+ const dimensions = await temporaryFileTask(async (filepath)=>{
15
+ fs.writeFileSync(filepath, file.data);
16
+ return imageSizePromise(filepath);
17
+ }, {
18
+ extension: 'tiff'
19
+ });
20
+ return dimensions;
21
+ }
22
+ return imageSize(file.data);
9
23
  }
10
24
 
11
25
  //# sourceMappingURL=getImageSize.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getImageSize.ts"],"sourcesContent":["import fs from 'fs'\nimport probeImageSize from 'probe-image-size'\n\nimport type { PayloadRequest } from '../types/index.js'\nimport type { ProbedImageSize } from './types.js'\n\nexport function getImageSize(file: PayloadRequest['file']): ProbedImageSize {\n if (file.tempFilePath) {\n const data = fs.readFileSync(file.tempFilePath)\n return probeImageSize.sync(data)\n }\n\n return probeImageSize.sync(file.data)\n}\n"],"names":["fs","probeImageSize","getImageSize","file","tempFilePath","data","readFileSync","sync"],"rangeMappings":";;;;;;;;","mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,oBAAoB,mBAAkB;AAK7C,OAAO,SAASC,aAAaC,IAA4B;IACvD,IAAIA,KAAKC,YAAY,EAAE;QACrB,MAAMC,OAAOL,GAAGM,YAAY,CAACH,KAAKC,YAAY;QAC9C,OAAOH,eAAeM,IAAI,CAACF;IAC7B;IAEA,OAAOJ,eAAeM,IAAI,CAACJ,KAAKE,IAAI;AACtC"}
1
+ {"version":3,"sources":["../../src/uploads/getImageSize.ts"],"sourcesContent":["import fs from 'fs'\nimport sizeOfImport from 'image-size'\nimport { promisify } from 'util'\n\nimport type { PayloadRequest } from '../types/index.js'\nimport type { ProbedImageSize } from './types.js'\n\nimport { temporaryFileTask } from './tempFile.js'\n\nconst { imageSize } = sizeOfImport\nconst imageSizePromise = promisify(imageSize)\n\nexport async function getImageSize(file: PayloadRequest['file']): Promise<ProbedImageSize> {\n if (file.tempFilePath) {\n return imageSizePromise(file.tempFilePath)\n }\n\n // Tiff file do not support buffers or streams, so we must write to file first\n // then retrieve dimensions. https://github.com/image-size/image-size/issues/103\n if (file.mimetype === 'image/tiff') {\n const dimensions = await temporaryFileTask(\n async (filepath: string) => {\n fs.writeFileSync(filepath, file.data)\n return imageSizePromise(filepath)\n },\n { extension: 'tiff' },\n )\n return dimensions\n }\n\n return imageSize(file.data)\n}\n"],"names":["fs","sizeOfImport","promisify","temporaryFileTask","imageSize","imageSizePromise","getImageSize","file","tempFilePath","mimetype","dimensions","filepath","writeFileSync","data","extension"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,kBAAkB,aAAY;AACrC,SAASC,SAAS,QAAQ,OAAM;AAKhC,SAASC,iBAAiB,QAAQ,gBAAe;AAEjD,MAAM,EAAEC,SAAS,EAAE,GAAGH;AACtB,MAAMI,mBAAmBH,UAAUE;AAEnC,OAAO,eAAeE,aAAaC,IAA4B;IAC7D,IAAIA,KAAKC,YAAY,EAAE;QACrB,OAAOH,iBAAiBE,KAAKC,YAAY;IAC3C;IAEA,8EAA8E;IAC9E,gFAAgF;IAChF,IAAID,KAAKE,QAAQ,KAAK,cAAc;QAClC,MAAMC,aAAa,MAAMP,kBACvB,OAAOQ;YACLX,GAAGY,aAAa,CAACD,UAAUJ,KAAKM,IAAI;YACpC,OAAOR,iBAAiBM;QAC1B,GACA;YAAEG,WAAW;QAAO;QAEtB,OAAOJ;IACT;IAEA,OAAON,UAAUG,KAAKM,IAAI;AAC5B"}
@@ -0,0 +1,7 @@
1
+ type Options = {
2
+ extension?: string;
3
+ name?: string;
4
+ };
5
+ export declare const temporaryFileTask: (callback: any, options?: Options) => Promise<any>;
6
+ export {};
7
+ //# sourceMappingURL=tempFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tempFile.d.ts","sourceRoot":"","sources":["../../src/uploads/tempFile.ts"],"names":[],"mappings":"AAaA,KAAK,OAAO,GAAG;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,iBAAiB,4BAA6B,OAAO,iBAGjE,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { promises as fsPromises } from 'fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { v4 as uuid } from 'uuid';
5
+ async function runTask(temporaryPath, callback) {
6
+ try {
7
+ return await callback(temporaryPath);
8
+ } finally{
9
+ await fsPromises.rm(temporaryPath, {
10
+ force: true,
11
+ maxRetries: 2,
12
+ recursive: true
13
+ });
14
+ }
15
+ }
16
+ export const temporaryFileTask = async (callback, options = {})=>{
17
+ const filePath = await temporaryFile(options);
18
+ return runTask(filePath, callback);
19
+ };
20
+ async function temporaryFile(options) {
21
+ if (options.name) {
22
+ if (options.extension !== undefined && options.extension !== null) {
23
+ throw new Error('The `name` and `extension` options are mutually exclusive');
24
+ }
25
+ return path.join(await temporaryDirectory(), options.name);
26
+ }
27
+ return await getPath() + (options.extension === undefined || options.extension === null ? '' : '.' + options.extension.replace(/^\./, ''));
28
+ }
29
+ async function temporaryDirectory({ prefix = '' } = {}) {
30
+ const directory = await getPath(prefix);
31
+ await fsPromises.mkdir(directory);
32
+ return directory;
33
+ }
34
+ async function getPath(prefix = '') {
35
+ const temporaryDirectory = await fsPromises.realpath(os.tmpdir());
36
+ return path.join(temporaryDirectory, prefix + uuid());
37
+ }
38
+
39
+ //# sourceMappingURL=tempFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/uploads/tempFile.ts"],"sourcesContent":["import { promises as fsPromises } from 'fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { v4 as uuid } from 'uuid'\n\nasync function runTask(temporaryPath: string, callback) {\n try {\n return await callback(temporaryPath)\n } finally {\n await fsPromises.rm(temporaryPath, { force: true, maxRetries: 2, recursive: true })\n }\n}\n\ntype Options = {\n extension?: string\n name?: string\n}\n\nexport const temporaryFileTask = async (callback, options: Options = {}) => {\n const filePath = await temporaryFile(options)\n return runTask(filePath, callback)\n}\n\nasync function temporaryFile(options: Options) {\n if (options.name) {\n if (options.extension !== undefined && options.extension !== null) {\n throw new Error('The `name` and `extension` options are mutually exclusive')\n }\n\n return path.join(await temporaryDirectory(), options.name)\n }\n\n return (\n (await getPath()) +\n (options.extension === undefined || options.extension === null\n ? ''\n : '.' + options.extension.replace(/^\\./, ''))\n )\n}\n\nasync function temporaryDirectory({ prefix = '' } = {}) {\n const directory = await getPath(prefix)\n await fsPromises.mkdir(directory)\n return directory\n}\n\nasync function getPath(prefix = ''): Promise<string> {\n const temporaryDirectory = await fsPromises.realpath(os.tmpdir())\n return path.join(temporaryDirectory, prefix + uuid())\n}\n"],"names":["promises","fsPromises","os","path","v4","uuid","runTask","temporaryPath","callback","rm","force","maxRetries","recursive","temporaryFileTask","options","filePath","temporaryFile","name","extension","undefined","Error","join","temporaryDirectory","getPath","replace","prefix","directory","mkdir","realpath","tmpdir"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,YAAYC,UAAU,QAAQ,KAAI;AAC3C,OAAOC,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAC5B,SAASC,MAAMC,IAAI,QAAQ,OAAM;AAEjC,eAAeC,QAAQC,aAAqB,EAAEC,QAAQ;IACpD,IAAI;QACF,OAAO,MAAMA,SAASD;IACxB,SAAU;QACR,MAAMN,WAAWQ,EAAE,CAACF,eAAe;YAAEG,OAAO;YAAMC,YAAY;YAAGC,WAAW;QAAK;IACnF;AACF;AAOA,OAAO,MAAMC,oBAAoB,OAAOL,UAAUM,UAAmB,CAAC,CAAC;IACrE,MAAMC,WAAW,MAAMC,cAAcF;IACrC,OAAOR,QAAQS,UAAUP;AAC3B,EAAC;AAED,eAAeQ,cAAcF,OAAgB;IAC3C,IAAIA,QAAQG,IAAI,EAAE;QAChB,IAAIH,QAAQI,SAAS,KAAKC,aAAaL,QAAQI,SAAS,KAAK,MAAM;YACjE,MAAM,IAAIE,MAAM;QAClB;QAEA,OAAOjB,KAAKkB,IAAI,CAAC,MAAMC,sBAAsBR,QAAQG,IAAI;IAC3D;IAEA,OACE,AAAC,MAAMM,YACNT,CAAAA,QAAQI,SAAS,KAAKC,aAAaL,QAAQI,SAAS,KAAK,OACtD,KACA,MAAMJ,QAAQI,SAAS,CAACM,OAAO,CAAC,OAAO,GAAE;AAEjD;AAEA,eAAeF,mBAAmB,EAAEG,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;IACpD,MAAMC,YAAY,MAAMH,QAAQE;IAChC,MAAMxB,WAAW0B,KAAK,CAACD;IACvB,OAAOA;AACT;AAEA,eAAeH,QAAQE,SAAS,EAAE;IAChC,MAAMH,qBAAqB,MAAMrB,WAAW2B,QAAQ,CAAC1B,GAAG2B,MAAM;IAC9D,OAAO1B,KAAKkB,IAAI,CAACC,oBAAoBG,SAASpB;AAChD"}
@@ -71,6 +71,12 @@ export type UploadConfig = {
71
71
  adminThumbnail?: GetAdminThumbnail | string;
72
72
  crop?: boolean;
73
73
  disableLocalStorage?: boolean;
74
+ /**
75
+ * Accepts existing headers and can filter/modify them.
76
+ *
77
+ * Useful for adding custom headers to fetch from external providers.
78
+ */
79
+ externalFileHeaderFilter?: (headers: Record<string, string>) => Record<string, string>;
74
80
  filesRequiredOnCreate?: boolean;
75
81
  focalPoint?: boolean;
76
82
  /** Options for original upload file only. For sizes, set each formatOptions individually. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/types.ts"],"sourcesContent":["import type express from 'express'\nimport type serveStatic from 'serve-static'\nimport type { ResizeOptions, Sharp } from 'sharp'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nexport type FileSize = {\n filename: null | string\n filesize: null | number\n height: null | number\n mimeType: null | string\n width: null | number\n}\n\nexport type FileSizes = {\n [size: string]: FileSize\n}\n\nexport type FileData = {\n filename: string\n filesize: number\n height: number\n mimeType: string\n sizes: FileSizes\n tempFilePath?: string\n url?: string\n width: number\n}\n\nexport type ProbedImageSize = {\n height: number\n width: number\n}\n\n/**\n * Params sent to the sharp toFormat() function\n * @link https://sharp.pixelplumbing.com/api-output#toformat\n */\nexport type ImageUploadFormatOptions = {\n format: Parameters<Sharp['toFormat']>[0]\n options?: Parameters<Sharp['toFormat']>[1]\n}\n\n/**\n * Params sent to the sharp trim() function\n * @link https://sharp.pixelplumbing.com/api-resize#trim\n */\nexport type ImageUploadTrimOptions = Parameters<Sharp['trim']>[0]\n\nexport type ImageSize = Omit<ResizeOptions, 'withoutEnlargement'> & {\n /**\n * @deprecated prefer position\n */\n crop?: string // comes from sharp package\n formatOptions?: ImageUploadFormatOptions\n name: string\n trimOptions?: ImageUploadTrimOptions\n /**\n * When an uploaded image is smaller than the defined image size, we have 3 options:\n *\n * `undefined | false | true`\n *\n * 1. `undefined` [default]: uploading images with smaller width AND height than the image size will return null\n * 2. `false`: always enlarge images to the image size\n * 3. `true`: if the image is smaller than the image size, return the original image\n */\n withoutEnlargement?: ResizeOptions['withoutEnlargement']\n}\n\nexport type GetAdminThumbnail = (args: { doc: Record<string, unknown> }) => false | null | string\n\nexport type UploadConfig = {\n /**\n * Represents an admin thumbnail, which can be either a React component or a string.\n * - If a string, it should be one of the image size names.\n * - If a React component, register a function that generates the thumbnail URL using the `useAdminThumbnail` hook.\n **/\n adminThumbnail?: GetAdminThumbnail | string\n crop?: boolean\n disableLocalStorage?: boolean\n filesRequiredOnCreate?: boolean\n focalPoint?: boolean\n /** Options for original upload file only. For sizes, set each formatOptions individually. */\n formatOptions?: ImageUploadFormatOptions\n handlers?: ((\n req: PayloadRequest,\n args: { params: { collection: string; filename: string } },\n ) => Promise<Response> | Response)[]\n imageSizes?: ImageSize[]\n mimeTypes?: string[]\n resizeOptions?: ResizeOptions\n staticDir?: string\n staticOptions?: serveStatic.ServeStaticOptions<express.Response<any, Record<string, any>>>\n trimOptions?: ImageUploadTrimOptions\n}\n\nexport type SanitizedUploadConfig = UploadConfig & {\n staticDir: UploadConfig['staticDir']\n}\n\nexport type File = {\n data: Buffer\n mimetype: string\n name: string\n size: number\n}\n\nexport type FileToSave = {\n buffer: Buffer\n path: string\n}\n"],"names":[],"rangeMappings":"","mappings":"AA2GA,WAGC"}
1
+ {"version":3,"sources":["../../src/uploads/types.ts"],"sourcesContent":["import type express from 'express'\nimport type serveStatic from 'serve-static'\nimport type { ResizeOptions, Sharp } from 'sharp'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nexport type FileSize = {\n filename: null | string\n filesize: null | number\n height: null | number\n mimeType: null | string\n width: null | number\n}\n\nexport type FileSizes = {\n [size: string]: FileSize\n}\n\nexport type FileData = {\n filename: string\n filesize: number\n height: number\n mimeType: string\n sizes: FileSizes\n tempFilePath?: string\n url?: string\n width: number\n}\n\nexport type ProbedImageSize = {\n height: number\n width: number\n}\n\n/**\n * Params sent to the sharp toFormat() function\n * @link https://sharp.pixelplumbing.com/api-output#toformat\n */\nexport type ImageUploadFormatOptions = {\n format: Parameters<Sharp['toFormat']>[0]\n options?: Parameters<Sharp['toFormat']>[1]\n}\n\n/**\n * Params sent to the sharp trim() function\n * @link https://sharp.pixelplumbing.com/api-resize#trim\n */\nexport type ImageUploadTrimOptions = Parameters<Sharp['trim']>[0]\n\nexport type ImageSize = Omit<ResizeOptions, 'withoutEnlargement'> & {\n /**\n * @deprecated prefer position\n */\n crop?: string // comes from sharp package\n formatOptions?: ImageUploadFormatOptions\n name: string\n trimOptions?: ImageUploadTrimOptions\n /**\n * When an uploaded image is smaller than the defined image size, we have 3 options:\n *\n * `undefined | false | true`\n *\n * 1. `undefined` [default]: uploading images with smaller width AND height than the image size will return null\n * 2. `false`: always enlarge images to the image size\n * 3. `true`: if the image is smaller than the image size, return the original image\n */\n withoutEnlargement?: ResizeOptions['withoutEnlargement']\n}\n\nexport type GetAdminThumbnail = (args: { doc: Record<string, unknown> }) => false | null | string\n\nexport type UploadConfig = {\n /**\n * Represents an admin thumbnail, which can be either a React component or a string.\n * - If a string, it should be one of the image size names.\n * - If a React component, register a function that generates the thumbnail URL using the `useAdminThumbnail` hook.\n **/\n adminThumbnail?: GetAdminThumbnail | string\n crop?: boolean\n disableLocalStorage?: boolean\n /**\n * Accepts existing headers and can filter/modify them.\n *\n * Useful for adding custom headers to fetch from external providers.\n */\n externalFileHeaderFilter?: (headers: Record<string, string>) => Record<string, string>\n filesRequiredOnCreate?: boolean\n focalPoint?: boolean\n /** Options for original upload file only. For sizes, set each formatOptions individually. */\n formatOptions?: ImageUploadFormatOptions\n handlers?: ((\n req: PayloadRequest,\n args: { params: { collection: string; filename: string } },\n ) => Promise<Response> | Response)[]\n imageSizes?: ImageSize[]\n mimeTypes?: string[]\n resizeOptions?: ResizeOptions\n staticDir?: string\n staticOptions?: serveStatic.ServeStaticOptions<express.Response<any, Record<string, any>>>\n trimOptions?: ImageUploadTrimOptions\n}\n\nexport type SanitizedUploadConfig = UploadConfig & {\n staticDir: UploadConfig['staticDir']\n}\n\nexport type File = {\n data: Buffer\n mimetype: string\n name: string\n size: number\n}\n\nexport type FileToSave = {\n buffer: Buffer\n path: string\n}\n"],"names":[],"rangeMappings":"","mappings":"AAiHA,WAGC"}
@@ -1,6 +1,6 @@
1
- import type { PayloadRequest } from 'payload/types';
2
1
  import type { SanitizedCollectionConfig } from '../collections/config/types.js';
3
2
  import type { SanitizedGlobalConfig } from '../globals/config/types.js';
3
+ import type { PayloadRequest } from '../types/index.js';
4
4
  export declare const isEntityHidden: ({ hidden, user, }: {
5
5
  hidden: SanitizedCollectionConfig['admin']['hidden'] | SanitizedGlobalConfig['admin']['hidden'];
6
6
  user: PayloadRequest['user'];
@@ -1 +1 @@
1
- {"version":3,"file":"isEntityHidden.d.ts","sourceRoot":"","sources":["../../src/utilities/isEntityHidden.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAEvE,eAAO,MAAM,cAAc,sBAGxB;IACD,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC/F,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,YAEA,CAAA"}
1
+ {"version":3,"file":"isEntityHidden.d.ts","sourceRoot":"","sources":["../../src/utilities/isEntityHidden.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,eAAO,MAAM,cAAc,sBAGxB;IACD,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC/F,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,YAEA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/isEntityHidden.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload/types'\n\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nexport const isEntityHidden = ({\n hidden,\n user,\n}: {\n hidden: SanitizedCollectionConfig['admin']['hidden'] | SanitizedGlobalConfig['admin']['hidden']\n user: PayloadRequest['user']\n}) => {\n return typeof hidden === 'function' ? hidden({ user }) : hidden === true\n}\n"],"names":["isEntityHidden","hidden","user"],"rangeMappings":";;;;","mappings":"AAKA,OAAO,MAAMA,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,IAAI,EAIL;IACC,OAAO,OAAOD,WAAW,aAAaA,OAAO;QAAEC;IAAK,KAAKD,WAAW;AACtE,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/isEntityHidden.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nexport const isEntityHidden = ({\n hidden,\n user,\n}: {\n hidden: SanitizedCollectionConfig['admin']['hidden'] | SanitizedGlobalConfig['admin']['hidden']\n user: PayloadRequest['user']\n}) => {\n return typeof hidden === 'function' ? hidden({ user }) : hidden === true\n}\n"],"names":["isEntityHidden","hidden","user"],"rangeMappings":";;;;","mappings":"AAIA,OAAO,MAAMA,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,IAAI,EAIL;IACC,OAAO,OAAOD,WAAW,aAAaA,OAAO;QAAEC;IAAK,KAAKD,WAAW;AACtE,EAAC"}
@@ -112,7 +112,7 @@ export const saveVersion = async ({ id, autosave, collection, docWithLocales: do
112
112
  createdVersion.createdAt = result.createdAt;
113
113
  createdVersion.updatedAt = result.updatedAt;
114
114
  createdVersion = sanitizeInternalFields(createdVersion);
115
- createdVersion.id = id;
115
+ createdVersion.id = result.parent;
116
116
  return createdVersion;
117
117
  };
118
118
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig, TypeWithID } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { deepCopyObject } from '../utilities/deepCopyObject.js'\nimport sanitizeInternalFields from '../utilities/sanitizeInternalFields.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\n\ntype Args = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: any\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n payload: Payload\n req?: PayloadRequest\n}\n\nexport const saveVersion = async ({\n id,\n autosave,\n collection,\n docWithLocales: doc,\n draft,\n global,\n payload,\n req,\n}: Args): Promise<TypeWithID> => {\n let result\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData = deepCopyObject(doc)\n if (draft) versionData._status = 'draft'\n if (versionData._id) delete versionData._id\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n if (collection) {\n ;({ docs } = await payload.db.findVersions({\n ...findVersionArgs,\n collection: collection.slug,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions({\n ...findVersionArgs,\n global: global.slug,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion?.autosave === true) {\n createNewVersion = false\n\n const data: Record<string, unknown> = {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n version: versionData,\n }\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: data as TypeWithID,\n }\n\n if (collection) {\n result = await payload.db.updateVersion({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion({\n ...updateVersionArgs,\n global: global.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n if (collection) {\n result = await payload.db.createVersion({\n autosave: Boolean(autosave),\n collectionSlug: collection.slug,\n createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now,\n parent: collection ? id : undefined,\n req,\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n versionData,\n })\n }\n\n if (global) {\n result = await payload.db.createGlobalVersion({\n autosave: Boolean(autosave),\n createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now,\n globalSlug: global.slug,\n parent: collection ? id : undefined,\n req,\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n versionData,\n })\n }\n }\n } catch (err) {\n let errorMessage: string\n\n if (collection)\n errorMessage = `There was an error while saving a version for the ${collection.labels.singular} with ID ${id}.`\n if (global)\n errorMessage = `There was an error while saving a version for the global ${global.label}.`\n payload.logger.error(errorMessage)\n payload.logger.error(err)\n }\n\n let max = 100\n\n if (collection && typeof collection.versions.maxPerDoc === 'number')\n max = collection.versions.maxPerDoc\n if (global && typeof global.versions.max === 'number') max = global.versions.max\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n\n let createdVersion = result.version\n createdVersion.createdAt = result.createdAt\n createdVersion.updatedAt = result.updatedAt\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = id\n\n return createdVersion\n}\n"],"names":["deepCopyObject","sanitizeInternalFields","enforceMaxVersions","saveVersion","id","autosave","collection","docWithLocales","doc","draft","global","payload","req","result","createNewVersion","now","Date","toISOString","versionData","_status","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","data","createdAt","updatedAt","version","updateVersionArgs","updateVersion","updateGlobalVersion","createVersion","Boolean","collectionSlug","undefined","createGlobalVersion","globalSlug","err","errorMessage","labels","singular","label","logger","error","max","versions","maxPerDoc","createdVersion"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/versions/saveVersion.ts"],"sourcesContent":["import type { SanitizedCollectionConfig, TypeWithID } from '../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { deepCopyObject } from '../utilities/deepCopyObject.js'\nimport sanitizeInternalFields from '../utilities/sanitizeInternalFields.js'\nimport { enforceMaxVersions } from './enforceMaxVersions.js'\n\ntype Args = {\n autosave?: boolean\n collection?: SanitizedCollectionConfig\n docWithLocales: any\n draft?: boolean\n global?: SanitizedGlobalConfig\n id?: number | string\n payload: Payload\n req?: PayloadRequest\n}\n\nexport const saveVersion = async ({\n id,\n autosave,\n collection,\n docWithLocales: doc,\n draft,\n global,\n payload,\n req,\n}: Args): Promise<TypeWithID> => {\n let result\n let createNewVersion = true\n const now = new Date().toISOString()\n const versionData = deepCopyObject(doc)\n if (draft) versionData._status = 'draft'\n if (versionData._id) delete versionData._id\n\n try {\n if (autosave) {\n let docs\n const findVersionArgs = {\n limit: 1,\n pagination: false,\n req,\n sort: '-updatedAt',\n }\n if (collection) {\n ;({ docs } = await payload.db.findVersions({\n ...findVersionArgs,\n collection: collection.slug,\n req,\n where: {\n parent: {\n equals: id,\n },\n },\n }))\n } else {\n ;({ docs } = await payload.db.findGlobalVersions({\n ...findVersionArgs,\n global: global.slug,\n req,\n }))\n }\n const [latestVersion] = docs\n\n // overwrite the latest version if it's set to autosave\n if (latestVersion?.autosave === true) {\n createNewVersion = false\n\n const data: Record<string, unknown> = {\n createdAt: new Date(latestVersion.createdAt).toISOString(),\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n version: versionData,\n }\n\n const updateVersionArgs = {\n id: latestVersion.id,\n req,\n versionData: data as TypeWithID,\n }\n\n if (collection) {\n result = await payload.db.updateVersion({\n ...updateVersionArgs,\n collection: collection.slug,\n req,\n })\n } else {\n result = await payload.db.updateGlobalVersion({\n ...updateVersionArgs,\n global: global.slug,\n req,\n })\n }\n }\n }\n\n if (createNewVersion) {\n if (collection) {\n result = await payload.db.createVersion({\n autosave: Boolean(autosave),\n collectionSlug: collection.slug,\n createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now,\n parent: collection ? id : undefined,\n req,\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n versionData,\n })\n }\n\n if (global) {\n result = await payload.db.createGlobalVersion({\n autosave: Boolean(autosave),\n createdAt: doc?.createdAt ? new Date(doc.createdAt).toISOString() : now,\n globalSlug: global.slug,\n parent: collection ? id : undefined,\n req,\n updatedAt: draft ? now : new Date(doc.updatedAt).toISOString(),\n versionData,\n })\n }\n }\n } catch (err) {\n let errorMessage: string\n\n if (collection)\n errorMessage = `There was an error while saving a version for the ${collection.labels.singular} with ID ${id}.`\n if (global)\n errorMessage = `There was an error while saving a version for the global ${global.label}.`\n payload.logger.error(errorMessage)\n payload.logger.error(err)\n }\n\n let max = 100\n\n if (collection && typeof collection.versions.maxPerDoc === 'number')\n max = collection.versions.maxPerDoc\n if (global && typeof global.versions.max === 'number') max = global.versions.max\n\n if (createNewVersion && max > 0) {\n await enforceMaxVersions({\n id,\n collection,\n global,\n max,\n payload,\n req,\n })\n }\n\n let createdVersion = result.version\n createdVersion.createdAt = result.createdAt\n createdVersion.updatedAt = result.updatedAt\n\n createdVersion = sanitizeInternalFields(createdVersion)\n createdVersion.id = result.parent\n\n return createdVersion\n}\n"],"names":["deepCopyObject","sanitizeInternalFields","enforceMaxVersions","saveVersion","id","autosave","collection","docWithLocales","doc","draft","global","payload","req","result","createNewVersion","now","Date","toISOString","versionData","_status","_id","docs","findVersionArgs","limit","pagination","sort","db","findVersions","slug","where","parent","equals","findGlobalVersions","latestVersion","data","createdAt","updatedAt","version","updateVersionArgs","updateVersion","updateGlobalVersion","createVersion","Boolean","collectionSlug","undefined","createGlobalVersion","globalSlug","err","errorMessage","labels","singular","label","logger","error","max","versions","maxPerDoc","createdVersion"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.0.0-beta.10",
3
+ "version": "3.0.0-beta.11",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -35,6 +35,7 @@
35
35
  "find-up": "4.1.0",
36
36
  "get-tsconfig": "^4.7.2",
37
37
  "http-status": "1.6.2",
38
+ "image-size": "^1.1.1",
38
39
  "joi": "^17.12.1",
39
40
  "json-schema-to-typescript": "11.0.3",
40
41
  "jsonwebtoken": "9.0.1",
@@ -45,11 +46,19 @@
45
46
  "pino": "8.15.0",
46
47
  "pino-pretty": "10.2.0",
47
48
  "pluralize": "8.0.0",
48
- "probe-image-size": "^7.2.3",
49
49
  "sanitize-filename": "1.6.3",
50
50
  "scheduler": "0.23.0",
51
51
  "scmp": "2.1.0",
52
- "@payloadcms/translations": "3.0.0-beta.10"
52
+ "uuid": "^9.0.1",
53
+ "@payloadcms/translations": "3.0.0-beta.11"
54
+ },
55
+ "peerDependencies": {
56
+ "@swc/core": "^1.4.13"
57
+ },
58
+ "peerDependenciesMeta": {
59
+ "@swc/core": {
60
+ "optional": true
61
+ }
53
62
  },
54
63
  "devDependencies": {
55
64
  "@monaco-editor/react": "4.5.1",