Storage types
Core
interface ObjectReference {
bucket: string
name: string
}
interface StorageObject {
name: string
size: number
lastModified: Date
}
type ObjectPayload = string | Buffer | NodeJS.ReadableStream
interface UploadOptions {
gzip?: boolean
}
interface ObjectData {
data: NodeJS.ReadableStream
}
interface DirectoryListingParams {
startAfter?: string
limit?: number
}
interface DirectoryContents {
files: StorageObject[]
directories: string[]
}
ts
Adapter
import type {
ObjectReference,
ObjectPayload,
ObjectData,
DirectoryListingParams,
DirectoryContents,
UploadOptions
} from './types.d.ts'
type getObject = (reference: ObjectReference) => Promise<ObjectData>
type getSignedURL = (reference: ObjectReference, expires: Date) => Promise<string>
type getPublicURL = (reference: ObjectReference) => Promise<string>
type uploadObject = (reference: ObjectReference, data: ObjectPayload, options: UploadOptions) => Promise<void>
type deleteObject = (reference: ObjectReference) => Promise<void>
type listDirectory = (reference: ObjectReference, params?: DirectoryListingParams) => Promise<DirectoryContents>
type createDirectory = (reference: ObjectReference) => Promise<void>
interface Adapter {
getObject: getObject
getSignedURL: getSignedURL
getPublicURL: getPublicURL
uploadObject: uploadObject
deleteObject: deleteObject
listDirectory: listDirectory
createDirectory: createDirectory
}
export default Adapter
ts
Module
import type Adapter from './adapter.d.ts'
declare module '@genoacms/adapter-*/storage' {
import type Adapter from './adapter.d.ts'
const getObject: Adapter.getObject
const getSignedURL: Adapter.getSignedURL
const getPublicURL: Adapter.getPublicURL
const uploadObject: Adapter.uploadObject
const deleteObject: Adapter.deleteObject
const listDirectory: Adapter.listDirectory
const createDirectory: Adapter.createDirectory
export {
getObject,
getSignedURL,
getPublicURL,
uploadObject,
deleteObject,
listDirectory,
createDirectory
}
}
type StorageProvider<Extension extends object = object> = Extension & {
name: string
adapter: Promise<typeof Adapter>
}
interface BucketInit {
name: string
providerName: string
}
export type {
Adapter,
StorageProvider,
BucketInit
}
ts