diff --git a/src/index.ts b/src/index.ts index 6f47fd6..3ba023a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -151,28 +151,28 @@ async function handle_get(request: Request, bucket: R2Bucket): Promise ...(object.httpMetadata?.contentDisposition ? { - 'Content-Disposition': object.httpMetadata.contentDisposition, - } + 'Content-Disposition': object.httpMetadata.contentDisposition, + } : {}), ...(object.httpMetadata?.contentEncoding ? { - 'Content-Encoding': object.httpMetadata.contentEncoding, - } + 'Content-Encoding': object.httpMetadata.contentEncoding, + } : {}), ...(object.httpMetadata?.contentLanguage ? { - 'Content-Language': object.httpMetadata.contentLanguage, - } + 'Content-Language': object.httpMetadata.contentLanguage, + } : {}), ...(object.httpMetadata?.cacheControl ? { - 'Cache-Control': object.httpMetadata.cacheControl, - } + 'Cache-Control': object.httpMetadata.cacheControl, + } : {}), ...(object.httpMetadata?.cacheExpiry ? { - 'Cache-Expiry': object.httpMetadata.cacheExpiry.toISOString(), - } + 'Cache-Expiry': object.httpMetadata.cacheExpiry.toISOString(), + } : {}), }, }); @@ -281,15 +281,9 @@ async function handle_mkcol(request: Request, bucket: R2Bucket): Promise { - let resource_path = make_resource_path(request); - - let is_collection: boolean; - let page = ` -`; - - if (resource_path === '') { - page += ` +function generate_propfind_response(object: R2Object | null): string { + if (object === null) { + return ` / @@ -302,6 +296,33 @@ async function handle_propfind(request: Request, bucket: R2Bucket): PromiseHTTP/1.1 200 OK `; + } + + let href = `/${object.key + (object.customMetadata?.resourcetype === '' ? '/' : '')}`; + return ` + + ${href} + + + ${Object.entries(fromR2Object(object)) + .filter(([_, value]) => value !== undefined) + .map(([key, value]) => `<${key}>${value}`) + .join('\n ')} + + HTTP/1.1 200 OK + + `; +} + +async function handle_propfind(request: Request, bucket: R2Bucket): Promise { + let resource_path = make_resource_path(request); + + let is_collection: boolean; + let page = ` +`; + + if (resource_path === '') { + page += generate_propfind_response(null); is_collection = true; } else { let object = await bucket.head(resource_path); @@ -309,20 +330,7 @@ async function handle_propfind(request: Request, bucket: R2Bucket): Promise'; - let href = `/${object.key + (object.customMetadata?.resourcetype === '' ? '/' : '')}`; - page += ` - - ${href} - - - ${Object.entries(fromR2Object(object)) - .filter(([_, value]) => value !== undefined) - .map(([key, value]) => `<${key}>${value}`) - .join('\n ')} - - HTTP/1.1 200 OK - - `; + page += generate_propfind_response(object); } if (is_collection) { @@ -334,20 +342,7 @@ async function handle_propfind(request: Request, bucket: R2Bucket): Promise' ? '/' : '')}`; - page += ` - - ${href} - - - ${Object.entries(fromR2Object(object)) - .filter(([_, value]) => value !== undefined) - .map(([key, value]) => `<${key}>${value}`) - .join('\n ')} - - HTTP/1.1 200 OK - - `; + page += generate_propfind_response(object); } } break; @@ -355,20 +350,7 @@ async function handle_propfind(request: Request, bucket: R2Bucket): Promise' ? '/' : '')}`; - page += ` - - ${href} - - - ${Object.entries(fromR2Object(object)) - .filter(([_, value]) => value !== undefined) - .map(([key, value]) => `<${key}>${value}`) - .join('\n ')} - - HTTP/1.1 200 OK - - `; + page += generate_propfind_response(object); } } break;