Update index.ts

This commit is contained in:
fwqaaq 2023-12-24 02:35:52 +08:00 committed by GitHub
parent 610d9d1385
commit 79494587cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -30,9 +30,8 @@ export interface Env {
} }
async function* listAll(bucket: R2Bucket, prefix: string, isRecursive: boolean = false) { async function* listAll(bucket: R2Bucket, prefix: string, isRecursive: boolean = false) {
let cursor = undefined, let cursor = undefined;
truncated = true; while (true) {
while (truncated) {
const r2_objects = await bucket.list({ const r2_objects = await bucket.list({
prefix, prefix,
cursor, cursor,
@ -237,7 +236,7 @@ async function handle_get(request: Request, bucket: R2Bucket): Promise<Response>
return new Response(rangeStream, { return new Response(rangeStream, {
status: 206, status: 206,
headers: { headers: {
...getHeaders(object, { type: 2, boundary }) ...getHeaders(object, { type: 2, boundary }),
}, },
}); });
} }
@ -270,9 +269,8 @@ async function handle_delete(request: Request, bucket: R2Bucket): Promise<Respon
let resource_path = make_resource_path(request); let resource_path = make_resource_path(request);
if (resource_path === '') { if (resource_path === '') {
let truncated = true, let cursor: string | undefined = undefined;
cursor: string | undefined = undefined; while (true) {
while (truncated) {
const r2_objects = await bucket.list({ cursor }); const r2_objects = await bucket.list({ cursor });
let keys = r2_objects.objects.map((object) => object.key); let keys = r2_objects.objects.map((object) => object.key);
if (keys.length > 0) await bucket.delete(keys); if (keys.length > 0) await bucket.delete(keys);
@ -292,9 +290,8 @@ async function handle_delete(request: Request, bucket: R2Bucket): Promise<Respon
return new Response(null, { status: 204 }); return new Response(null, { status: 204 });
} }
let truncated = true, let cursor: string | undefined = undefined;
cursor: string | undefined = undefined; while (true) {
while (truncated) {
const r2_objects = await bucket.list({ const r2_objects = await bucket.list({
prefix: resource_path + '/', prefix: resource_path + '/',
cursor, cursor,
@ -342,7 +339,7 @@ async function handle_propfind(request: Request, bucket: R2Bucket): Promise<Resp
let page = `<?xml version="1.0" encoding="utf-8"?> let page = `<?xml version="1.0" encoding="utf-8"?>
<multistatus xmlns="DAV:">`; <multistatus xmlns="DAV:">`;
const create_page = (href: string, object: R2Object | null) => { const create_prop_response = (href: string, object: R2Object | null) => {
const davPropertites = Object.entries(fromR2Object(object)) const davPropertites = Object.entries(fromR2Object(object))
.filter(([_, value]) => value !== undefined) .filter(([_, value]) => value !== undefined)
.map(([key, value]) => `<${key}>${value}</${key}>`) .map(([key, value]) => `<${key}>${value}</${key}>`)
@ -359,7 +356,7 @@ async function handle_propfind(request: Request, bucket: R2Bucket): Promise<Resp
}; };
if (resource_path === '') { if (resource_path === '') {
page += create_page('/', null); page += create_prop_response('/', null);
is_collection = true; is_collection = true;
} else { } else {
let object = await bucket.head(resource_path); let object = await bucket.head(resource_path);
@ -368,7 +365,7 @@ async function handle_propfind(request: Request, bucket: R2Bucket): Promise<Resp
} }
is_collection = object.customMetadata?.resourcetype === '<collection />'; is_collection = object.customMetadata?.resourcetype === '<collection />';
let href = `/${object.key + (object.customMetadata?.resourcetype === '<collection />' ? '/' : '')}`; let href = `/${object.key + (object.customMetadata?.resourcetype === '<collection />' ? '/' : '')}`;
page += create_page(href, object); page += create_prop_response(href, object);
} }
if (is_collection) { if (is_collection) {
@ -381,7 +378,7 @@ async function handle_propfind(request: Request, bucket: R2Bucket): Promise<Resp
let prefix = resource_path === '' ? resource_path : resource_path + '/'; let prefix = resource_path === '' ? resource_path : resource_path + '/';
for await (let object of listAll(bucket, prefix)) { for await (let object of listAll(bucket, prefix)) {
let href = `/${object.key + (object.customMetadata?.resourcetype === '<collection />' ? '/' : '')}`; let href = `/${object.key + (object.customMetadata?.resourcetype === '<collection />' ? '/' : '')}`;
page += create_page(href, object); page += create_prop_response(href, object);
} }
} }
break; break;
@ -390,7 +387,7 @@ async function handle_propfind(request: Request, bucket: R2Bucket): Promise<Resp
let prefix = resource_path === '' ? resource_path : resource_path + '/'; let prefix = resource_path === '' ? resource_path : resource_path + '/';
for await (let object of listAll(bucket, prefix, true)) { for await (let object of listAll(bucket, prefix, true)) {
let href = `/${object.key + (object.customMetadata?.resourcetype === '<collection />' ? '/' : '')}`; let href = `/${object.key + (object.customMetadata?.resourcetype === '<collection />' ? '/' : '')}`;
page += create_page(href, object); page += create_prop_response(href, object);
} }
} }
break; break;