@payloadcms/plugin-cloud-storage 3.70.0-canary.9 → 3.71.0-internal-debug.80dab4c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/fields/getFields.d.ts +5 -1
- package/dist/admin/fields/getFields.d.ts.map +1 -1
- package/dist/admin/fields/getFields.js +4 -4
- package/dist/admin/fields/getFields.js.map +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +6 -4
- package/dist/admin/index.js.map +1 -1
- package/dist/fields/getFields.d.ts +6 -2
- package/dist/fields/getFields.d.ts.map +1 -1
- package/dist/fields/getFields.js +50 -37
- package/dist/fields/getFields.js.map +1 -1
- package/dist/hooks/afterChange.d.ts +9 -0
- package/dist/hooks/afterChange.d.ts.map +1 -0
- package/dist/hooks/{beforeChange.js → afterChange.js} +13 -13
- package/dist/hooks/afterChange.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +37 -9
- package/dist/plugin.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -4
- package/dist/hooks/beforeChange.d.ts +0 -9
- package/dist/hooks/beforeChange.d.ts.map +0 -1
- package/dist/hooks/beforeChange.js.map +0 -1
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { CollectionConfig, Field } from 'payload';
|
|
2
2
|
interface Args {
|
|
3
|
+
/**
|
|
4
|
+
* When true, always insert the prefix field regardless of whether a prefix is configured.
|
|
5
|
+
*/
|
|
6
|
+
alwaysInsertFields?: boolean;
|
|
3
7
|
collection: CollectionConfig;
|
|
4
8
|
prefix?: string;
|
|
5
9
|
}
|
|
6
|
-
export declare const getFields: ({ collection, prefix }: Args) => Field[];
|
|
10
|
+
export declare const getFields: ({ alwaysInsertFields, collection, prefix }: Args) => Field[];
|
|
7
11
|
export {};
|
|
8
12
|
//# sourceMappingURL=getFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../../src/admin/fields/getFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAyB,MAAM,SAAS,CAAA;AAI7E,UAAU,IAAI;IACZ,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../../src/admin/fields/getFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAyB,MAAM,SAAS,CAAA;AAI7E,UAAU,IAAI;IACZ;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,SAAS,+CAAgD,IAAI,KAAG,KAAK,EAoHjF,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
|
-
export const getFields = ({ collection, prefix })=>{
|
|
2
|
+
export const getFields = ({ alwaysInsertFields, collection, prefix })=>{
|
|
3
3
|
const baseURLField = {
|
|
4
4
|
name: 'url',
|
|
5
5
|
type: 'text',
|
|
@@ -73,8 +73,8 @@ export const getFields = ({ collection, prefix })=>{
|
|
|
73
73
|
};
|
|
74
74
|
fields.push(sizesField);
|
|
75
75
|
}
|
|
76
|
-
// If prefix is enabled, save it to db
|
|
77
|
-
if (typeof prefix !== 'undefined') {
|
|
76
|
+
// If prefix is enabled or alwaysInsertFields is true, save it to db
|
|
77
|
+
if (typeof prefix !== 'undefined' || alwaysInsertFields) {
|
|
78
78
|
let existingPrefixFieldIndex = -1;
|
|
79
79
|
const existingPrefixField = fields.find((existingField, i)=>{
|
|
80
80
|
if ('name' in existingField && existingField.name === 'prefix') {
|
|
@@ -89,7 +89,7 @@ export const getFields = ({ collection, prefix })=>{
|
|
|
89
89
|
fields.push({
|
|
90
90
|
...basePrefixField,
|
|
91
91
|
...existingPrefixField || {},
|
|
92
|
-
defaultValue: path.posix.join(prefix)
|
|
92
|
+
defaultValue: prefix ? path.posix.join(prefix) : ''
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
return fields;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/fields/getFields.ts"],"sourcesContent":["import type { CollectionConfig, Field, GroupField, TextField } from 'payload'\n\nimport path from 'path'\n\ninterface Args {\n collection: CollectionConfig\n prefix?: string\n}\n\nexport const getFields = ({ collection, prefix }: Args): Field[] => {\n const baseURLField: TextField = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n const basePrefixField: TextField = {\n name: 'prefix',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n }\n\n const fields = [...collection.fields]\n\n // Inject a hook into all URL fields to generate URLs\n\n let existingURLFieldIndex = -1\n\n const existingURLField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'url') {\n existingURLFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingURLFieldIndex > -1) {\n fields.splice(existingURLFieldIndex, 1)\n }\n\n fields.push({\n ...baseURLField,\n ...(existingURLField || {}),\n } as TextField)\n\n if (typeof collection.upload === 'object' && collection.upload.imageSizes) {\n let existingSizesFieldIndex = -1\n\n const existingSizesField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'sizes') {\n existingSizesFieldIndex = i\n return true\n }\n\n return false\n }) as GroupField\n\n if (existingSizesFieldIndex > -1) {\n fields.splice(existingSizesFieldIndex, 1)\n }\n\n const sizesField: Field = {\n ...(existingSizesField || {}),\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: collection.upload.imageSizes.map((size) => {\n const existingSizeField = existingSizesField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === size.name,\n ) as GroupField\n\n const existingSizeURLField = existingSizeField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === 'url',\n ) as GroupField\n\n return {\n ...existingSizeField,\n name: size.name,\n type: 'group',\n fields: [\n {\n ...(existingSizeURLField || {}),\n ...baseURLField,\n },\n ],\n } as Field\n }),\n }\n\n fields.push(sizesField)\n }\n\n // If prefix is enabled, save it to db\n if (typeof prefix !== 'undefined') {\n let existingPrefixFieldIndex = -1\n\n const existingPrefixField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'prefix') {\n existingPrefixFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingPrefixFieldIndex > -1) {\n fields.splice(existingPrefixFieldIndex, 1)\n }\n\n fields.push({\n ...basePrefixField,\n ...(existingPrefixField || {}),\n defaultValue: path.posix.join(prefix),\n } as TextField)\n }\n\n return fields\n}\n"],"names":["path","getFields","collection","prefix","baseURLField","name","type","admin","hidden","readOnly","label","basePrefixField","fields","existingURLFieldIndex","existingURLField","find","existingField","i","splice","push","upload","imageSizes","existingSizesFieldIndex","existingSizesField","sizesField","map","size","existingSizeField","existingSizeURLField","existingPrefixFieldIndex","existingPrefixField","defaultValue","posix","join"],"mappings":"AAEA,OAAOA,UAAU,OAAM;
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/fields/getFields.ts"],"sourcesContent":["import type { CollectionConfig, Field, GroupField, TextField } from 'payload'\n\nimport path from 'path'\n\ninterface Args {\n /**\n * When true, always insert the prefix field regardless of whether a prefix is configured.\n */\n alwaysInsertFields?: boolean\n collection: CollectionConfig\n prefix?: string\n}\n\nexport const getFields = ({ alwaysInsertFields, collection, prefix }: Args): Field[] => {\n const baseURLField: TextField = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n const basePrefixField: TextField = {\n name: 'prefix',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n }\n\n const fields = [...collection.fields]\n\n // Inject a hook into all URL fields to generate URLs\n\n let existingURLFieldIndex = -1\n\n const existingURLField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'url') {\n existingURLFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingURLFieldIndex > -1) {\n fields.splice(existingURLFieldIndex, 1)\n }\n\n fields.push({\n ...baseURLField,\n ...(existingURLField || {}),\n } as TextField)\n\n if (typeof collection.upload === 'object' && collection.upload.imageSizes) {\n let existingSizesFieldIndex = -1\n\n const existingSizesField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'sizes') {\n existingSizesFieldIndex = i\n return true\n }\n\n return false\n }) as GroupField\n\n if (existingSizesFieldIndex > -1) {\n fields.splice(existingSizesFieldIndex, 1)\n }\n\n const sizesField: Field = {\n ...(existingSizesField || {}),\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: collection.upload.imageSizes.map((size) => {\n const existingSizeField = existingSizesField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === size.name,\n ) as GroupField\n\n const existingSizeURLField = existingSizeField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === 'url',\n ) as GroupField\n\n return {\n ...existingSizeField,\n name: size.name,\n type: 'group',\n fields: [\n {\n ...(existingSizeURLField || {}),\n ...baseURLField,\n },\n ],\n } as Field\n }),\n }\n\n fields.push(sizesField)\n }\n\n // If prefix is enabled or alwaysInsertFields is true, save it to db\n if (typeof prefix !== 'undefined' || alwaysInsertFields) {\n let existingPrefixFieldIndex = -1\n\n const existingPrefixField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'prefix') {\n existingPrefixFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingPrefixFieldIndex > -1) {\n fields.splice(existingPrefixFieldIndex, 1)\n }\n\n fields.push({\n ...basePrefixField,\n ...(existingPrefixField || {}),\n defaultValue: prefix ? path.posix.join(prefix) : '',\n } as TextField)\n }\n\n return fields\n}\n"],"names":["path","getFields","alwaysInsertFields","collection","prefix","baseURLField","name","type","admin","hidden","readOnly","label","basePrefixField","fields","existingURLFieldIndex","existingURLField","find","existingField","i","splice","push","upload","imageSizes","existingSizesFieldIndex","existingSizesField","sizesField","map","size","existingSizeField","existingSizeURLField","existingPrefixFieldIndex","existingPrefixField","defaultValue","posix","join"],"mappings":"AAEA,OAAOA,UAAU,OAAM;AAWvB,OAAO,MAAMC,YAAY,CAAC,EAAEC,kBAAkB,EAAEC,UAAU,EAAEC,MAAM,EAAQ;IACxE,MAAMC,eAA0B;QAC9BC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,QAAQ;YACRC,UAAU;QACZ;QACAC,OAAO;IACT;IAEA,MAAMC,kBAA6B;QACjCN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,QAAQ;YACRC,UAAU;QACZ;IACF;IAEA,MAAMG,SAAS;WAAIV,WAAWU,MAAM;KAAC;IAErC,qDAAqD;IAErD,IAAIC,wBAAwB,CAAC;IAE7B,MAAMC,mBAAmBF,OAAOG,IAAI,CAAC,CAACC,eAAeC;QACnD,IAAI,UAAUD,iBAAiBA,cAAcX,IAAI,KAAK,OAAO;YAC3DQ,wBAAwBI;YACxB,OAAO;QACT;QACA,OAAO;IACT;IAEA,IAAIJ,wBAAwB,CAAC,GAAG;QAC9BD,OAAOM,MAAM,CAACL,uBAAuB;IACvC;IAEAD,OAAOO,IAAI,CAAC;QACV,GAAGf,YAAY;QACf,GAAIU,oBAAoB,CAAC,CAAC;IAC5B;IAEA,IAAI,OAAOZ,WAAWkB,MAAM,KAAK,YAAYlB,WAAWkB,MAAM,CAACC,UAAU,EAAE;QACzE,IAAIC,0BAA0B,CAAC;QAE/B,MAAMC,qBAAqBX,OAAOG,IAAI,CAAC,CAACC,eAAeC;YACrD,IAAI,UAAUD,iBAAiBA,cAAcX,IAAI,KAAK,SAAS;gBAC7DiB,0BAA0BL;gBAC1B,OAAO;YACT;YAEA,OAAO;QACT;QAEA,IAAIK,0BAA0B,CAAC,GAAG;YAChCV,OAAOM,MAAM,CAACI,yBAAyB;QACzC;QAEA,MAAME,aAAoB;YACxB,GAAID,sBAAsB,CAAC,CAAC;YAC5BlB,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,QAAQ;YACV;YACAI,QAAQV,WAAWkB,MAAM,CAACC,UAAU,CAACI,GAAG,CAAC,CAACC;gBACxC,MAAMC,oBAAoBJ,oBAAoBX,OAAOG,KACnD,CAACC,gBAAkB,UAAUA,iBAAiBA,cAAcX,IAAI,KAAKqB,KAAKrB,IAAI;gBAGhF,MAAMuB,uBAAuBD,mBAAmBf,OAAOG,KACrD,CAACC,gBAAkB,UAAUA,iBAAiBA,cAAcX,IAAI,KAAK;gBAGvE,OAAO;oBACL,GAAGsB,iBAAiB;oBACpBtB,MAAMqB,KAAKrB,IAAI;oBACfC,MAAM;oBACNM,QAAQ;wBACN;4BACE,GAAIgB,wBAAwB,CAAC,CAAC;4BAC9B,GAAGxB,YAAY;wBACjB;qBACD;gBACH;YACF;QACF;QAEAQ,OAAOO,IAAI,CAACK;IACd;IAEA,oEAAoE;IACpE,IAAI,OAAOrB,WAAW,eAAeF,oBAAoB;QACvD,IAAI4B,2BAA2B,CAAC;QAEhC,MAAMC,sBAAsBlB,OAAOG,IAAI,CAAC,CAACC,eAAeC;YACtD,IAAI,UAAUD,iBAAiBA,cAAcX,IAAI,KAAK,UAAU;gBAC9DwB,2BAA2BZ;gBAC3B,OAAO;YACT;YACA,OAAO;QACT;QAEA,IAAIY,2BAA2B,CAAC,GAAG;YACjCjB,OAAOM,MAAM,CAACW,0BAA0B;QAC1C;QAEAjB,OAAOO,IAAI,CAAC;YACV,GAAGR,eAAe;YAClB,GAAImB,uBAAuB,CAAC,CAAC;YAC7BC,cAAc5B,SAASJ,KAAKiC,KAAK,CAACC,IAAI,CAAC9B,UAAU;QACnD;IACF;IAEA,OAAOS;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAOhD,eAAO,MAAM,YAAY,kBACP,aAAa,sBACZ,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAOhD,eAAO,MAAM,YAAY,kBACP,aAAa,sBACZ,MAAM,KAAG,MA+BzB,CAAA"}
|
package/dist/admin/index.js
CHANGED
|
@@ -2,20 +2,22 @@ import { getFields } from './fields/getFields.js';
|
|
|
2
2
|
// This is the admin plugin cloud-storage stubfile.
|
|
3
3
|
// It only extends the config that are required by the admin UI.
|
|
4
4
|
export const cloudStorage = (pluginOptions)=>(incomingConfig)=>{
|
|
5
|
-
const { collections: allCollectionOptions, enabled } = pluginOptions;
|
|
5
|
+
const { alwaysInsertFields, collections: allCollectionOptions, enabled } = pluginOptions;
|
|
6
6
|
const config = {
|
|
7
7
|
...incomingConfig
|
|
8
8
|
};
|
|
9
|
-
//
|
|
10
|
-
if (enabled === false) {
|
|
9
|
+
// If disabled and alwaysInsertFields is not true, skip processing
|
|
10
|
+
if (enabled === false && !alwaysInsertFields) {
|
|
11
11
|
return config;
|
|
12
12
|
}
|
|
13
13
|
return {
|
|
14
14
|
...config,
|
|
15
15
|
collections: (config.collections || []).map((existingCollection)=>{
|
|
16
16
|
const options = allCollectionOptions[existingCollection.slug];
|
|
17
|
-
if
|
|
17
|
+
// Process if adapter exists OR if alwaysInsertFields is true and this collection is configured
|
|
18
|
+
if (options?.adapter || alwaysInsertFields && options) {
|
|
18
19
|
const fields = getFields({
|
|
20
|
+
alwaysInsertFields,
|
|
19
21
|
collection: existingCollection,
|
|
20
22
|
prefix: options.prefix
|
|
21
23
|
});
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/admin/index.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport type { PluginOptions } from '../types.js'\n\nimport { getFields } from './fields/getFields.js'\n\n// This is the admin plugin cloud-storage stubfile.\n// It only extends the config that are required by the admin UI.\n\nexport const cloudStorage =\n (pluginOptions: PluginOptions) =>\n (incomingConfig: Config): Config => {\n const { collections: allCollectionOptions, enabled } = pluginOptions\n const config = { ...incomingConfig }\n\n //
|
|
1
|
+
{"version":3,"sources":["../../src/admin/index.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport type { PluginOptions } from '../types.js'\n\nimport { getFields } from './fields/getFields.js'\n\n// This is the admin plugin cloud-storage stubfile.\n// It only extends the config that are required by the admin UI.\n\nexport const cloudStorage =\n (pluginOptions: PluginOptions) =>\n (incomingConfig: Config): Config => {\n const { alwaysInsertFields, collections: allCollectionOptions, enabled } = pluginOptions\n const config = { ...incomingConfig }\n\n // If disabled and alwaysInsertFields is not true, skip processing\n if (enabled === false && !alwaysInsertFields) {\n return config\n }\n\n return {\n ...config,\n collections: (config.collections || []).map((existingCollection) => {\n const options = allCollectionOptions[existingCollection.slug]\n\n // Process if adapter exists OR if alwaysInsertFields is true and this collection is configured\n if (options?.adapter || (alwaysInsertFields && options)) {\n const fields = getFields({\n alwaysInsertFields,\n collection: existingCollection,\n prefix: options.prefix,\n })\n\n return {\n ...existingCollection,\n fields,\n }\n }\n\n return existingCollection\n }),\n }\n }\n"],"names":["getFields","cloudStorage","pluginOptions","incomingConfig","alwaysInsertFields","collections","allCollectionOptions","enabled","config","map","existingCollection","options","slug","adapter","fields","collection","prefix"],"mappings":"AAIA,SAASA,SAAS,QAAQ,wBAAuB;AAEjD,mDAAmD;AACnD,gEAAgE;AAEhE,OAAO,MAAMC,eACX,CAACC,gBACD,CAACC;QACC,MAAM,EAAEC,kBAAkB,EAAEC,aAAaC,oBAAoB,EAAEC,OAAO,EAAE,GAAGL;QAC3E,MAAMM,SAAS;YAAE,GAAGL,cAAc;QAAC;QAEnC,kEAAkE;QAClE,IAAII,YAAY,SAAS,CAACH,oBAAoB;YAC5C,OAAOI;QACT;QAEA,OAAO;YACL,GAAGA,MAAM;YACTH,aAAa,AAACG,CAAAA,OAAOH,WAAW,IAAI,EAAE,AAAD,EAAGI,GAAG,CAAC,CAACC;gBAC3C,MAAMC,UAAUL,oBAAoB,CAACI,mBAAmBE,IAAI,CAAC;gBAE7D,+FAA+F;gBAC/F,IAAID,SAASE,WAAYT,sBAAsBO,SAAU;oBACvD,MAAMG,SAASd,UAAU;wBACvBI;wBACAW,YAAYL;wBACZM,QAAQL,QAAQK,MAAM;oBACxB;oBAEA,OAAO;wBACL,GAAGN,kBAAkB;wBACrBI;oBACF;gBACF;gBAEA,OAAOJ;YACT;QACF;IACF,EAAC"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import type { CollectionConfig, Field } from 'payload';
|
|
2
2
|
import type { GeneratedAdapter, GenerateFileURL } from '../types.js';
|
|
3
3
|
interface Args {
|
|
4
|
-
adapter
|
|
4
|
+
adapter?: GeneratedAdapter;
|
|
5
|
+
/**
|
|
6
|
+
* When true, always insert the prefix field regardless of whether a prefix is configured.
|
|
7
|
+
*/
|
|
8
|
+
alwaysInsertFields?: boolean;
|
|
5
9
|
collection: CollectionConfig;
|
|
6
10
|
disablePayloadAccessControl?: true;
|
|
7
11
|
generateFileURL?: GenerateFileURL;
|
|
8
12
|
prefix?: string;
|
|
9
13
|
}
|
|
10
|
-
export declare const getFields: ({ adapter, collection, disablePayloadAccessControl, generateFileURL, prefix, }: Args) => Field[];
|
|
14
|
+
export declare const getFields: ({ adapter, alwaysInsertFields, collection, disablePayloadAccessControl, generateFileURL, prefix, }: Args) => Field[];
|
|
11
15
|
export {};
|
|
12
16
|
//# sourceMappingURL=getFields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/fields/getFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAyB,MAAM,SAAS,CAAA;AAI7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIpE,UAAU,IAAI;IACZ,OAAO,EAAE,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/fields/getFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAyB,MAAM,SAAS,CAAA;AAI7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIpE,UAAU,IAAI;IACZ,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,UAAU,EAAE,gBAAgB,CAAA;IAC5B,2BAA2B,CAAC,EAAE,IAAI,CAAA;IAClC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,SAAS,uGAOnB,IAAI,KAAG,KAAK,EAuJd,CAAA"}
|
package/dist/fields/getFields.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { getAfterReadHook } from '../hooks/afterRead.js';
|
|
3
|
-
export const getFields = ({ adapter, collection, disablePayloadAccessControl, generateFileURL, prefix })=>{
|
|
3
|
+
export const getFields = ({ adapter, alwaysInsertFields, collection, disablePayloadAccessControl, generateFileURL, prefix })=>{
|
|
4
4
|
const baseURLField = {
|
|
5
5
|
name: 'url',
|
|
6
6
|
type: 'text',
|
|
@@ -20,7 +20,7 @@ export const getFields = ({ adapter, collection, disablePayloadAccessControl, ge
|
|
|
20
20
|
};
|
|
21
21
|
const fields = [
|
|
22
22
|
...collection.fields,
|
|
23
|
-
...adapter
|
|
23
|
+
...adapter?.fields || []
|
|
24
24
|
];
|
|
25
25
|
// Inject a hook into all URL fields to generate URLs
|
|
26
26
|
let existingURLFieldIndex = -1;
|
|
@@ -34,21 +34,29 @@ export const getFields = ({ adapter, collection, disablePayloadAccessControl, ge
|
|
|
34
34
|
if (existingURLFieldIndex > -1) {
|
|
35
35
|
fields.splice(existingURLFieldIndex, 1);
|
|
36
36
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
37
|
+
// Only add afterRead hook if adapter is provided
|
|
38
|
+
if (adapter) {
|
|
39
|
+
fields.push({
|
|
40
|
+
...baseURLField,
|
|
41
|
+
...existingURLField || {},
|
|
42
|
+
hooks: {
|
|
43
|
+
afterRead: [
|
|
44
|
+
getAfterReadHook({
|
|
45
|
+
adapter,
|
|
46
|
+
collection,
|
|
47
|
+
disablePayloadAccessControl,
|
|
48
|
+
generateFileURL
|
|
49
|
+
}),
|
|
50
|
+
...existingURLField?.hooks?.afterRead || []
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
fields.push({
|
|
56
|
+
...baseURLField,
|
|
57
|
+
...existingURLField || {}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
52
60
|
if (typeof collection.upload === 'object' && collection.upload.imageSizes) {
|
|
53
61
|
let existingSizesFieldIndex = -1;
|
|
54
62
|
const existingSizesField = fields.find((existingField, i)=>{
|
|
@@ -71,36 +79,41 @@ export const getFields = ({ adapter, collection, disablePayloadAccessControl, ge
|
|
|
71
79
|
fields: collection.upload.imageSizes.map((size)=>{
|
|
72
80
|
const existingSizeField = existingSizesField?.fields.find((existingField)=>'name' in existingField && existingField.name === size.name);
|
|
73
81
|
const existingSizeURLField = existingSizeField?.fields.find((existingField)=>'name' in existingField && existingField.name === 'url');
|
|
82
|
+
// Only add afterRead hook if adapter is provided
|
|
83
|
+
const sizeURLField = adapter ? {
|
|
84
|
+
...existingSizeURLField || {},
|
|
85
|
+
...baseURLField,
|
|
86
|
+
hooks: {
|
|
87
|
+
afterRead: [
|
|
88
|
+
getAfterReadHook({
|
|
89
|
+
adapter,
|
|
90
|
+
collection,
|
|
91
|
+
disablePayloadAccessControl,
|
|
92
|
+
generateFileURL,
|
|
93
|
+
size
|
|
94
|
+
}),
|
|
95
|
+
...typeof existingSizeURLField === 'object' && 'hooks' in existingSizeURLField && existingSizeURLField?.hooks?.afterRead || []
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
} : {
|
|
99
|
+
...existingSizeURLField || {},
|
|
100
|
+
...baseURLField
|
|
101
|
+
};
|
|
74
102
|
return {
|
|
75
103
|
...existingSizeField,
|
|
76
104
|
name: size.name,
|
|
77
105
|
type: 'group',
|
|
78
106
|
fields: [
|
|
79
|
-
...adapter
|
|
80
|
-
|
|
81
|
-
...existingSizeURLField || {},
|
|
82
|
-
...baseURLField,
|
|
83
|
-
hooks: {
|
|
84
|
-
afterRead: [
|
|
85
|
-
getAfterReadHook({
|
|
86
|
-
adapter,
|
|
87
|
-
collection,
|
|
88
|
-
disablePayloadAccessControl,
|
|
89
|
-
generateFileURL,
|
|
90
|
-
size
|
|
91
|
-
}),
|
|
92
|
-
...typeof existingSizeURLField === 'object' && 'hooks' in existingSizeURLField && existingSizeURLField?.hooks?.afterRead || []
|
|
93
|
-
]
|
|
94
|
-
}
|
|
95
|
-
}
|
|
107
|
+
...adapter?.fields || [],
|
|
108
|
+
sizeURLField
|
|
96
109
|
]
|
|
97
110
|
};
|
|
98
111
|
})
|
|
99
112
|
};
|
|
100
113
|
fields.push(sizesField);
|
|
101
114
|
}
|
|
102
|
-
// If prefix is enabled, save it to db
|
|
103
|
-
if (typeof prefix !== 'undefined') {
|
|
115
|
+
// If prefix is enabled or alwaysInsertFields is true, save it to db
|
|
116
|
+
if (typeof prefix !== 'undefined' || alwaysInsertFields) {
|
|
104
117
|
let existingPrefixFieldIndex = -1;
|
|
105
118
|
const existingPrefixField = fields.find((existingField, i)=>{
|
|
106
119
|
if ('name' in existingField && existingField.name === 'prefix') {
|
|
@@ -115,7 +128,7 @@ export const getFields = ({ adapter, collection, disablePayloadAccessControl, ge
|
|
|
115
128
|
fields.push({
|
|
116
129
|
...basePrefixField,
|
|
117
130
|
...existingPrefixField || {},
|
|
118
|
-
defaultValue: path.posix.join(prefix)
|
|
131
|
+
defaultValue: prefix ? path.posix.join(prefix) : ''
|
|
119
132
|
});
|
|
120
133
|
}
|
|
121
134
|
return fields;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/getFields.ts"],"sourcesContent":["import type { CollectionConfig, Field, GroupField, TextField } from 'payload'\n\nimport path from 'path'\n\nimport type { GeneratedAdapter, GenerateFileURL } from '../types.js'\n\nimport { getAfterReadHook } from '../hooks/afterRead.js'\n\ninterface Args {\n adapter
|
|
1
|
+
{"version":3,"sources":["../../src/fields/getFields.ts"],"sourcesContent":["import type { CollectionConfig, Field, GroupField, TextField } from 'payload'\n\nimport path from 'path'\n\nimport type { GeneratedAdapter, GenerateFileURL } from '../types.js'\n\nimport { getAfterReadHook } from '../hooks/afterRead.js'\n\ninterface Args {\n adapter?: GeneratedAdapter\n /**\n * When true, always insert the prefix field regardless of whether a prefix is configured.\n */\n alwaysInsertFields?: boolean\n collection: CollectionConfig\n disablePayloadAccessControl?: true\n generateFileURL?: GenerateFileURL\n prefix?: string\n}\n\nexport const getFields = ({\n adapter,\n alwaysInsertFields,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n prefix,\n}: Args): Field[] => {\n const baseURLField: TextField = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n const basePrefixField: TextField = {\n name: 'prefix',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n }\n\n const fields = [...collection.fields, ...(adapter?.fields || [])]\n\n // Inject a hook into all URL fields to generate URLs\n\n let existingURLFieldIndex = -1\n\n const existingURLField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'url') {\n existingURLFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingURLFieldIndex > -1) {\n fields.splice(existingURLFieldIndex, 1)\n }\n\n // Only add afterRead hook if adapter is provided\n if (adapter) {\n fields.push({\n ...baseURLField,\n ...(existingURLField || {}),\n hooks: {\n afterRead: [\n getAfterReadHook({ adapter, collection, disablePayloadAccessControl, generateFileURL }),\n ...(existingURLField?.hooks?.afterRead || []),\n ],\n },\n } as TextField)\n } else {\n fields.push({\n ...baseURLField,\n ...(existingURLField || {}),\n } as TextField)\n }\n\n if (typeof collection.upload === 'object' && collection.upload.imageSizes) {\n let existingSizesFieldIndex = -1\n\n const existingSizesField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'sizes') {\n existingSizesFieldIndex = i\n return true\n }\n\n return false\n }) as GroupField\n\n if (existingSizesFieldIndex > -1) {\n fields.splice(existingSizesFieldIndex, 1)\n }\n\n const sizesField: Field = {\n ...(existingSizesField || {}),\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: collection.upload.imageSizes.map((size) => {\n const existingSizeField = existingSizesField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === size.name,\n ) as GroupField\n\n const existingSizeURLField = existingSizeField?.fields.find(\n (existingField) => 'name' in existingField && existingField.name === 'url',\n ) as TextField\n\n // Only add afterRead hook if adapter is provided\n const sizeURLField: TextField = adapter\n ? ({\n ...(existingSizeURLField || {}),\n ...baseURLField,\n hooks: {\n afterRead: [\n getAfterReadHook({\n adapter,\n collection,\n disablePayloadAccessControl,\n generateFileURL,\n size,\n }),\n ...((typeof existingSizeURLField === 'object' &&\n 'hooks' in existingSizeURLField &&\n existingSizeURLField?.hooks?.afterRead) ||\n []),\n ],\n },\n } as TextField)\n : ({\n ...(existingSizeURLField || {}),\n ...baseURLField,\n } as TextField)\n\n return {\n ...existingSizeField,\n name: size.name,\n type: 'group',\n fields: [...(adapter?.fields || []), sizeURLField],\n } as Field\n }),\n }\n\n fields.push(sizesField)\n }\n\n // If prefix is enabled or alwaysInsertFields is true, save it to db\n if (typeof prefix !== 'undefined' || alwaysInsertFields) {\n let existingPrefixFieldIndex = -1\n\n const existingPrefixField = fields.find((existingField, i) => {\n if ('name' in existingField && existingField.name === 'prefix') {\n existingPrefixFieldIndex = i\n return true\n }\n return false\n }) as TextField\n\n if (existingPrefixFieldIndex > -1) {\n fields.splice(existingPrefixFieldIndex, 1)\n }\n\n fields.push({\n ...basePrefixField,\n ...(existingPrefixField || {}),\n defaultValue: prefix ? path.posix.join(prefix) : '',\n } as TextField)\n }\n\n return fields\n}\n"],"names":["path","getAfterReadHook","getFields","adapter","alwaysInsertFields","collection","disablePayloadAccessControl","generateFileURL","prefix","baseURLField","name","type","admin","hidden","readOnly","label","basePrefixField","fields","existingURLFieldIndex","existingURLField","find","existingField","i","splice","push","hooks","afterRead","upload","imageSizes","existingSizesFieldIndex","existingSizesField","sizesField","map","size","existingSizeField","existingSizeURLField","sizeURLField","existingPrefixFieldIndex","existingPrefixField","defaultValue","posix","join"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CollectionAfterChangeHook, CollectionConfig, FileData, TypeWithID } from 'payload';
|
|
2
|
+
import type { GeneratedAdapter } from '../types.js';
|
|
3
|
+
interface Args {
|
|
4
|
+
adapter: GeneratedAdapter;
|
|
5
|
+
collection: CollectionConfig;
|
|
6
|
+
}
|
|
7
|
+
export declare const getAfterChangeHook: ({ adapter, collection }: Args) => CollectionAfterChangeHook<FileData & TypeWithID>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=afterChange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"afterChange.d.ts","sourceRoot":"","sources":["../../src/hooks/afterChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEhG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAInD,UAAU,IAAI;IACZ,OAAO,EAAE,gBAAgB,CAAA;IACzB,UAAU,EAAE,gBAAgB,CAAA;CAC7B;AAED,eAAO,MAAM,kBAAkB,4BACH,IAAI,KAAG,yBAAyB,CAAC,QAAQ,GAAG,UAAU,CAqD/E,CAAA"}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { getIncomingFiles } from '../utilities/getIncomingFiles.js';
|
|
2
|
-
export const
|
|
2
|
+
export const getAfterChangeHook = ({ adapter, collection })=>async ({ doc, previousDoc, req })=>{
|
|
3
3
|
try {
|
|
4
4
|
const files = getIncomingFiles({
|
|
5
|
-
data,
|
|
5
|
+
data: doc,
|
|
6
6
|
req
|
|
7
7
|
});
|
|
8
8
|
if (files.length > 0) {
|
|
9
|
-
// If there is
|
|
9
|
+
// If there is a previous doc,
|
|
10
10
|
// And we have new files,
|
|
11
11
|
// We need to delete the old files before uploading new
|
|
12
|
-
if (
|
|
12
|
+
if (previousDoc) {
|
|
13
13
|
let filesToDelete = [];
|
|
14
|
-
if (typeof
|
|
15
|
-
filesToDelete.push(
|
|
14
|
+
if (typeof previousDoc?.filename === 'string') {
|
|
15
|
+
filesToDelete.push(previousDoc.filename);
|
|
16
16
|
}
|
|
17
|
-
if (typeof
|
|
18
|
-
filesToDelete = filesToDelete.concat(Object.values(
|
|
17
|
+
if (typeof previousDoc.sizes === 'object') {
|
|
18
|
+
filesToDelete = filesToDelete.concat(Object.values(previousDoc?.sizes || []).map((resizedFileData)=>resizedFileData?.filename));
|
|
19
19
|
}
|
|
20
20
|
const deletionPromises = filesToDelete.map(async (filename)=>{
|
|
21
21
|
if (filename) {
|
|
22
22
|
await adapter.handleDelete({
|
|
23
23
|
collection,
|
|
24
|
-
doc:
|
|
24
|
+
doc: previousDoc,
|
|
25
25
|
filename,
|
|
26
26
|
req
|
|
27
27
|
});
|
|
@@ -33,7 +33,7 @@ export const getBeforeChangeHook = ({ adapter, collection })=>async ({ data, ori
|
|
|
33
33
|
await adapter.handleUpload({
|
|
34
34
|
clientUploadContext: file.clientUploadContext,
|
|
35
35
|
collection,
|
|
36
|
-
data,
|
|
36
|
+
data: doc,
|
|
37
37
|
file,
|
|
38
38
|
req
|
|
39
39
|
});
|
|
@@ -41,13 +41,13 @@ export const getBeforeChangeHook = ({ adapter, collection })=>async ({ data, ori
|
|
|
41
41
|
await Promise.all(promises);
|
|
42
42
|
}
|
|
43
43
|
} catch (err) {
|
|
44
|
-
req.payload.logger.error(`There was an error while uploading files corresponding to the collection ${collection.slug} with filename ${
|
|
44
|
+
req.payload.logger.error(`There was an error while uploading files corresponding to the collection ${collection.slug} with filename ${doc.filename}:`);
|
|
45
45
|
req.payload.logger.error({
|
|
46
46
|
err
|
|
47
47
|
});
|
|
48
48
|
throw err;
|
|
49
49
|
}
|
|
50
|
-
return
|
|
50
|
+
return doc;
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
//# sourceMappingURL=
|
|
53
|
+
//# sourceMappingURL=afterChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/afterChange.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, CollectionConfig, FileData, TypeWithID } from 'payload'\n\nimport type { GeneratedAdapter } from '../types.js'\n\nimport { getIncomingFiles } from '../utilities/getIncomingFiles.js'\n\ninterface Args {\n adapter: GeneratedAdapter\n collection: CollectionConfig\n}\n\nexport const getAfterChangeHook =\n ({ adapter, collection }: Args): CollectionAfterChangeHook<FileData & TypeWithID> =>\n async ({ doc, previousDoc, req }) => {\n try {\n const files = getIncomingFiles({ data: doc, req })\n\n if (files.length > 0) {\n // If there is a previous doc,\n // And we have new files,\n // We need to delete the old files before uploading new\n if (previousDoc) {\n let filesToDelete: string[] = []\n\n if (typeof previousDoc?.filename === 'string') {\n filesToDelete.push(previousDoc.filename)\n }\n\n if (typeof previousDoc.sizes === 'object') {\n filesToDelete = filesToDelete.concat(\n Object.values(previousDoc?.sizes || []).map(\n (resizedFileData) => resizedFileData?.filename as string,\n ),\n )\n }\n\n const deletionPromises = filesToDelete.map(async (filename) => {\n if (filename) {\n await adapter.handleDelete({ collection, doc: previousDoc, filename, req })\n }\n })\n\n await Promise.all(deletionPromises)\n }\n\n const promises = files.map(async (file) => {\n await adapter.handleUpload({\n clientUploadContext: file.clientUploadContext,\n collection,\n data: doc,\n file,\n req,\n })\n })\n\n await Promise.all(promises)\n }\n } catch (err: unknown) {\n req.payload.logger.error(\n `There was an error while uploading files corresponding to the collection ${collection.slug} with filename ${doc.filename}:`,\n )\n req.payload.logger.error({ err })\n throw err\n }\n return doc\n }\n"],"names":["getIncomingFiles","getAfterChangeHook","adapter","collection","doc","previousDoc","req","files","data","length","filesToDelete","filename","push","sizes","concat","Object","values","map","resizedFileData","deletionPromises","handleDelete","Promise","all","promises","file","handleUpload","clientUploadContext","err","payload","logger","error","slug"],"mappings":"AAIA,SAASA,gBAAgB,QAAQ,mCAAkC;AAOnE,OAAO,MAAMC,qBACX,CAAC,EAAEC,OAAO,EAAEC,UAAU,EAAQ,GAC9B,OAAO,EAAEC,GAAG,EAAEC,WAAW,EAAEC,GAAG,EAAE;QAC9B,IAAI;YACF,MAAMC,QAAQP,iBAAiB;gBAAEQ,MAAMJ;gBAAKE;YAAI;YAEhD,IAAIC,MAAME,MAAM,GAAG,GAAG;gBACpB,8BAA8B;gBAC9B,yBAAyB;gBACzB,uDAAuD;gBACvD,IAAIJ,aAAa;oBACf,IAAIK,gBAA0B,EAAE;oBAEhC,IAAI,OAAOL,aAAaM,aAAa,UAAU;wBAC7CD,cAAcE,IAAI,CAACP,YAAYM,QAAQ;oBACzC;oBAEA,IAAI,OAAON,YAAYQ,KAAK,KAAK,UAAU;wBACzCH,gBAAgBA,cAAcI,MAAM,CAClCC,OAAOC,MAAM,CAACX,aAAaQ,SAAS,EAAE,EAAEI,GAAG,CACzC,CAACC,kBAAoBA,iBAAiBP;oBAG5C;oBAEA,MAAMQ,mBAAmBT,cAAcO,GAAG,CAAC,OAAON;wBAChD,IAAIA,UAAU;4BACZ,MAAMT,QAAQkB,YAAY,CAAC;gCAAEjB;gCAAYC,KAAKC;gCAAaM;gCAAUL;4BAAI;wBAC3E;oBACF;oBAEA,MAAMe,QAAQC,GAAG,CAACH;gBACpB;gBAEA,MAAMI,WAAWhB,MAAMU,GAAG,CAAC,OAAOO;oBAChC,MAAMtB,QAAQuB,YAAY,CAAC;wBACzBC,qBAAqBF,KAAKE,mBAAmB;wBAC7CvB;wBACAK,MAAMJ;wBACNoB;wBACAlB;oBACF;gBACF;gBAEA,MAAMe,QAAQC,GAAG,CAACC;YACpB;QACF,EAAE,OAAOI,KAAc;YACrBrB,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CACtB,CAAC,yEAAyE,EAAE3B,WAAW4B,IAAI,CAAC,eAAe,EAAE3B,IAAIO,QAAQ,CAAC,CAAC,CAAC;YAE9HL,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;gBAAEH;YAAI;YAC/B,MAAMA;QACR;QACA,OAAOvB;IACT,EAAC"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,YAAY,CAAA;AAe1D,eAAO,MAAM,kBAAkB,kBACb,aAAa,sBACZ,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,YAAY,CAAA;AAe1D,eAAO,MAAM,kBAAkB,kBACb,aAAa,sBACZ,MAAM,KAAG,MAqKzB,CAAA"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getFields } from './fields/getFields.js';
|
|
2
|
+
import { getAfterChangeHook } from './hooks/afterChange.js';
|
|
2
3
|
import { getAfterDeleteHook } from './hooks/afterDelete.js';
|
|
3
|
-
import { getBeforeChangeHook } from './hooks/beforeChange.js';
|
|
4
4
|
// This plugin extends all targeted collections by offloading uploaded files
|
|
5
5
|
// to cloud storage instead of solely storing files locally.
|
|
6
6
|
// It is based on an adapter approach, where adapters can be written for any cloud provider.
|
|
@@ -8,12 +8,40 @@ import { getBeforeChangeHook } from './hooks/beforeChange.js';
|
|
|
8
8
|
// 1. handleUpload, 2. handleDelete, 3. generateURL, 4. staticHandler
|
|
9
9
|
// Optionally, the adapter can specify any Webpack config overrides if they are necessary.
|
|
10
10
|
export const cloudStoragePlugin = (pluginOptions)=>(incomingConfig)=>{
|
|
11
|
-
const { collections: allCollectionOptions, enabled } = pluginOptions;
|
|
11
|
+
const { alwaysInsertFields, collections: allCollectionOptions, enabled } = pluginOptions;
|
|
12
12
|
const config = {
|
|
13
13
|
...incomingConfig
|
|
14
14
|
};
|
|
15
|
-
//
|
|
15
|
+
// If disabled but alwaysInsertFields is true, only insert fields without full plugin functionality
|
|
16
16
|
if (enabled === false) {
|
|
17
|
+
if (alwaysInsertFields) {
|
|
18
|
+
return {
|
|
19
|
+
...config,
|
|
20
|
+
collections: (config.collections || []).map((existingCollection)=>{
|
|
21
|
+
const options = allCollectionOptions[existingCollection.slug];
|
|
22
|
+
if (options) {
|
|
23
|
+
// If adapter is provided, use it to get fields
|
|
24
|
+
const adapter = options.adapter ? options.adapter({
|
|
25
|
+
collection: existingCollection,
|
|
26
|
+
prefix: options.prefix
|
|
27
|
+
}) : undefined;
|
|
28
|
+
const fields = getFields({
|
|
29
|
+
adapter,
|
|
30
|
+
alwaysInsertFields: true,
|
|
31
|
+
collection: existingCollection,
|
|
32
|
+
disablePayloadAccessControl: options.disablePayloadAccessControl,
|
|
33
|
+
generateFileURL: options.generateFileURL,
|
|
34
|
+
prefix: options.prefix
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
...existingCollection,
|
|
38
|
+
fields
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return existingCollection;
|
|
42
|
+
})
|
|
43
|
+
};
|
|
44
|
+
}
|
|
17
45
|
return config;
|
|
18
46
|
}
|
|
19
47
|
const initFunctions = [];
|
|
@@ -88,16 +116,16 @@ export const cloudStoragePlugin = (pluginOptions)=>(incomingConfig)=>{
|
|
|
88
116
|
fields,
|
|
89
117
|
hooks: {
|
|
90
118
|
...existingCollection.hooks || {},
|
|
91
|
-
|
|
92
|
-
...existingCollection.hooks?.
|
|
93
|
-
|
|
119
|
+
afterChange: [
|
|
120
|
+
...existingCollection.hooks?.afterChange || [],
|
|
121
|
+
getAfterChangeHook({
|
|
94
122
|
adapter,
|
|
95
123
|
collection: existingCollection
|
|
96
124
|
})
|
|
97
125
|
],
|
|
98
|
-
|
|
99
|
-
...existingCollection.hooks?.
|
|
100
|
-
|
|
126
|
+
afterDelete: [
|
|
127
|
+
...existingCollection.hooks?.afterDelete || [],
|
|
128
|
+
getAfterDeleteHook({
|
|
101
129
|
adapter,
|
|
102
130
|
collection: existingCollection
|
|
103
131
|
})
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport type { AllowList, PluginOptions } from './types.js'\n\nimport { getFields } from './fields/getFields.js'\nimport { getAfterDeleteHook } from './hooks/afterDelete.js'\nimport { getBeforeChangeHook } from './hooks/beforeChange.js'\n\n// This plugin extends all targeted collections by offloading uploaded files\n// to cloud storage instead of solely storing files locally.\n\n// It is based on an adapter approach, where adapters can be written for any cloud provider.\n// Adapters are responsible for providing four actions that this plugin will use:\n// 1. handleUpload, 2. handleDelete, 3. generateURL, 4. staticHandler\n\n// Optionally, the adapter can specify any Webpack config overrides if they are necessary.\n\nexport const cloudStoragePlugin =\n (pluginOptions: PluginOptions) =>\n (incomingConfig: Config): Config => {\n const { collections: allCollectionOptions, enabled } = pluginOptions\n const config = { ...incomingConfig }\n\n // Return early if disabled. Only webpack config mods are applied.\n if (enabled === false) {\n return config\n }\n\n const initFunctions: Array<() => void> = []\n\n return {\n ...config,\n collections: (config.collections || []).map((existingCollection) => {\n const options = allCollectionOptions[existingCollection.slug]\n\n if (options?.adapter) {\n const adapter = options.adapter({\n collection: existingCollection,\n prefix: options.prefix,\n })\n\n if (adapter.onInit) {\n initFunctions.push(adapter.onInit)\n }\n\n const fields = getFields({\n adapter,\n collection: existingCollection,\n disablePayloadAccessControl: options.disablePayloadAccessControl,\n generateFileURL: options.generateFileURL,\n prefix: options.prefix,\n })\n\n const handlers = [\n ...(typeof existingCollection.upload === 'object' &&\n Array.isArray(existingCollection.upload.handlers)\n ? existingCollection.upload.handlers\n : []),\n ]\n\n if (!options.disablePayloadAccessControl) {\n handlers.push(adapter.staticHandler)\n // Else if disablePayloadAccessControl: true and clientUploads is used\n // Build the \"proxied\" handler that responses only when the file was requested by client upload in addDataAndFileToRequest\n } else if (adapter.clientUploads) {\n handlers.push((req, args) => {\n if ('clientUploadContext' in args.params) {\n return adapter.staticHandler(req, args)\n }\n })\n }\n\n const getSkipSafeFetchSetting = (): AllowList | boolean => {\n if (options.disablePayloadAccessControl) {\n return true\n }\n const isBooleanTrueSkipSafeFetch =\n typeof existingCollection.upload === 'object' &&\n existingCollection.upload.skipSafeFetch === true\n\n const isAllowListSkipSafeFetch =\n typeof existingCollection.upload === 'object' &&\n Array.isArray(existingCollection.upload.skipSafeFetch)\n\n if (isBooleanTrueSkipSafeFetch) {\n return true\n } else if (isAllowListSkipSafeFetch) {\n const existingSkipSafeFetch =\n typeof existingCollection.upload === 'object' &&\n Array.isArray(existingCollection.upload.skipSafeFetch)\n ? existingCollection.upload.skipSafeFetch\n : []\n\n const hasExactLocalhostMatch = existingSkipSafeFetch.some((entry) => {\n const entryKeys = Object.keys(entry)\n return entryKeys.length === 1 && entry.hostname === 'localhost'\n })\n\n const localhostEntry =\n process.env.NODE_ENV !== 'production' && !hasExactLocalhostMatch\n ? [{ hostname: 'localhost' }]\n : []\n\n return [...existingSkipSafeFetch, ...localhostEntry]\n }\n\n if (process.env.NODE_ENV !== 'production') {\n return [{ hostname: 'localhost' }]\n }\n\n return false\n }\n\n return {\n ...existingCollection,\n fields,\n hooks: {\n ...(existingCollection.hooks || {}),\n afterDelete: [\n ...(existingCollection.hooks?.afterDelete || []),\n getAfterDeleteHook({ adapter, collection: existingCollection }),\n ],\n beforeChange: [\n ...(existingCollection.hooks?.beforeChange || []),\n getBeforeChangeHook({ adapter, collection: existingCollection }),\n ],\n },\n upload: {\n ...(typeof existingCollection.upload === 'object' ? existingCollection.upload : {}),\n adapter: adapter.name,\n disableLocalStorage:\n typeof options.disableLocalStorage === 'boolean'\n ? options.disableLocalStorage\n : true,\n handlers,\n skipSafeFetch: getSkipSafeFetchSetting(),\n },\n }\n }\n\n return existingCollection\n }),\n onInit: async (payload) => {\n initFunctions.forEach((fn) => fn())\n if (config.onInit) {\n await config.onInit(payload)\n }\n },\n }\n }\n"],"names":["getFields","getAfterDeleteHook","getBeforeChangeHook","cloudStoragePlugin","pluginOptions","incomingConfig","collections","allCollectionOptions","enabled","config","initFunctions","map","existingCollection","options","slug","adapter","collection","prefix","onInit","push","fields","disablePayloadAccessControl","generateFileURL","handlers","upload","Array","isArray","staticHandler","clientUploads","req","args","params","getSkipSafeFetchSetting","isBooleanTrueSkipSafeFetch","skipSafeFetch","isAllowListSkipSafeFetch","existingSkipSafeFetch","hasExactLocalhostMatch","some","entry","entryKeys","Object","keys","length","hostname","localhostEntry","process","env","NODE_ENV","hooks","afterDelete","beforeChange","name","disableLocalStorage","payload","forEach","fn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport type { AllowList, PluginOptions } from './types.js'\n\nimport { getFields } from './fields/getFields.js'\nimport { getAfterChangeHook } from './hooks/afterChange.js'\nimport { getAfterDeleteHook } from './hooks/afterDelete.js'\n\n// This plugin extends all targeted collections by offloading uploaded files\n// to cloud storage instead of solely storing files locally.\n\n// It is based on an adapter approach, where adapters can be written for any cloud provider.\n// Adapters are responsible for providing four actions that this plugin will use:\n// 1. handleUpload, 2. handleDelete, 3. generateURL, 4. staticHandler\n\n// Optionally, the adapter can specify any Webpack config overrides if they are necessary.\n\nexport const cloudStoragePlugin =\n (pluginOptions: PluginOptions) =>\n (incomingConfig: Config): Config => {\n const { alwaysInsertFields, collections: allCollectionOptions, enabled } = pluginOptions\n const config = { ...incomingConfig }\n\n // If disabled but alwaysInsertFields is true, only insert fields without full plugin functionality\n if (enabled === false) {\n if (alwaysInsertFields) {\n return {\n ...config,\n collections: (config.collections || []).map((existingCollection) => {\n const options = allCollectionOptions[existingCollection.slug]\n\n if (options) {\n // If adapter is provided, use it to get fields\n const adapter = options.adapter\n ? options.adapter({\n collection: existingCollection,\n prefix: options.prefix,\n })\n : undefined\n\n const fields = getFields({\n adapter,\n alwaysInsertFields: true,\n collection: existingCollection,\n disablePayloadAccessControl: options.disablePayloadAccessControl,\n generateFileURL: options.generateFileURL,\n prefix: options.prefix,\n })\n\n return {\n ...existingCollection,\n fields,\n }\n }\n\n return existingCollection\n }),\n }\n }\n\n return config\n }\n\n const initFunctions: Array<() => void> = []\n\n return {\n ...config,\n collections: (config.collections || []).map((existingCollection) => {\n const options = allCollectionOptions[existingCollection.slug]\n\n if (options?.adapter) {\n const adapter = options.adapter({\n collection: existingCollection,\n prefix: options.prefix,\n })\n\n if (adapter.onInit) {\n initFunctions.push(adapter.onInit)\n }\n\n const fields = getFields({\n adapter,\n collection: existingCollection,\n disablePayloadAccessControl: options.disablePayloadAccessControl,\n generateFileURL: options.generateFileURL,\n prefix: options.prefix,\n })\n\n const handlers = [\n ...(typeof existingCollection.upload === 'object' &&\n Array.isArray(existingCollection.upload.handlers)\n ? existingCollection.upload.handlers\n : []),\n ]\n\n if (!options.disablePayloadAccessControl) {\n handlers.push(adapter.staticHandler)\n // Else if disablePayloadAccessControl: true and clientUploads is used\n // Build the \"proxied\" handler that responses only when the file was requested by client upload in addDataAndFileToRequest\n } else if (adapter.clientUploads) {\n handlers.push((req, args) => {\n if ('clientUploadContext' in args.params) {\n return adapter.staticHandler(req, args)\n }\n })\n }\n\n const getSkipSafeFetchSetting = (): AllowList | boolean => {\n if (options.disablePayloadAccessControl) {\n return true\n }\n const isBooleanTrueSkipSafeFetch =\n typeof existingCollection.upload === 'object' &&\n existingCollection.upload.skipSafeFetch === true\n\n const isAllowListSkipSafeFetch =\n typeof existingCollection.upload === 'object' &&\n Array.isArray(existingCollection.upload.skipSafeFetch)\n\n if (isBooleanTrueSkipSafeFetch) {\n return true\n } else if (isAllowListSkipSafeFetch) {\n const existingSkipSafeFetch =\n typeof existingCollection.upload === 'object' &&\n Array.isArray(existingCollection.upload.skipSafeFetch)\n ? existingCollection.upload.skipSafeFetch\n : []\n\n const hasExactLocalhostMatch = existingSkipSafeFetch.some((entry) => {\n const entryKeys = Object.keys(entry)\n return entryKeys.length === 1 && entry.hostname === 'localhost'\n })\n\n const localhostEntry =\n process.env.NODE_ENV !== 'production' && !hasExactLocalhostMatch\n ? [{ hostname: 'localhost' }]\n : []\n\n return [...existingSkipSafeFetch, ...localhostEntry]\n }\n\n if (process.env.NODE_ENV !== 'production') {\n return [{ hostname: 'localhost' }]\n }\n\n return false\n }\n\n return {\n ...existingCollection,\n fields,\n hooks: {\n ...(existingCollection.hooks || {}),\n afterChange: [\n ...(existingCollection.hooks?.afterChange || []),\n getAfterChangeHook({ adapter, collection: existingCollection }),\n ],\n afterDelete: [\n ...(existingCollection.hooks?.afterDelete || []),\n getAfterDeleteHook({ adapter, collection: existingCollection }),\n ],\n },\n upload: {\n ...(typeof existingCollection.upload === 'object' ? existingCollection.upload : {}),\n adapter: adapter.name,\n disableLocalStorage:\n typeof options.disableLocalStorage === 'boolean'\n ? options.disableLocalStorage\n : true,\n handlers,\n skipSafeFetch: getSkipSafeFetchSetting(),\n },\n }\n }\n\n return existingCollection\n }),\n onInit: async (payload) => {\n initFunctions.forEach((fn) => fn())\n if (config.onInit) {\n await config.onInit(payload)\n }\n },\n }\n }\n"],"names":["getFields","getAfterChangeHook","getAfterDeleteHook","cloudStoragePlugin","pluginOptions","incomingConfig","alwaysInsertFields","collections","allCollectionOptions","enabled","config","map","existingCollection","options","slug","adapter","collection","prefix","undefined","fields","disablePayloadAccessControl","generateFileURL","initFunctions","onInit","push","handlers","upload","Array","isArray","staticHandler","clientUploads","req","args","params","getSkipSafeFetchSetting","isBooleanTrueSkipSafeFetch","skipSafeFetch","isAllowListSkipSafeFetch","existingSkipSafeFetch","hasExactLocalhostMatch","some","entry","entryKeys","Object","keys","length","hostname","localhostEntry","process","env","NODE_ENV","hooks","afterChange","afterDelete","name","disableLocalStorage","payload","forEach","fn"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -86,6 +86,16 @@ export interface CollectionOptions {
|
|
|
86
86
|
prefix?: string;
|
|
87
87
|
}
|
|
88
88
|
export interface PluginOptions {
|
|
89
|
+
/**
|
|
90
|
+
* When enabled, fields (like the prefix field) will always be inserted into
|
|
91
|
+
* the collection schema regardless of whether the plugin is enabled. This
|
|
92
|
+
* ensures a consistent schema across all environments.
|
|
93
|
+
*
|
|
94
|
+
* This will be enabled by default in Payload v4.
|
|
95
|
+
*
|
|
96
|
+
* @default false
|
|
97
|
+
*/
|
|
98
|
+
alwaysInsertFields?: boolean;
|
|
89
99
|
collections: Partial<Record<UploadCollectionSlug, CollectionOptions>>;
|
|
90
100
|
/**
|
|
91
101
|
* Whether or not to enable the plugin
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n CollectionConfig,\n Field,\n FileData,\n ImageSize,\n PayloadRequest,\n TypeWithID,\n UploadCollectionSlug,\n} from 'payload'\n\nexport interface File {\n buffer: Buffer\n clientUploadContext?: unknown\n filename: string\n filesize: number\n mimeType: string\n tempFilePath?: string\n}\n\nexport type ClientUploadsAccess = (args: {\n collectionSlug: UploadCollectionSlug\n req: PayloadRequest\n}) => boolean | Promise<boolean>\n\nexport type ClientUploadsConfig =\n | {\n access?: ClientUploadsAccess\n }\n | boolean\n\nexport type HandleUpload = (args: {\n clientUploadContext: unknown\n collection: CollectionConfig\n data: any\n file: File\n req: PayloadRequest\n}) => Promise<void> | void\n\nexport interface TypeWithPrefix {\n prefix?: string\n}\n\nexport type HandleDelete = (args: {\n collection: CollectionConfig\n doc: FileData & TypeWithID & TypeWithPrefix\n filename: string\n req: PayloadRequest\n}) => Promise<void> | void\n\nexport type GenerateURL = (args: {\n collection: CollectionConfig\n data: any\n filename: string\n prefix?: string\n}) => Promise<string> | string\n\nexport type StaticHandler = (\n req: PayloadRequest,\n args: {\n doc?: TypeWithID\n headers?: Headers\n params: { clientUploadContext?: unknown; collection: string; filename: string }\n },\n) => Promise<Response> | Response\n\nexport interface GeneratedAdapter {\n clientUploads?: ClientUploadsConfig\n /**\n * Additional fields to be injected into the base collection and image sizes\n */\n fields?: Field[]\n /**\n * Generates the public URL for a file\n */\n generateURL?: GenerateURL\n handleDelete: HandleDelete\n handleUpload: HandleUpload\n name: string\n onInit?: () => void\n staticHandler: StaticHandler\n}\n\nexport type Adapter = (args: { collection: CollectionConfig; prefix?: string }) => GeneratedAdapter\n\nexport type AllowList = Array<{\n hostname: string\n pathname?: string\n port?: string\n protocol?: 'http' | 'https'\n search?: string\n}>\n\nexport type GenerateFileURL = (args: {\n collection: CollectionConfig\n filename: string\n prefix?: string\n size?: ImageSize\n}) => Promise<string> | string\n\nexport interface CollectionOptions {\n adapter: Adapter | null\n disableLocalStorage?: boolean\n disablePayloadAccessControl?: true\n generateFileURL?: GenerateFileURL\n prefix?: string\n}\n\nexport interface PluginOptions {\n collections: Partial<Record<UploadCollectionSlug, CollectionOptions>>\n /**\n * Whether or not to enable the plugin\n *\n * Default: true\n */\n enabled?: boolean\n}\n"],"names":[],"mappings":"AA2GA,
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n CollectionConfig,\n Field,\n FileData,\n ImageSize,\n PayloadRequest,\n TypeWithID,\n UploadCollectionSlug,\n} from 'payload'\n\nexport interface File {\n buffer: Buffer\n clientUploadContext?: unknown\n filename: string\n filesize: number\n mimeType: string\n tempFilePath?: string\n}\n\nexport type ClientUploadsAccess = (args: {\n collectionSlug: UploadCollectionSlug\n req: PayloadRequest\n}) => boolean | Promise<boolean>\n\nexport type ClientUploadsConfig =\n | {\n access?: ClientUploadsAccess\n }\n | boolean\n\nexport type HandleUpload = (args: {\n clientUploadContext: unknown\n collection: CollectionConfig\n data: any\n file: File\n req: PayloadRequest\n}) => Promise<void> | void\n\nexport interface TypeWithPrefix {\n prefix?: string\n}\n\nexport type HandleDelete = (args: {\n collection: CollectionConfig\n doc: FileData & TypeWithID & TypeWithPrefix\n filename: string\n req: PayloadRequest\n}) => Promise<void> | void\n\nexport type GenerateURL = (args: {\n collection: CollectionConfig\n data: any\n filename: string\n prefix?: string\n}) => Promise<string> | string\n\nexport type StaticHandler = (\n req: PayloadRequest,\n args: {\n doc?: TypeWithID\n headers?: Headers\n params: { clientUploadContext?: unknown; collection: string; filename: string }\n },\n) => Promise<Response> | Response\n\nexport interface GeneratedAdapter {\n clientUploads?: ClientUploadsConfig\n /**\n * Additional fields to be injected into the base collection and image sizes\n */\n fields?: Field[]\n /**\n * Generates the public URL for a file\n */\n generateURL?: GenerateURL\n handleDelete: HandleDelete\n handleUpload: HandleUpload\n name: string\n onInit?: () => void\n staticHandler: StaticHandler\n}\n\nexport type Adapter = (args: { collection: CollectionConfig; prefix?: string }) => GeneratedAdapter\n\nexport type AllowList = Array<{\n hostname: string\n pathname?: string\n port?: string\n protocol?: 'http' | 'https'\n search?: string\n}>\n\nexport type GenerateFileURL = (args: {\n collection: CollectionConfig\n filename: string\n prefix?: string\n size?: ImageSize\n}) => Promise<string> | string\n\nexport interface CollectionOptions {\n adapter: Adapter | null\n disableLocalStorage?: boolean\n disablePayloadAccessControl?: true\n generateFileURL?: GenerateFileURL\n prefix?: string\n}\n\nexport interface PluginOptions {\n /**\n * When enabled, fields (like the prefix field) will always be inserted into\n * the collection schema regardless of whether the plugin is enabled. This\n * ensures a consistent schema across all environments.\n *\n * This will be enabled by default in Payload v4.\n *\n * @default false\n */\n alwaysInsertFields?: boolean\n collections: Partial<Record<UploadCollectionSlug, CollectionOptions>>\n /**\n * Whether or not to enable the plugin\n *\n * Default: true\n */\n enabled?: boolean\n}\n"],"names":[],"mappings":"AA2GA,WAkBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-cloud-storage",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.71.0-internal-debug.80dab4c",
|
|
4
4
|
"description": "The official cloud storage plugin for Payload CMS",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -51,18 +51,18 @@
|
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"find-node-modules": "^2.1.3",
|
|
53
53
|
"range-parser": "^1.2.1",
|
|
54
|
-
"@payloadcms/ui": "3.
|
|
54
|
+
"@payloadcms/ui": "3.71.0-internal-debug.80dab4c"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@types/find-node-modules": "^2.1.2",
|
|
58
58
|
"@types/react": "19.2.1",
|
|
59
59
|
"@types/react-dom": "19.2.1",
|
|
60
|
-
"payload": "3.
|
|
60
|
+
"payload": "3.71.0-internal-debug.80dab4c"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"react": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
64
64
|
"react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
65
|
-
"payload": "3.
|
|
65
|
+
"payload": "3.71.0-internal-debug.80dab4c"
|
|
66
66
|
},
|
|
67
67
|
"publishConfig": {
|
|
68
68
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { CollectionBeforeChangeHook, CollectionConfig, FileData, TypeWithID } from 'payload';
|
|
2
|
-
import type { GeneratedAdapter } from '../types.js';
|
|
3
|
-
interface Args {
|
|
4
|
-
adapter: GeneratedAdapter;
|
|
5
|
-
collection: CollectionConfig;
|
|
6
|
-
}
|
|
7
|
-
export declare const getBeforeChangeHook: ({ adapter, collection }: Args) => CollectionBeforeChangeHook<FileData & TypeWithID>;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=beforeChange.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"beforeChange.d.ts","sourceRoot":"","sources":["../../src/hooks/beforeChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEjG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAInD,UAAU,IAAI;IACZ,OAAO,EAAE,gBAAgB,CAAA;IACzB,UAAU,EAAE,gBAAgB,CAAA;CAC7B;AAED,eAAO,MAAM,mBAAmB,4BACJ,IAAI,KAAG,0BAA0B,CAAC,QAAQ,GAAG,UAAU,CAqDhF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/beforeChange.ts"],"sourcesContent":["import type { CollectionBeforeChangeHook, CollectionConfig, FileData, TypeWithID } from 'payload'\n\nimport type { GeneratedAdapter } from '../types.js'\n\nimport { getIncomingFiles } from '../utilities/getIncomingFiles.js'\n\ninterface Args {\n adapter: GeneratedAdapter\n collection: CollectionConfig\n}\n\nexport const getBeforeChangeHook =\n ({ adapter, collection }: Args): CollectionBeforeChangeHook<FileData & TypeWithID> =>\n async ({ data, originalDoc, req }) => {\n try {\n const files = getIncomingFiles({ data, req })\n\n if (files.length > 0) {\n // If there is an original doc,\n // And we have new files,\n // We need to delete the old files before uploading new\n if (originalDoc) {\n let filesToDelete: string[] = []\n\n if (typeof originalDoc?.filename === 'string') {\n filesToDelete.push(originalDoc.filename)\n }\n\n if (typeof originalDoc.sizes === 'object') {\n filesToDelete = filesToDelete.concat(\n Object.values(originalDoc?.sizes || []).map(\n (resizedFileData) => resizedFileData?.filename as string,\n ),\n )\n }\n\n const deletionPromises = filesToDelete.map(async (filename) => {\n if (filename) {\n await adapter.handleDelete({ collection, doc: originalDoc, filename, req })\n }\n })\n\n await Promise.all(deletionPromises)\n }\n\n const promises = files.map(async (file) => {\n await adapter.handleUpload({\n clientUploadContext: file.clientUploadContext,\n collection,\n data,\n file,\n req,\n })\n })\n\n await Promise.all(promises)\n }\n } catch (err: unknown) {\n req.payload.logger.error(\n `There was an error while uploading files corresponding to the collection ${collection.slug} with filename ${data.filename}:`,\n )\n req.payload.logger.error({ err })\n throw err\n }\n return data\n }\n"],"names":["getIncomingFiles","getBeforeChangeHook","adapter","collection","data","originalDoc","req","files","length","filesToDelete","filename","push","sizes","concat","Object","values","map","resizedFileData","deletionPromises","handleDelete","doc","Promise","all","promises","file","handleUpload","clientUploadContext","err","payload","logger","error","slug"],"mappings":"AAIA,SAASA,gBAAgB,QAAQ,mCAAkC;AAOnE,OAAO,MAAMC,sBACX,CAAC,EAAEC,OAAO,EAAEC,UAAU,EAAQ,GAC9B,OAAO,EAAEC,IAAI,EAAEC,WAAW,EAAEC,GAAG,EAAE;QAC/B,IAAI;YACF,MAAMC,QAAQP,iBAAiB;gBAAEI;gBAAME;YAAI;YAE3C,IAAIC,MAAMC,MAAM,GAAG,GAAG;gBACpB,+BAA+B;gBAC/B,yBAAyB;gBACzB,uDAAuD;gBACvD,IAAIH,aAAa;oBACf,IAAII,gBAA0B,EAAE;oBAEhC,IAAI,OAAOJ,aAAaK,aAAa,UAAU;wBAC7CD,cAAcE,IAAI,CAACN,YAAYK,QAAQ;oBACzC;oBAEA,IAAI,OAAOL,YAAYO,KAAK,KAAK,UAAU;wBACzCH,gBAAgBA,cAAcI,MAAM,CAClCC,OAAOC,MAAM,CAACV,aAAaO,SAAS,EAAE,EAAEI,GAAG,CACzC,CAACC,kBAAoBA,iBAAiBP;oBAG5C;oBAEA,MAAMQ,mBAAmBT,cAAcO,GAAG,CAAC,OAAON;wBAChD,IAAIA,UAAU;4BACZ,MAAMR,QAAQiB,YAAY,CAAC;gCAAEhB;gCAAYiB,KAAKf;gCAAaK;gCAAUJ;4BAAI;wBAC3E;oBACF;oBAEA,MAAMe,QAAQC,GAAG,CAACJ;gBACpB;gBAEA,MAAMK,WAAWhB,MAAMS,GAAG,CAAC,OAAOQ;oBAChC,MAAMtB,QAAQuB,YAAY,CAAC;wBACzBC,qBAAqBF,KAAKE,mBAAmB;wBAC7CvB;wBACAC;wBACAoB;wBACAlB;oBACF;gBACF;gBAEA,MAAMe,QAAQC,GAAG,CAACC;YACpB;QACF,EAAE,OAAOI,KAAc;YACrBrB,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CACtB,CAAC,yEAAyE,EAAE3B,WAAW4B,IAAI,CAAC,eAAe,EAAE3B,KAAKM,QAAQ,CAAC,CAAC,CAAC;YAE/HJ,IAAIsB,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;gBAAEH;YAAI;YAC/B,MAAMA;QACR;QACA,OAAOvB;IACT,EAAC"}
|