@payloadcms/storage-gcs 3.25.0 → 3.26.0
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/client/GcsClientUploadHandler.d.ts +2 -1
- package/dist/client/GcsClientUploadHandler.d.ts.map +1 -1
- package/dist/client/GcsClientUploadHandler.js +4 -1
- package/dist/client/GcsClientUploadHandler.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -35
- package/dist/index.js.map +1 -1
- package/dist/staticHandler.js +2 -1
- package/dist/staticHandler.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export declare const GcsClientUploadHandler: ({ children, collectionSlug, enabled, extra, serverHandlerPath, }: {
|
|
1
|
+
export declare const GcsClientUploadHandler: ({ children, collectionSlug, enabled, extra, prefix, serverHandlerPath, }: {
|
|
2
2
|
children: import("react").ReactNode;
|
|
3
3
|
collectionSlug: import("packages/payload/src/index.js").UploadCollectionSlug;
|
|
4
4
|
enabled?: boolean;
|
|
5
5
|
extra: Record<string, unknown>;
|
|
6
|
+
prefix?: string;
|
|
6
7
|
serverHandlerPath: string;
|
|
7
8
|
}) => import("react").JSX.Element;
|
|
8
9
|
//# sourceMappingURL=GcsClientUploadHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GcsClientUploadHandler.d.ts","sourceRoot":"","sources":["../../src/client/GcsClientUploadHandler.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"GcsClientUploadHandler.d.ts","sourceRoot":"","sources":["../../src/client/GcsClientUploadHandler.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB;;;;;;;aAyBsC,OAAO,aAD9E,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { createClientUploadHandler } from '@payloadcms/plugin-cloud-storage/client';
|
|
3
3
|
export const GcsClientUploadHandler = createClientUploadHandler({
|
|
4
|
-
handler: async ({ apiRoute, collectionSlug, file, serverHandlerPath, serverURL })=>{
|
|
4
|
+
handler: async ({ apiRoute, collectionSlug, file, prefix, serverHandlerPath, serverURL })=>{
|
|
5
5
|
const response = await fetch(`${serverURL}${apiRoute}${serverHandlerPath}`, {
|
|
6
6
|
body: JSON.stringify({
|
|
7
7
|
collectionSlug,
|
|
@@ -20,6 +20,9 @@ export const GcsClientUploadHandler = createClientUploadHandler({
|
|
|
20
20
|
},
|
|
21
21
|
method: 'PUT'
|
|
22
22
|
});
|
|
23
|
+
return {
|
|
24
|
+
prefix
|
|
25
|
+
};
|
|
23
26
|
}
|
|
24
27
|
});
|
|
25
28
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/GcsClientUploadHandler.ts"],"sourcesContent":["'use client'\nimport { createClientUploadHandler } from '@payloadcms/plugin-cloud-storage/client'\n\nexport const GcsClientUploadHandler = createClientUploadHandler({\n handler: async ({ apiRoute, collectionSlug, file, serverHandlerPath, serverURL }) => {\n const response = await fetch(`${serverURL}${apiRoute}${serverHandlerPath}`, {\n body: JSON.stringify({\n collectionSlug,\n filename: file.name,\n mimeType: file.type,\n }),\n credentials: 'include',\n method: 'POST',\n })\n\n const { url } = await response.json()\n\n await fetch(url, {\n body: file,\n headers: { 'Content-Length': file.size.toString(), 'Content-Type': file.type },\n method: 'PUT',\n })\n },\n})\n"],"names":["createClientUploadHandler","GcsClientUploadHandler","handler","apiRoute","collectionSlug","file","serverHandlerPath","serverURL","response","fetch","body","JSON","stringify","filename","name","mimeType","type","credentials","method","url","json","headers","size","toString"],"mappings":"AAAA;AACA,SAASA,yBAAyB,QAAQ,0CAAyC;AAEnF,OAAO,MAAMC,yBAAyBD,0BAA0B;IAC9DE,SAAS,OAAO,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,IAAI,EAAEC,iBAAiB,EAAEC,SAAS,EAAE;
|
|
1
|
+
{"version":3,"sources":["../../src/client/GcsClientUploadHandler.ts"],"sourcesContent":["'use client'\nimport { createClientUploadHandler } from '@payloadcms/plugin-cloud-storage/client'\n\nexport const GcsClientUploadHandler = createClientUploadHandler({\n handler: async ({ apiRoute, collectionSlug, file, prefix, serverHandlerPath, serverURL }) => {\n const response = await fetch(`${serverURL}${apiRoute}${serverHandlerPath}`, {\n body: JSON.stringify({\n collectionSlug,\n filename: file.name,\n mimeType: file.type,\n }),\n credentials: 'include',\n method: 'POST',\n })\n\n const { url } = await response.json()\n\n await fetch(url, {\n body: file,\n headers: { 'Content-Length': file.size.toString(), 'Content-Type': file.type },\n method: 'PUT',\n })\n\n return {\n prefix,\n }\n },\n})\n"],"names":["createClientUploadHandler","GcsClientUploadHandler","handler","apiRoute","collectionSlug","file","prefix","serverHandlerPath","serverURL","response","fetch","body","JSON","stringify","filename","name","mimeType","type","credentials","method","url","json","headers","size","toString"],"mappings":"AAAA;AACA,SAASA,yBAAyB,QAAQ,0CAAyC;AAEnF,OAAO,MAAMC,yBAAyBD,0BAA0B;IAC9DE,SAAS,OAAO,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,IAAI,EAAEC,MAAM,EAAEC,iBAAiB,EAAEC,SAAS,EAAE;QACtF,MAAMC,WAAW,MAAMC,MAAM,GAAGF,YAAYL,WAAWI,mBAAmB,EAAE;YAC1EI,MAAMC,KAAKC,SAAS,CAAC;gBACnBT;gBACAU,UAAUT,KAAKU,IAAI;gBACnBC,UAAUX,KAAKY,IAAI;YACrB;YACAC,aAAa;YACbC,QAAQ;QACV;QAEA,MAAM,EAAEC,GAAG,EAAE,GAAG,MAAMX,SAASY,IAAI;QAEnC,MAAMX,MAAMU,KAAK;YACfT,MAAMN;YACNiB,SAAS;gBAAE,kBAAkBjB,KAAKkB,IAAI,CAACC,QAAQ;gBAAI,gBAAgBnB,KAAKY,IAAI;YAAC;YAC7EE,QAAQ;QACV;QAEA,OAAO;YACLb;QACF;IACF;AACF,GAAE"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAEV,mBAAmB,EAEnB,iBAAiB,EAElB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,KAAK,EAAU,MAAM,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAEV,mBAAmB,EAEnB,iBAAiB,EAElB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,KAAK,EAAU,MAAM,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAYnE,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAE1B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAC7F;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;OAIG;IACH,OAAO,EAAE,cAAc,CAAA;CACxB;AAED,KAAK,gBAAgB,GAAG,CAAC,cAAc,EAAE,iBAAiB,KAAK,MAAM,CAAA;AAErE,eAAO,MAAM,UAAU,EAAE,gBA0EtB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { Storage } from '@google-cloud/storage';
|
|
2
2
|
import { cloudStoragePlugin } from '@payloadcms/plugin-cloud-storage';
|
|
3
|
+
import { initClientUploads } from '@payloadcms/plugin-cloud-storage/utilities';
|
|
3
4
|
import { getGenerateSignedURLHandler } from './generateSignedURL.js';
|
|
4
5
|
import { getGenerateURL } from './generateURL.js';
|
|
5
6
|
import { getHandleDelete } from './handleDelete.js';
|
|
6
7
|
import { getHandleUpload } from './handleUpload.js';
|
|
7
8
|
import { getHandler } from './staticHandler.js';
|
|
8
9
|
export const gcsStorage = (gcsStorageOptions)=>(incomingConfig)=>{
|
|
9
|
-
if (gcsStorageOptions.enabled === false) {
|
|
10
|
-
return incomingConfig;
|
|
11
|
-
}
|
|
12
10
|
let storageClient = null;
|
|
13
11
|
const getStorageClient = ()=>{
|
|
14
12
|
if (storageClient) {
|
|
@@ -18,38 +16,22 @@ export const gcsStorage = (gcsStorageOptions)=>(incomingConfig)=>{
|
|
|
18
16
|
return storageClient;
|
|
19
17
|
};
|
|
20
18
|
const adapter = gcsStorageInternal(getStorageClient, gcsStorageOptions);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
incomingConfig
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
incomingConfig.admin = {};
|
|
38
|
-
}
|
|
39
|
-
if (!incomingConfig.admin.components) {
|
|
40
|
-
incomingConfig.admin.components = {};
|
|
41
|
-
}
|
|
42
|
-
if (!incomingConfig.admin.components.providers) {
|
|
43
|
-
incomingConfig.admin.components.providers = [];
|
|
44
|
-
}
|
|
45
|
-
for(const collectionSlug in gcsStorageOptions.collections){
|
|
46
|
-
incomingConfig.admin.components.providers.push({
|
|
47
|
-
clientProps: {
|
|
48
|
-
collectionSlug,
|
|
49
|
-
enabled: !!gcsStorageOptions.clientUploads
|
|
50
|
-
},
|
|
51
|
-
path: '@payloadcms/storage-gcs/client#GcsClientUploadHandler'
|
|
52
|
-
});
|
|
19
|
+
const isPluginDisabled = gcsStorageOptions.enabled === false;
|
|
20
|
+
initClientUploads({
|
|
21
|
+
clientHandler: '@payloadcms/storage-gcs/client#GcsClientUploadHandler',
|
|
22
|
+
collections: gcsStorageOptions.collections,
|
|
23
|
+
config: incomingConfig,
|
|
24
|
+
enabled: !isPluginDisabled && Boolean(gcsStorageOptions.enabled),
|
|
25
|
+
serverHandler: getGenerateSignedURLHandler({
|
|
26
|
+
access: typeof gcsStorageOptions.clientUploads === 'object' ? gcsStorageOptions.clientUploads.access : undefined,
|
|
27
|
+
bucket: gcsStorageOptions.bucket,
|
|
28
|
+
collections: gcsStorageOptions.collections,
|
|
29
|
+
getStorageClient
|
|
30
|
+
}),
|
|
31
|
+
serverHandlerPath: '/storage-gcs-generate-signed-url'
|
|
32
|
+
});
|
|
33
|
+
if (isPluginDisabled) {
|
|
34
|
+
return incomingConfig;
|
|
53
35
|
}
|
|
54
36
|
// Add adapter to each collection option object
|
|
55
37
|
const collectionsWithAdapter = Object.entries(gcsStorageOptions.collections).reduce((acc, [slug, collOptions])=>({
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { StorageOptions } from '@google-cloud/storage'\nimport type {\n Adapter,\n ClientUploadsConfig,\n PluginOptions as CloudStoragePluginOptions,\n CollectionOptions,\n GeneratedAdapter,\n} from '@payloadcms/plugin-cloud-storage/types'\nimport type { Config, Plugin, UploadCollectionSlug } from 'payload'\n\nimport { Storage } from '@google-cloud/storage'\nimport { cloudStoragePlugin } from '@payloadcms/plugin-cloud-storage'\n\nimport { getGenerateSignedURLHandler } from './generateSignedURL.js'\nimport { getGenerateURL } from './generateURL.js'\nimport { getHandleDelete } from './handleDelete.js'\nimport { getHandleUpload } from './handleUpload.js'\nimport { getHandler } from './staticHandler.js'\n\nexport interface GcsStorageOptions {\n acl?: 'Private' | 'Public'\n\n /**\n * The name of the bucket to use.\n */\n bucket: string\n /**\n * Do uploads directly on the client to bypass limits on Vercel. You must allow CORS PUT method for the bucket to your website.\n */\n clientUploads?: ClientUploadsConfig\n /**\n * Collection options to apply the S3 adapter to.\n */\n collections: Partial<Record<UploadCollectionSlug, Omit<CollectionOptions, 'adapter'> | true>>\n /**\n * Whether or not to enable the plugin\n *\n * Default: true\n */\n enabled?: boolean\n\n /**\n * Google Cloud Storage client configuration.\n *\n * @see https://github.com/googleapis/nodejs-storage\n */\n options: StorageOptions\n}\n\ntype GcsStoragePlugin = (gcsStorageArgs: GcsStorageOptions) => Plugin\n\nexport const gcsStorage: GcsStoragePlugin =\n (gcsStorageOptions: GcsStorageOptions) =>\n (incomingConfig: Config): Config => {\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { StorageOptions } from '@google-cloud/storage'\nimport type {\n Adapter,\n ClientUploadsConfig,\n PluginOptions as CloudStoragePluginOptions,\n CollectionOptions,\n GeneratedAdapter,\n} from '@payloadcms/plugin-cloud-storage/types'\nimport type { Config, Plugin, UploadCollectionSlug } from 'payload'\n\nimport { Storage } from '@google-cloud/storage'\nimport { cloudStoragePlugin } from '@payloadcms/plugin-cloud-storage'\nimport { initClientUploads } from '@payloadcms/plugin-cloud-storage/utilities'\n\nimport { getGenerateSignedURLHandler } from './generateSignedURL.js'\nimport { getGenerateURL } from './generateURL.js'\nimport { getHandleDelete } from './handleDelete.js'\nimport { getHandleUpload } from './handleUpload.js'\nimport { getHandler } from './staticHandler.js'\n\nexport interface GcsStorageOptions {\n acl?: 'Private' | 'Public'\n\n /**\n * The name of the bucket to use.\n */\n bucket: string\n /**\n * Do uploads directly on the client to bypass limits on Vercel. You must allow CORS PUT method for the bucket to your website.\n */\n clientUploads?: ClientUploadsConfig\n /**\n * Collection options to apply the S3 adapter to.\n */\n collections: Partial<Record<UploadCollectionSlug, Omit<CollectionOptions, 'adapter'> | true>>\n /**\n * Whether or not to enable the plugin\n *\n * Default: true\n */\n enabled?: boolean\n\n /**\n * Google Cloud Storage client configuration.\n *\n * @see https://github.com/googleapis/nodejs-storage\n */\n options: StorageOptions\n}\n\ntype GcsStoragePlugin = (gcsStorageArgs: GcsStorageOptions) => Plugin\n\nexport const gcsStorage: GcsStoragePlugin =\n (gcsStorageOptions: GcsStorageOptions) =>\n (incomingConfig: Config): Config => {\n let storageClient: null | Storage = null\n\n const getStorageClient = (): Storage => {\n if (storageClient) {\n return storageClient\n }\n storageClient = new Storage(gcsStorageOptions.options)\n\n return storageClient\n }\n\n const adapter = gcsStorageInternal(getStorageClient, gcsStorageOptions)\n\n const isPluginDisabled = gcsStorageOptions.enabled === false\n\n initClientUploads({\n clientHandler: '@payloadcms/storage-gcs/client#GcsClientUploadHandler',\n collections: gcsStorageOptions.collections,\n config: incomingConfig,\n enabled: !isPluginDisabled && Boolean(gcsStorageOptions.enabled),\n serverHandler: getGenerateSignedURLHandler({\n access:\n typeof gcsStorageOptions.clientUploads === 'object'\n ? gcsStorageOptions.clientUploads.access\n : undefined,\n bucket: gcsStorageOptions.bucket,\n collections: gcsStorageOptions.collections,\n getStorageClient,\n }),\n serverHandlerPath: '/storage-gcs-generate-signed-url',\n })\n\n if (isPluginDisabled) {\n return incomingConfig\n }\n\n // Add adapter to each collection option object\n const collectionsWithAdapter: CloudStoragePluginOptions['collections'] = Object.entries(\n gcsStorageOptions.collections,\n ).reduce(\n (acc, [slug, collOptions]) => ({\n ...acc,\n [slug]: {\n ...(collOptions === true ? {} : collOptions),\n adapter,\n },\n }),\n {} as Record<string, CollectionOptions>,\n )\n\n // Set disableLocalStorage: true for collections specified in the plugin options\n const config = {\n ...incomingConfig,\n collections: (incomingConfig.collections || []).map((collection) => {\n if (!collectionsWithAdapter[collection.slug]) {\n return collection\n }\n\n return {\n ...collection,\n upload: {\n ...(typeof collection.upload === 'object' ? collection.upload : {}),\n disableLocalStorage: true,\n },\n }\n }),\n }\n\n return cloudStoragePlugin({\n collections: collectionsWithAdapter,\n })(config)\n }\n\nfunction gcsStorageInternal(\n getStorageClient: () => Storage,\n { acl, bucket }: GcsStorageOptions,\n): Adapter {\n return ({ collection, prefix }): GeneratedAdapter => {\n return {\n name: 'gcs',\n generateURL: getGenerateURL({ bucket, getStorageClient }),\n handleDelete: getHandleDelete({ bucket, getStorageClient }),\n handleUpload: getHandleUpload({\n acl,\n bucket,\n collection,\n getStorageClient,\n prefix,\n }),\n staticHandler: getHandler({ bucket, collection, getStorageClient }),\n }\n }\n}\n"],"names":["Storage","cloudStoragePlugin","initClientUploads","getGenerateSignedURLHandler","getGenerateURL","getHandleDelete","getHandleUpload","getHandler","gcsStorage","gcsStorageOptions","incomingConfig","storageClient","getStorageClient","options","adapter","gcsStorageInternal","isPluginDisabled","enabled","clientHandler","collections","config","Boolean","serverHandler","access","clientUploads","undefined","bucket","serverHandlerPath","collectionsWithAdapter","Object","entries","reduce","acc","slug","collOptions","map","collection","upload","disableLocalStorage","acl","prefix","name","generateURL","handleDelete","handleUpload","staticHandler"],"mappings":"AAUA,SAASA,OAAO,QAAQ,wBAAuB;AAC/C,SAASC,kBAAkB,QAAQ,mCAAkC;AACrE,SAASC,iBAAiB,QAAQ,6CAA4C;AAE9E,SAASC,2BAA2B,QAAQ,yBAAwB;AACpE,SAASC,cAAc,QAAQ,mBAAkB;AACjD,SAASC,eAAe,QAAQ,oBAAmB;AACnD,SAASC,eAAe,QAAQ,oBAAmB;AACnD,SAASC,UAAU,QAAQ,qBAAoB;AAkC/C,OAAO,MAAMC,aACX,CAACC,oBACD,CAACC;QACC,IAAIC,gBAAgC;QAEpC,MAAMC,mBAAmB;YACvB,IAAID,eAAe;gBACjB,OAAOA;YACT;YACAA,gBAAgB,IAAIX,QAAQS,kBAAkBI,OAAO;YAErD,OAAOF;QACT;QAEA,MAAMG,UAAUC,mBAAmBH,kBAAkBH;QAErD,MAAMO,mBAAmBP,kBAAkBQ,OAAO,KAAK;QAEvDf,kBAAkB;YAChBgB,eAAe;YACfC,aAAaV,kBAAkBU,WAAW;YAC1CC,QAAQV;YACRO,SAAS,CAACD,oBAAoBK,QAAQZ,kBAAkBQ,OAAO;YAC/DK,eAAenB,4BAA4B;gBACzCoB,QACE,OAAOd,kBAAkBe,aAAa,KAAK,WACvCf,kBAAkBe,aAAa,CAACD,MAAM,GACtCE;gBACNC,QAAQjB,kBAAkBiB,MAAM;gBAChCP,aAAaV,kBAAkBU,WAAW;gBAC1CP;YACF;YACAe,mBAAmB;QACrB;QAEA,IAAIX,kBAAkB;YACpB,OAAON;QACT;QAEA,+CAA+C;QAC/C,MAAMkB,yBAAmEC,OAAOC,OAAO,CACrFrB,kBAAkBU,WAAW,EAC7BY,MAAM,CACN,CAACC,KAAK,CAACC,MAAMC,YAAY,GAAM,CAAA;gBAC7B,GAAGF,GAAG;gBACN,CAACC,KAAK,EAAE;oBACN,GAAIC,gBAAgB,OAAO,CAAC,IAAIA,WAAW;oBAC3CpB;gBACF;YACF,CAAA,GACA,CAAC;QAGH,gFAAgF;QAChF,MAAMM,SAAS;YACb,GAAGV,cAAc;YACjBS,aAAa,AAACT,CAAAA,eAAeS,WAAW,IAAI,EAAE,AAAD,EAAGgB,GAAG,CAAC,CAACC;gBACnD,IAAI,CAACR,sBAAsB,CAACQ,WAAWH,IAAI,CAAC,EAAE;oBAC5C,OAAOG;gBACT;gBAEA,OAAO;oBACL,GAAGA,UAAU;oBACbC,QAAQ;wBACN,GAAI,OAAOD,WAAWC,MAAM,KAAK,WAAWD,WAAWC,MAAM,GAAG,CAAC,CAAC;wBAClEC,qBAAqB;oBACvB;gBACF;YACF;QACF;QAEA,OAAOrC,mBAAmB;YACxBkB,aAAaS;QACf,GAAGR;IACL,EAAC;AAEH,SAASL,mBACPH,gBAA+B,EAC/B,EAAE2B,GAAG,EAAEb,MAAM,EAAqB;IAElC,OAAO,CAAC,EAAEU,UAAU,EAAEI,MAAM,EAAE;QAC5B,OAAO;YACLC,MAAM;YACNC,aAAatC,eAAe;gBAAEsB;gBAAQd;YAAiB;YACvD+B,cAActC,gBAAgB;gBAAEqB;gBAAQd;YAAiB;YACzDgC,cAActC,gBAAgB;gBAC5BiC;gBACAb;gBACAU;gBACAxB;gBACA4B;YACF;YACAK,eAAetC,WAAW;gBAAEmB;gBAAQU;gBAAYxB;YAAiB;QACnE;IACF;AACF"}
|
package/dist/staticHandler.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { getFilePrefix } from '@payloadcms/plugin-cloud-storage/utilities';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
export const getHandler = ({ bucket, collection, getStorageClient })=>{
|
|
4
|
-
return async (req, { params: { filename } })=>{
|
|
4
|
+
return async (req, { params: { clientUploadContext, filename } })=>{
|
|
5
5
|
try {
|
|
6
6
|
const prefix = await getFilePrefix({
|
|
7
|
+
clientUploadContext,
|
|
7
8
|
collection,
|
|
8
9
|
filename,
|
|
9
10
|
req
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/staticHandler.ts"],"sourcesContent":["import type { Storage } from '@google-cloud/storage'\nimport type { StaticHandler } from '@payloadcms/plugin-cloud-storage/types'\nimport type { CollectionConfig } from 'payload'\n\nimport { getFilePrefix } from '@payloadcms/plugin-cloud-storage/utilities'\nimport path from 'path'\n\ninterface Args {\n bucket: string\n collection: CollectionConfig\n getStorageClient: () => Storage\n}\n\nexport const getHandler = ({ bucket, collection, getStorageClient }: Args): StaticHandler => {\n return async (req, { params: { filename } }) => {\n try {\n const prefix = await getFilePrefix({ collection, filename, req })\n const file = getStorageClient().bucket(bucket).file(path.posix.join(prefix, filename))\n\n const [metadata] = await file.getMetadata()\n\n const etagFromHeaders = req.headers.get('etag') || req.headers.get('if-none-match')\n const objectEtag = metadata.etag\n\n if (etagFromHeaders && etagFromHeaders === objectEtag) {\n return new Response(null, {\n headers: new Headers({\n 'Content-Length': String(metadata.size),\n 'Content-Type': String(metadata.contentType),\n ETag: String(metadata.etag),\n }),\n status: 304,\n })\n }\n\n // Manually create a ReadableStream for the web from a Node.js stream.\n const readableStream = new ReadableStream({\n start(controller) {\n const nodeStream = file.createReadStream()\n nodeStream.on('data', (chunk) => {\n controller.enqueue(new Uint8Array(chunk))\n })\n nodeStream.on('end', () => {\n controller.close()\n })\n nodeStream.on('error', (err) => {\n controller.error(err)\n })\n },\n })\n\n return new Response(readableStream, {\n headers: new Headers({\n 'Content-Length': String(metadata.size),\n 'Content-Type': String(metadata.contentType),\n ETag: String(metadata.etag),\n }),\n status: 200,\n })\n } catch (err: unknown) {\n req.payload.logger.error(err)\n return new Response('Internal Server Error', { status: 500 })\n }\n }\n}\n"],"names":["getFilePrefix","path","getHandler","bucket","collection","getStorageClient","req","params","filename","prefix","file","posix","join","metadata","getMetadata","etagFromHeaders","headers","get","objectEtag","etag","Response","Headers","String","size","contentType","ETag","status","readableStream","ReadableStream","start","controller","nodeStream","createReadStream","on","chunk","enqueue","Uint8Array","close","err","error","payload","logger"],"mappings":"AAIA,SAASA,aAAa,QAAQ,6CAA4C;AAC1E,OAAOC,UAAU,OAAM;AAQvB,OAAO,MAAMC,aAAa,CAAC,EAAEC,MAAM,EAAEC,UAAU,EAAEC,gBAAgB,EAAQ;IACvE,OAAO,OAAOC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,EAAE,EAAE;
|
|
1
|
+
{"version":3,"sources":["../src/staticHandler.ts"],"sourcesContent":["import type { Storage } from '@google-cloud/storage'\nimport type { StaticHandler } from '@payloadcms/plugin-cloud-storage/types'\nimport type { CollectionConfig } from 'payload'\n\nimport { getFilePrefix } from '@payloadcms/plugin-cloud-storage/utilities'\nimport path from 'path'\n\ninterface Args {\n bucket: string\n collection: CollectionConfig\n getStorageClient: () => Storage\n}\n\nexport const getHandler = ({ bucket, collection, getStorageClient }: Args): StaticHandler => {\n return async (req, { params: { clientUploadContext, filename } }) => {\n try {\n const prefix = await getFilePrefix({ clientUploadContext, collection, filename, req })\n const file = getStorageClient().bucket(bucket).file(path.posix.join(prefix, filename))\n\n const [metadata] = await file.getMetadata()\n\n const etagFromHeaders = req.headers.get('etag') || req.headers.get('if-none-match')\n const objectEtag = metadata.etag\n\n if (etagFromHeaders && etagFromHeaders === objectEtag) {\n return new Response(null, {\n headers: new Headers({\n 'Content-Length': String(metadata.size),\n 'Content-Type': String(metadata.contentType),\n ETag: String(metadata.etag),\n }),\n status: 304,\n })\n }\n\n // Manually create a ReadableStream for the web from a Node.js stream.\n const readableStream = new ReadableStream({\n start(controller) {\n const nodeStream = file.createReadStream()\n nodeStream.on('data', (chunk) => {\n controller.enqueue(new Uint8Array(chunk))\n })\n nodeStream.on('end', () => {\n controller.close()\n })\n nodeStream.on('error', (err) => {\n controller.error(err)\n })\n },\n })\n\n return new Response(readableStream, {\n headers: new Headers({\n 'Content-Length': String(metadata.size),\n 'Content-Type': String(metadata.contentType),\n ETag: String(metadata.etag),\n }),\n status: 200,\n })\n } catch (err: unknown) {\n req.payload.logger.error(err)\n return new Response('Internal Server Error', { status: 500 })\n }\n }\n}\n"],"names":["getFilePrefix","path","getHandler","bucket","collection","getStorageClient","req","params","clientUploadContext","filename","prefix","file","posix","join","metadata","getMetadata","etagFromHeaders","headers","get","objectEtag","etag","Response","Headers","String","size","contentType","ETag","status","readableStream","ReadableStream","start","controller","nodeStream","createReadStream","on","chunk","enqueue","Uint8Array","close","err","error","payload","logger"],"mappings":"AAIA,SAASA,aAAa,QAAQ,6CAA4C;AAC1E,OAAOC,UAAU,OAAM;AAQvB,OAAO,MAAMC,aAAa,CAAC,EAAEC,MAAM,EAAEC,UAAU,EAAEC,gBAAgB,EAAQ;IACvE,OAAO,OAAOC,KAAK,EAAEC,QAAQ,EAAEC,mBAAmB,EAAEC,QAAQ,EAAE,EAAE;QAC9D,IAAI;YACF,MAAMC,SAAS,MAAMV,cAAc;gBAAEQ;gBAAqBJ;gBAAYK;gBAAUH;YAAI;YACpF,MAAMK,OAAON,mBAAmBF,MAAM,CAACA,QAAQQ,IAAI,CAACV,KAAKW,KAAK,CAACC,IAAI,CAACH,QAAQD;YAE5E,MAAM,CAACK,SAAS,GAAG,MAAMH,KAAKI,WAAW;YAEzC,MAAMC,kBAAkBV,IAAIW,OAAO,CAACC,GAAG,CAAC,WAAWZ,IAAIW,OAAO,CAACC,GAAG,CAAC;YACnE,MAAMC,aAAaL,SAASM,IAAI;YAEhC,IAAIJ,mBAAmBA,oBAAoBG,YAAY;gBACrD,OAAO,IAAIE,SAAS,MAAM;oBACxBJ,SAAS,IAAIK,QAAQ;wBACnB,kBAAkBC,OAAOT,SAASU,IAAI;wBACtC,gBAAgBD,OAAOT,SAASW,WAAW;wBAC3CC,MAAMH,OAAOT,SAASM,IAAI;oBAC5B;oBACAO,QAAQ;gBACV;YACF;YAEA,sEAAsE;YACtE,MAAMC,iBAAiB,IAAIC,eAAe;gBACxCC,OAAMC,UAAU;oBACd,MAAMC,aAAarB,KAAKsB,gBAAgB;oBACxCD,WAAWE,EAAE,CAAC,QAAQ,CAACC;wBACrBJ,WAAWK,OAAO,CAAC,IAAIC,WAAWF;oBACpC;oBACAH,WAAWE,EAAE,CAAC,OAAO;wBACnBH,WAAWO,KAAK;oBAClB;oBACAN,WAAWE,EAAE,CAAC,SAAS,CAACK;wBACtBR,WAAWS,KAAK,CAACD;oBACnB;gBACF;YACF;YAEA,OAAO,IAAIlB,SAASO,gBAAgB;gBAClCX,SAAS,IAAIK,QAAQ;oBACnB,kBAAkBC,OAAOT,SAASU,IAAI;oBACtC,gBAAgBD,OAAOT,SAASW,WAAW;oBAC3CC,MAAMH,OAAOT,SAASM,IAAI;gBAC5B;gBACAO,QAAQ;YACV;QACF,EAAE,OAAOY,KAAc;YACrBjC,IAAImC,OAAO,CAACC,MAAM,CAACF,KAAK,CAACD;YACzB,OAAO,IAAIlB,SAAS,yBAAyB;gBAAEM,QAAQ;YAAI;QAC7D;IACF;AACF,EAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/storage-gcs",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.26.0",
|
|
4
4
|
"description": "Payload storage adapter for Google Cloud Storage",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -37,13 +37,13 @@
|
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@google-cloud/storage": "^7.7.0",
|
|
40
|
-
"@payloadcms/plugin-cloud-storage": "3.
|
|
40
|
+
"@payloadcms/plugin-cloud-storage": "3.26.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"payload": "3.
|
|
43
|
+
"payload": "3.26.0"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
|
-
"payload": "3.
|
|
46
|
+
"payload": "3.26.0"
|
|
47
47
|
},
|
|
48
48
|
"engines": {
|
|
49
49
|
"node": "^18.20.2 || >=20.9.0"
|