mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
fix(lint): make husky hook executable; rename backend useS3 to isS3Enabled (clears 17 false-positive useHookAtTopLevel)
This commit is contained in:
Regular → Executable
@@ -74,7 +74,7 @@ async function getS3(): Promise<S3StorageModule> {
|
|||||||
return s3Mod;
|
return s3Mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
function useS3(): boolean {
|
function isS3Enabled(): boolean {
|
||||||
return env.STORAGE_MODE === "s3";
|
return env.STORAGE_MODE === "s3";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ let storageReady = false;
|
|||||||
|
|
||||||
export async function ensureStorageDir(): Promise<void> {
|
export async function ensureStorageDir(): Promise<void> {
|
||||||
if (storageReady) return;
|
if (storageReady) return;
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.checkConnection();
|
await s3.checkConnection();
|
||||||
storageReady = true;
|
storageReady = true;
|
||||||
@@ -115,7 +115,7 @@ export async function ensureStorageDir(): Promise<void> {
|
|||||||
|
|
||||||
export async function saveFile(buffer: Buffer, originalName: string): Promise<string> {
|
export async function saveFile(buffer: Buffer, originalName: string): Promise<string> {
|
||||||
const storedName = generateStoredName(originalName);
|
const storedName = generateStoredName(originalName);
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.putObject(storedName, buffer);
|
await s3.putObject(storedName, buffer);
|
||||||
return storedName;
|
return storedName;
|
||||||
@@ -138,7 +138,7 @@ export async function saveFile(buffer: Buffer, originalName: string): Promise<st
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function readStoredFile(storedName: string): Promise<Buffer> {
|
export async function readStoredFile(storedName: string): Promise<Buffer> {
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
return s3.getObject(storedName);
|
return s3.getObject(storedName);
|
||||||
}
|
}
|
||||||
@@ -146,7 +146,7 @@ export async function readStoredFile(storedName: string): Promise<Buffer> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function streamStoredFile(storedName: string): Promise<Readable> {
|
export async function streamStoredFile(storedName: string): Promise<Readable> {
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
return s3.getObjectStream(storedName);
|
return s3.getObjectStream(storedName);
|
||||||
}
|
}
|
||||||
@@ -154,7 +154,7 @@ export async function streamStoredFile(storedName: string): Promise<Readable> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteStoredFile(storedName: string): Promise<void> {
|
export async function deleteStoredFile(storedName: string): Promise<void> {
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.deleteObject(storedName);
|
await s3.deleteObject(storedName);
|
||||||
return;
|
return;
|
||||||
@@ -177,7 +177,7 @@ let thumbDirReady = false;
|
|||||||
|
|
||||||
async function ensureThumbDir(): Promise<void> {
|
async function ensureThumbDir(): Promise<void> {
|
||||||
if (thumbDirReady) return;
|
if (thumbDirReady) return;
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
thumbDirReady = true;
|
thumbDirReady = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -197,7 +197,7 @@ function thumbPath(storedName: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getCachedThumbnail(storedName: string): Promise<Buffer | null> {
|
export async function getCachedThumbnail(storedName: string): Promise<Buffer | null> {
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
return s3.getThumbnail(storedName);
|
return s3.getThumbnail(storedName);
|
||||||
}
|
}
|
||||||
@@ -209,7 +209,7 @@ export async function getCachedThumbnail(storedName: string): Promise<Buffer | n
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function saveThumbnail(storedName: string, buffer: Buffer): Promise<void> {
|
export async function saveThumbnail(storedName: string, buffer: Buffer): Promise<void> {
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.putThumbnail(storedName, buffer);
|
await s3.putThumbnail(storedName, buffer);
|
||||||
return;
|
return;
|
||||||
@@ -219,7 +219,7 @@ export async function saveThumbnail(storedName: string, buffer: Buffer): Promise
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteThumbnail(storedName: string): Promise<void> {
|
export async function deleteThumbnail(storedName: string): Promise<void> {
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.deleteThumbnail(storedName);
|
await s3.deleteThumbnail(storedName);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function localPath(key: string): string {
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
function useS3(): boolean {
|
function isS3Enabled(): boolean {
|
||||||
return env.STORAGE_MODE === "s3";
|
return env.STORAGE_MODE === "s3";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ export async function assertLocalCapacity(): Promise<void> {
|
|||||||
|
|
||||||
export async function putObject(key: string, data: Buffer): Promise<void> {
|
export async function putObject(key: string, data: Buffer): Promise<void> {
|
||||||
assertValidKey(key);
|
assertValidKey(key);
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.putGenericObject(key, data);
|
await s3.putGenericObject(key, data);
|
||||||
return;
|
return;
|
||||||
@@ -129,7 +129,7 @@ export async function putObjectStream(
|
|||||||
yield chunk;
|
yield chunk;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.putGenericObjectStream(key, counter(source));
|
await s3.putGenericObjectStream(key, counter(source));
|
||||||
return written;
|
return written;
|
||||||
@@ -151,7 +151,7 @@ export async function getObjectStream(
|
|||||||
range?: { start: number; end?: number },
|
range?: { start: number; end?: number },
|
||||||
): Promise<Readable> {
|
): Promise<Readable> {
|
||||||
assertValidKey(key);
|
assertValidKey(key);
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
return s3.getGenericObjectStream(key, range);
|
return s3.getGenericObjectStream(key, range);
|
||||||
}
|
}
|
||||||
@@ -166,7 +166,7 @@ export async function getObjectBuffer(key: string): Promise<Buffer> {
|
|||||||
|
|
||||||
export async function getObjectSize(key: string): Promise<number> {
|
export async function getObjectSize(key: string): Promise<number> {
|
||||||
assertValidKey(key);
|
assertValidKey(key);
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
return s3.getGenericObjectSize(key);
|
return s3.getGenericObjectSize(key);
|
||||||
}
|
}
|
||||||
@@ -184,7 +184,7 @@ export async function objectExists(key: string): Promise<boolean> {
|
|||||||
|
|
||||||
export async function deleteObject(key: string): Promise<void> {
|
export async function deleteObject(key: string): Promise<void> {
|
||||||
assertValidKey(key);
|
assertValidKey(key);
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.deleteGenericObject(key);
|
await s3.deleteGenericObject(key);
|
||||||
return;
|
return;
|
||||||
@@ -196,7 +196,7 @@ export async function deletePrefix(prefix: string): Promise<void> {
|
|||||||
if (!/^(uploads|outputs)\/[A-Za-z0-9][A-Za-z0-9._-]*\/?$/.test(prefix)) {
|
if (!/^(uploads|outputs)\/[A-Za-z0-9][A-Za-z0-9._-]*\/?$/.test(prefix)) {
|
||||||
throw new Error(`Invalid prefix: ${prefix}`);
|
throw new Error(`Invalid prefix: ${prefix}`);
|
||||||
}
|
}
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
await s3.deleteGenericPrefix(prefix);
|
await s3.deleteGenericPrefix(prefix);
|
||||||
return;
|
return;
|
||||||
@@ -208,7 +208,7 @@ export async function listObjects(prefix: string): Promise<ObjectInfo[]> {
|
|||||||
if (!/^(uploads|outputs)\/[A-Za-z0-9][A-Za-z0-9._-]*\/?$/.test(prefix) || prefix.includes("..")) {
|
if (!/^(uploads|outputs)\/[A-Za-z0-9][A-Za-z0-9._-]*\/?$/.test(prefix) || prefix.includes("..")) {
|
||||||
throw new Error(`Invalid prefix: ${prefix}`);
|
throw new Error(`Invalid prefix: ${prefix}`);
|
||||||
}
|
}
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
return s3.listGenericObjects(prefix);
|
return s3.listGenericObjects(prefix);
|
||||||
}
|
}
|
||||||
@@ -233,7 +233,7 @@ export async function listObjects(prefix: string): Promise<ObjectInfo[]> {
|
|||||||
// Lists the top-level job directories under a prefix with their mtime so the
|
// Lists the top-level job directories under a prefix with their mtime so the
|
||||||
// TTL sweeper can expire whole jobs. S3 derives them from key listings.
|
// TTL sweeper can expire whole jobs. S3 derives them from key listings.
|
||||||
export async function listJobDirs(prefix: "uploads" | "outputs"): Promise<ObjectInfo[]> {
|
export async function listJobDirs(prefix: "uploads" | "outputs"): Promise<ObjectInfo[]> {
|
||||||
if (useS3()) {
|
if (isS3Enabled()) {
|
||||||
const s3 = await getS3();
|
const s3 = await getS3();
|
||||||
return s3.listGenericJobDirs(prefix);
|
return s3.listGenericJobDirs(prefix);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user