UNPKG

@versatiles/google-cloud

Version:
59 lines (58 loc) 1.91 kB
import { AbstractBucket, AbstractBucketFile } from './abstract.js'; import { Storage } from '@google-cloud/storage'; import { BucketFileMetadata } from './metadata.js'; export class BucketFileGoogle extends AbstractBucketFile { #file; constructor(file) { super(); this.#file = file; } get name() { return this.#file.name; } // Check if the file exists async exists() { const [exists] = await this.#file.exists(); return exists; } // Get metadata for the file async getMetadata() { const [metadata] = await this.#file.getMetadata(); return new BucketFileMetadata({ cacheControl: metadata.cacheControl, contentType: metadata.contentType, etag: metadata.etag, filename: metadata.name, mtime: metadata.timeCreated, size: metadata.size, }); } // Create a readable stream for the file createReadStream(opt) { return this.#file.createReadStream(opt); } } export class BucketGoogle extends AbstractBucket { #bucket; constructor(bucketName) { super(); const storage = new Storage(); this.#bucket = storage.bucket(bucketName); } async check() { try { await this.#bucket.getMetadata(); } catch (err) { // eslint-disable-next-line @typescript-eslint/no-explicit-any if (err?.response?.data?.error === 'invalid_grant') { console.error(`You are not authorized to access bucket "${this.#bucket.name}"`); console.error('Maybe you want to set Application Default Credentials (ADC) by running: "gcloud auth application-default login"'); } throw err; } } getFile(relativePath) { return new BucketFileGoogle(this.#bucket.file(relativePath)); } }