46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
import { createApp, eventHandler, readBody, createError, toNodeListener } from 'h3';
|
|
import { s as stringify } from './shared/unstorage.10149939.mjs';
|
|
|
|
function createStorageServer(storage, _options = {}) {
|
|
const app = createApp();
|
|
app.use(eventHandler(async (event) => {
|
|
if (event.req.method === "GET") {
|
|
const value = await storage.getItem(event.req.url);
|
|
if (!value) {
|
|
const keys = await storage.getKeys(event.req.url);
|
|
return keys.map((key) => key.replace(/:/g, "/"));
|
|
}
|
|
return stringify(value);
|
|
}
|
|
if (event.req.method === "HEAD") {
|
|
const _hasItem = await storage.hasItem(event.req.url);
|
|
event.res.statusCode = _hasItem ? 200 : 404;
|
|
if (_hasItem) {
|
|
const meta = await storage.getMeta(event.req.url);
|
|
if (meta.mtime) {
|
|
event.res.setHeader("Last-Modified", new Date(meta.mtime).toUTCString());
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
if (event.req.method === "PUT") {
|
|
const value = await readBody(event);
|
|
await storage.setItem(event.req.url, value);
|
|
return "OK";
|
|
}
|
|
if (event.req.method === "DELETE") {
|
|
await storage.removeItem(event.req.url);
|
|
return "OK";
|
|
}
|
|
throw createError({
|
|
statusCode: 405,
|
|
statusMessage: "Method Not Allowed"
|
|
});
|
|
}));
|
|
return {
|
|
handle: toNodeListener(app)
|
|
};
|
|
}
|
|
|
|
export { createStorageServer };
|