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 Adapterts
 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