0
0
mirror of https://github.com/honojs/hono.git synced 2024-11-30 01:56:18 +01:00
hono/deno_dist/utils/cloudflare.ts
2022-07-02 23:22:51 +09:00

48 lines
1.1 KiB
TypeScript

declare const __STATIC_CONTENT: KVNamespace
declare const __STATIC_CONTENT_MANIFEST: string
export type KVAssetOptions = {
manifest?: object | string
namespace?: KVNamespace
}
export const getContentFromKVAsset = async (
path: string,
options?: KVAssetOptions
): Promise<ArrayBuffer | null> => {
let ASSET_MANIFEST: Record<string, string> = {}
if (options && options.manifest) {
if (typeof options.manifest === 'string') {
ASSET_MANIFEST = JSON.parse(options.manifest)
} else {
ASSET_MANIFEST = options.manifest as Record<string, string>
}
} else {
if (typeof __STATIC_CONTENT_MANIFEST === 'string') {
ASSET_MANIFEST = JSON.parse(__STATIC_CONTENT_MANIFEST)
} else {
ASSET_MANIFEST = __STATIC_CONTENT_MANIFEST
}
}
let ASSET_NAMESPACE: KVNamespace
if (options && options.namespace) {
ASSET_NAMESPACE = options.namespace
} else {
ASSET_NAMESPACE = __STATIC_CONTENT
}
const key = ASSET_MANIFEST[path] || path
if (!key) {
return null
}
let content = await ASSET_NAMESPACE.get(key, { type: 'arrayBuffer' })
if (content) {
content = content as ArrayBuffer
}
return content
}