Update index.ts
This commit is contained in:
parent
610d9d1385
commit
79494587cd
27
src/index.ts
27
src/index.ts
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user