@payloadcms/storage-r2 3.92.0 → 3.92.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +2 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapter.spec.d.ts +2 -0
- package/dist/adapter.spec.d.ts.map +1 -0
- package/dist/adapter.spec.js +41 -0
- package/dist/adapter.spec.js.map +1 -0
- package/dist/uploadFile.d.ts +2 -1
- package/dist/uploadFile.d.ts.map +1 -1
- package/dist/uploadFile.js +7 -2
- package/dist/uploadFile.js.map +1 -1
- package/package.json +4 -4
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EAEpB,MAAM,wCAAwC,CAAA;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAM1C,UAAU,mBAAmB;IAC3B,MAAM,EAAE,QAAQ,CAAA;IAChB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,aAAa,EACb,oBAA4B,GAC7B,EAAE,mBAAmB,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EAEpB,MAAM,wCAAwC,CAAA;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAM1C,UAAU,mBAAmB;IAC3B,MAAM,EAAE,QAAQ,CAAA;IAChB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,aAAa,EACb,oBAA4B,GAC7B,EAAE,mBAAmB,GAAG,OAAO,CAkC/B"}
|
package/dist/adapter.js
CHANGED
|
@@ -14,7 +14,8 @@ export function createR2Adapter({ bucket, clientUploads, useCompositePrefixes =
|
|
|
14
14
|
bucket,
|
|
15
15
|
buffer: file.buffer,
|
|
16
16
|
mimeType: file.mimeType,
|
|
17
|
-
storageFilePath
|
|
17
|
+
storageFilePath,
|
|
18
|
+
tempFilePath: file.tempFilePath
|
|
18
19
|
}),
|
|
19
20
|
staticHandler: (req, { doc, headers, params: { clientUploadContext, filename } })=>getFile({
|
|
20
21
|
bucket,
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapter.ts"],"sourcesContent":["import type {\n Adapter,\n ClientUploadsConfig,\n GeneratedAdapter,\n} from '@payloadcms/plugin-cloud-storage/types'\n\nimport type { R2Bucket } from './types.js'\n\nimport { deleteFile } from './deleteFile.js'\nimport { getFile } from './getFile.js'\nimport { uploadFile } from './uploadFile.js'\n\ninterface CreateR2AdapterArgs {\n bucket: R2Bucket\n clientUploads?: ClientUploadsConfig\n useCompositePrefixes?: boolean\n}\n\nexport function createR2Adapter({\n bucket,\n clientUploads,\n useCompositePrefixes = false,\n}: CreateR2AdapterArgs): Adapter {\n return ({ collection, prefix = '' }): GeneratedAdapter => ({\n name: 'r2',\n clientUploads,\n requiresClientUploadReceipt: true,\n\n handleDelete: ({ storageFilePath }) =>\n deleteFile({\n bucket,\n storageFilePath,\n }),\n\n handleUpload: ({ file, storageFilePath }) =>\n uploadFile({\n bucket,\n buffer: file.buffer,\n mimeType: file.mimeType,\n storageFilePath,\n }),\n\n staticHandler: (req, { doc, headers, params: { clientUploadContext, filename } }) =>\n getFile({\n bucket,\n clientUploadContext,\n collection,\n doc,\n filename,\n incomingHeaders: headers,\n prefix,\n req,\n useCompositePrefixes,\n }),\n })\n}\n"],"names":["deleteFile","getFile","uploadFile","createR2Adapter","bucket","clientUploads","useCompositePrefixes","collection","prefix","name","requiresClientUploadReceipt","handleDelete","storageFilePath","handleUpload","file","buffer","mimeType","staticHandler","req","doc","headers","params","clientUploadContext","filename","incomingHeaders"],"mappings":"AAQA,SAASA,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,UAAU,QAAQ,kBAAiB;AAQ5C,OAAO,SAASC,gBAAgB,EAC9BC,MAAM,EACNC,aAAa,EACbC,uBAAuB,KAAK,EACR;IACpB,OAAO,CAAC,EAAEC,UAAU,EAAEC,SAAS,EAAE,EAAE,GAAwB,CAAA;YACzDC,MAAM;YACNJ;YACAK,6BAA6B;YAE7BC,cAAc,CAAC,EAAEC,eAAe,EAAE,GAChCZ,WAAW;oBACTI;oBACAQ;gBACF;YAEFC,cAAc,CAAC,EAAEC,IAAI,EAAEF,eAAe,EAAE,GACtCV,WAAW;oBACTE;oBACAW,QAAQD,KAAKC,MAAM;oBACnBC,UAAUF,KAAKE,QAAQ;oBACvBJ;
|
|
1
|
+
{"version":3,"sources":["../src/adapter.ts"],"sourcesContent":["import type {\n Adapter,\n ClientUploadsConfig,\n GeneratedAdapter,\n} from '@payloadcms/plugin-cloud-storage/types'\n\nimport type { R2Bucket } from './types.js'\n\nimport { deleteFile } from './deleteFile.js'\nimport { getFile } from './getFile.js'\nimport { uploadFile } from './uploadFile.js'\n\ninterface CreateR2AdapterArgs {\n bucket: R2Bucket\n clientUploads?: ClientUploadsConfig\n useCompositePrefixes?: boolean\n}\n\nexport function createR2Adapter({\n bucket,\n clientUploads,\n useCompositePrefixes = false,\n}: CreateR2AdapterArgs): Adapter {\n return ({ collection, prefix = '' }): GeneratedAdapter => ({\n name: 'r2',\n clientUploads,\n requiresClientUploadReceipt: true,\n\n handleDelete: ({ storageFilePath }) =>\n deleteFile({\n bucket,\n storageFilePath,\n }),\n\n handleUpload: ({ file, storageFilePath }) =>\n uploadFile({\n bucket,\n buffer: file.buffer,\n mimeType: file.mimeType,\n storageFilePath,\n tempFilePath: file.tempFilePath,\n }),\n\n staticHandler: (req, { doc, headers, params: { clientUploadContext, filename } }) =>\n getFile({\n bucket,\n clientUploadContext,\n collection,\n doc,\n filename,\n incomingHeaders: headers,\n prefix,\n req,\n useCompositePrefixes,\n }),\n })\n}\n"],"names":["deleteFile","getFile","uploadFile","createR2Adapter","bucket","clientUploads","useCompositePrefixes","collection","prefix","name","requiresClientUploadReceipt","handleDelete","storageFilePath","handleUpload","file","buffer","mimeType","tempFilePath","staticHandler","req","doc","headers","params","clientUploadContext","filename","incomingHeaders"],"mappings":"AAQA,SAASA,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,UAAU,QAAQ,kBAAiB;AAQ5C,OAAO,SAASC,gBAAgB,EAC9BC,MAAM,EACNC,aAAa,EACbC,uBAAuB,KAAK,EACR;IACpB,OAAO,CAAC,EAAEC,UAAU,EAAEC,SAAS,EAAE,EAAE,GAAwB,CAAA;YACzDC,MAAM;YACNJ;YACAK,6BAA6B;YAE7BC,cAAc,CAAC,EAAEC,eAAe,EAAE,GAChCZ,WAAW;oBACTI;oBACAQ;gBACF;YAEFC,cAAc,CAAC,EAAEC,IAAI,EAAEF,eAAe,EAAE,GACtCV,WAAW;oBACTE;oBACAW,QAAQD,KAAKC,MAAM;oBACnBC,UAAUF,KAAKE,QAAQ;oBACvBJ;oBACAK,cAAcH,KAAKG,YAAY;gBACjC;YAEFC,eAAe,CAACC,KAAK,EAAEC,GAAG,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,mBAAmB,EAAEC,QAAQ,EAAE,EAAE,GAC9EvB,QAAQ;oBACNG;oBACAmB;oBACAhB;oBACAa;oBACAI;oBACAC,iBAAiBJ;oBACjBb;oBACAW;oBACAb;gBACF;QACJ,CAAA;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.spec.d.ts","sourceRoot":"","sources":["../src/adapter.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { rm, writeFile } from 'fs/promises';
|
|
3
|
+
import { tmpdir } from 'os';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { expect, it } from 'vitest';
|
|
6
|
+
import { createR2Adapter } from './adapter.js';
|
|
7
|
+
it('should upload the temporary file contents', async ()=>{
|
|
8
|
+
const bytes = Buffer.from('processed image contents');
|
|
9
|
+
const tempFilePath = path.join(tmpdir(), `r2-upload-${randomUUID()}`);
|
|
10
|
+
let storedBody;
|
|
11
|
+
const bucket = {
|
|
12
|
+
put: (_key, body)=>{
|
|
13
|
+
storedBody = body;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const adapter = createR2Adapter({
|
|
17
|
+
bucket: bucket
|
|
18
|
+
})({
|
|
19
|
+
collection: {
|
|
20
|
+
slug: 'media'
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
await writeFile(tempFilePath, bytes);
|
|
24
|
+
try {
|
|
25
|
+
await adapter.handleUpload({
|
|
26
|
+
file: {
|
|
27
|
+
buffer: Buffer.alloc(0),
|
|
28
|
+
mimeType: 'image/png',
|
|
29
|
+
tempFilePath
|
|
30
|
+
},
|
|
31
|
+
storageFilePath: 'processed.png'
|
|
32
|
+
});
|
|
33
|
+
expect(Buffer.from(await new Response(storedBody).arrayBuffer())).toEqual(bytes);
|
|
34
|
+
} finally{
|
|
35
|
+
await rm(tempFilePath, {
|
|
36
|
+
force: true
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=adapter.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapter.spec.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\nimport { rm, writeFile } from 'fs/promises'\nimport { tmpdir } from 'os'\nimport path from 'path'\nimport { expect, it } from 'vitest'\n\nimport { createR2Adapter } from './adapter.js'\n\nit('should upload the temporary file contents', async () => {\n const bytes = Buffer.from('processed image contents')\n const tempFilePath = path.join(tmpdir(), `r2-upload-${randomUUID()}`)\n let storedBody: Blob | Buffer | undefined\n const bucket = {\n put: (_key: string, body: Blob | Buffer) => {\n storedBody = body\n },\n }\n const adapter = createR2Adapter({ bucket: bucket as never })({\n collection: { slug: 'media' },\n } as never)\n\n await writeFile(tempFilePath, bytes)\n\n try {\n await adapter.handleUpload({\n file: { buffer: Buffer.alloc(0), mimeType: 'image/png', tempFilePath },\n storageFilePath: 'processed.png',\n } as never)\n\n expect(Buffer.from(await new Response(storedBody).arrayBuffer())).toEqual(bytes)\n } finally {\n await rm(tempFilePath, { force: true })\n }\n})\n"],"names":["randomUUID","rm","writeFile","tmpdir","path","expect","it","createR2Adapter","bytes","Buffer","from","tempFilePath","join","storedBody","bucket","put","_key","body","adapter","collection","slug","handleUpload","file","buffer","alloc","mimeType","storageFilePath","Response","arrayBuffer","toEqual","force"],"mappings":"AAAA,SAASA,UAAU,QAAQ,SAAQ;AACnC,SAASC,EAAE,EAAEC,SAAS,QAAQ,cAAa;AAC3C,SAASC,MAAM,QAAQ,KAAI;AAC3B,OAAOC,UAAU,OAAM;AACvB,SAASC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAEnC,SAASC,eAAe,QAAQ,eAAc;AAE9CD,GAAG,6CAA6C;IAC9C,MAAME,QAAQC,OAAOC,IAAI,CAAC;IAC1B,MAAMC,eAAeP,KAAKQ,IAAI,CAACT,UAAU,CAAC,UAAU,EAAEH,cAAc;IACpE,IAAIa;IACJ,MAAMC,SAAS;QACbC,KAAK,CAACC,MAAcC;YAClBJ,aAAaI;QACf;IACF;IACA,MAAMC,UAAUX,gBAAgB;QAAEO,QAAQA;IAAgB,GAAG;QAC3DK,YAAY;YAAEC,MAAM;QAAQ;IAC9B;IAEA,MAAMlB,UAAUS,cAAcH;IAE9B,IAAI;QACF,MAAMU,QAAQG,YAAY,CAAC;YACzBC,MAAM;gBAAEC,QAAQd,OAAOe,KAAK,CAAC;gBAAIC,UAAU;gBAAad;YAAa;YACrEe,iBAAiB;QACnB;QAEArB,OAAOI,OAAOC,IAAI,CAAC,MAAM,IAAIiB,SAASd,YAAYe,WAAW,KAAKC,OAAO,CAACrB;IAC5E,SAAU;QACR,MAAMP,GAAGU,cAAc;YAAEmB,OAAO;QAAK;IACvC;AACF"}
|
package/dist/uploadFile.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ interface UploadFileArgs {
|
|
|
4
4
|
buffer: Buffer;
|
|
5
5
|
mimeType: string;
|
|
6
6
|
storageFilePath: string;
|
|
7
|
+
tempFilePath?: string;
|
|
7
8
|
}
|
|
8
|
-
export declare function uploadFile({ bucket, buffer, mimeType, storageFilePath, }: UploadFileArgs): Promise<void>;
|
|
9
|
+
export declare function uploadFile({ bucket, buffer, mimeType, storageFilePath, tempFilePath, }: UploadFileArgs): Promise<void>;
|
|
9
10
|
export {};
|
|
10
11
|
//# sourceMappingURL=uploadFile.d.ts.map
|
package/dist/uploadFile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadFile.d.ts","sourceRoot":"","sources":["../src/uploadFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAI1C,UAAU,cAAc;IACtB,MAAM,EAAE,QAAQ,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"uploadFile.d.ts","sourceRoot":"","sources":["../src/uploadFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAI1C,UAAU,cAAc;IACtB,MAAM,EAAE,QAAQ,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAsB,UAAU,CAAC,EAC/B,MAAM,EACN,MAAM,EACN,QAAQ,EACR,eAAe,EACf,YAAY,GACb,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAahC"}
|
package/dist/uploadFile.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
const isMiniflare = process.env.NODE_ENV === 'development';
|
|
2
|
-
export async function uploadFile({ bucket, buffer, mimeType, storageFilePath }) {
|
|
2
|
+
export async function uploadFile({ bucket, buffer, mimeType, storageFilePath, tempFilePath }) {
|
|
3
3
|
// Read more: https://github.com/cloudflare/workers-sdk/issues/6047#issuecomment-2691217843
|
|
4
|
-
|
|
4
|
+
let body = isMiniflare ? new Blob([
|
|
5
5
|
buffer
|
|
6
6
|
]) : buffer;
|
|
7
|
+
if (tempFilePath) {
|
|
8
|
+
// Workers require filesystem compatibility to use temp files, so keep this import conditional.
|
|
9
|
+
const { openAsBlob } = await import('fs');
|
|
10
|
+
body = await openAsBlob(tempFilePath);
|
|
11
|
+
}
|
|
7
12
|
await bucket.put(storageFilePath, body, {
|
|
8
13
|
httpMetadata: {
|
|
9
14
|
contentType: mimeType
|
package/dist/uploadFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/uploadFile.ts"],"sourcesContent":["import type { R2Bucket } from './types.js'\n\nconst isMiniflare = process.env.NODE_ENV === 'development'\n\ninterface UploadFileArgs {\n bucket: R2Bucket\n buffer: Buffer\n mimeType: string\n storageFilePath: string\n}\n\nexport async function uploadFile({\n bucket,\n buffer,\n mimeType,\n storageFilePath,\n}: UploadFileArgs): Promise<void> {\n // Read more: https://github.com/cloudflare/workers-sdk/issues/6047#issuecomment-2691217843\n
|
|
1
|
+
{"version":3,"sources":["../src/uploadFile.ts"],"sourcesContent":["import type { R2Bucket } from './types.js'\n\nconst isMiniflare = process.env.NODE_ENV === 'development'\n\ninterface UploadFileArgs {\n bucket: R2Bucket\n buffer: Buffer\n mimeType: string\n storageFilePath: string\n tempFilePath?: string\n}\n\nexport async function uploadFile({\n bucket,\n buffer,\n mimeType,\n storageFilePath,\n tempFilePath,\n}: UploadFileArgs): Promise<void> {\n // Read more: https://github.com/cloudflare/workers-sdk/issues/6047#issuecomment-2691217843\n let body = isMiniflare ? new Blob([buffer]) : buffer\n\n if (tempFilePath) {\n // Workers require filesystem compatibility to use temp files, so keep this import conditional.\n const { openAsBlob } = await import('fs')\n body = await openAsBlob(tempFilePath)\n }\n\n await bucket.put(storageFilePath, body, {\n httpMetadata: { contentType: mimeType },\n })\n}\n"],"names":["isMiniflare","process","env","NODE_ENV","uploadFile","bucket","buffer","mimeType","storageFilePath","tempFilePath","body","Blob","openAsBlob","put","httpMetadata","contentType"],"mappings":"AAEA,MAAMA,cAAcC,QAAQC,GAAG,CAACC,QAAQ,KAAK;AAU7C,OAAO,eAAeC,WAAW,EAC/BC,MAAM,EACNC,MAAM,EACNC,QAAQ,EACRC,eAAe,EACfC,YAAY,EACG;IACf,2FAA2F;IAC3F,IAAIC,OAAOV,cAAc,IAAIW,KAAK;QAACL;KAAO,IAAIA;IAE9C,IAAIG,cAAc;QAChB,+FAA+F;QAC/F,MAAM,EAAEG,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC;QACpCF,OAAO,MAAME,WAAWH;IAC1B;IAEA,MAAMJ,OAAOQ,GAAG,CAACL,iBAAiBE,MAAM;QACtCI,cAAc;YAAEC,aAAaR;QAAS;IACxC;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/storage-r2",
|
|
3
|
-
"version": "3.92.
|
|
3
|
+
"version": "3.92.1",
|
|
4
4
|
"description": "Payload storage adapter for Cloudflare R2",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
"dist"
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@payloadcms/plugin-cloud-storage": "3.92.
|
|
40
|
+
"@payloadcms/plugin-cloud-storage": "3.92.1"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@cloudflare/workers-types": "4.20260218.0",
|
|
44
|
-
"payload": "3.92.
|
|
44
|
+
"payload": "3.92.1"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"payload": "3.92.
|
|
47
|
+
"payload": "3.92.1"
|
|
48
48
|
},
|
|
49
49
|
"engines": {
|
|
50
50
|
"node": "^22.23.4 || >=24.22.1"
|