gpt4free-ts/utils/file.ts

69 行
1.7 KiB
TypeScript

import * as fs from 'fs';
import { PathOrFileDescriptor, WriteFileOptions } from 'fs';
class SyncFileDebouncer {
private static instance: SyncFileDebouncer;
private readonly debounceTime: number;
private timers: { [path: string]: NodeJS.Timeout } = {};
private constructor(debounceTime: number = 300) {
this.debounceTime = debounceTime;
}
public static getInstance(debounceTime?: number): SyncFileDebouncer {
if (!SyncFileDebouncer.instance) {
SyncFileDebouncer.instance = new SyncFileDebouncer(debounceTime);
}
return SyncFileDebouncer.instance;
}
public writeFileSync(
file: string,
data: string | NodeJS.ArrayBufferView,
options?: WriteFileOptions,
) {
if (this.timers[file]) {
clearTimeout(this.timers[file]);
}
this.timers[file] = setTimeout(() => {
fs.writeFileSync(file, data);
delete this.timers[file];
}, this.debounceTime);
}
}
// 使用示例
export const fileDebouncer = SyncFileDebouncer.getInstance(500); // 100ms 的 debounce 时间
export function getImageExtension(contentType: string): string {
switch (contentType) {
case 'image/jpeg':
return 'jpeg';
case 'image/jpg':
return 'jpg';
case 'image/png':
return 'png';
case 'image/gif':
return 'gif';
case 'image/bmp':
return 'bmp';
case 'image/webp':
return 'webp';
// Add other cases as needed
default:
throw new Error(`Unsupported content type: ${contentType}`);
}
}
export function IsImageMineType(mimeType: string): boolean {
return (
mimeType === 'image/jpeg' ||
mimeType === 'image/jpg' ||
mimeType === 'image/png' ||
mimeType === 'image/gif' ||
mimeType === 'image/bmp' ||
mimeType === 'image/webp'
);
}