fix(core): update
This commit is contained in:
105
ts/classes.metadata.ts
Normal file
105
ts/classes.metadata.ts
Normal file
@@ -0,0 +1,105 @@
|
||||
import * as plugins from './plugins.js';
|
||||
|
||||
import { File } from './classes.file.js';
|
||||
|
||||
export class MetaData {
|
||||
// static
|
||||
public static async createForFile(optionsArg: {
|
||||
file: File;
|
||||
}) {
|
||||
const metaData = new MetaData();
|
||||
metaData.fileRef = optionsArg.file;
|
||||
|
||||
// lets find the existing metadata file
|
||||
metaData.metadataFile = await metaData.fileRef.parentDirectoryRef.getFile({
|
||||
name: metaData.fileRef.name + '.metadata',
|
||||
createWithContents: '{}',
|
||||
});
|
||||
|
||||
return metaData;
|
||||
}
|
||||
|
||||
// instance
|
||||
/**
|
||||
* the file that contains the metadata
|
||||
*/
|
||||
metadataFile: File;
|
||||
|
||||
/**
|
||||
* the file that the metadata is for
|
||||
*/
|
||||
fileRef: File;
|
||||
|
||||
public async getFileType(optionsArg?: {
|
||||
useFileExtension?: boolean;
|
||||
useMagicBytes?: boolean;
|
||||
}): Promise<string> {
|
||||
if (optionsArg && optionsArg.useFileExtension || optionsArg.useFileExtension === undefined) {
|
||||
return plugins.path.extname(this.fileRef.name);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* gets the size of the fileRef
|
||||
*/
|
||||
public async getSizeInBytes(): Promise<number> {
|
||||
const stat = await this.fileRef.parentDirectoryRef.bucketRef.fastStat({
|
||||
path: this.fileRef.getBasePath(),
|
||||
});
|
||||
return stat.size;
|
||||
};
|
||||
|
||||
private prefixCustomMetaData = 'custom_';
|
||||
|
||||
public async storeCustomMetaData<T = any>(optionsArg: {
|
||||
key: string;
|
||||
value: T;
|
||||
}) {
|
||||
const json = await this.metadataFile.getContentsAsString();
|
||||
const parsed = await JSON.parse(json);
|
||||
parsed[this.prefixCustomMetaData + optionsArg.key] = optionsArg.value;
|
||||
await this.metadataFile.updateWithContents({
|
||||
contents: JSON.stringify(parsed),
|
||||
});
|
||||
}
|
||||
|
||||
public async getCustomMetaData<T = any>(optionsArg: {
|
||||
key: string;
|
||||
}): Promise<T> {
|
||||
const json = await this.metadataFile.getContentsAsString();
|
||||
const parsed = await JSON.parse(json);
|
||||
return parsed[this.prefixCustomMetaData + optionsArg.key];
|
||||
}
|
||||
|
||||
public async deleteCustomMetaData(optionsArg: {
|
||||
key: string;
|
||||
}) {
|
||||
const json = await this.metadataFile.getContentsAsString();
|
||||
const parsed = await JSON.parse(json);
|
||||
delete parsed[this.prefixCustomMetaData + optionsArg.key];
|
||||
await this.metadataFile.updateWithContents({
|
||||
contents: JSON.stringify(parsed),
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* set a lock on the ref file
|
||||
* @param optionsArg
|
||||
*/
|
||||
public async setLock(optionsArg: {
|
||||
lock: string;
|
||||
expires: Date;
|
||||
}) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* remove the lock on the ref file
|
||||
* @param optionsArg
|
||||
*/
|
||||
public async removeLock(optionsArg: {
|
||||
force: boolean;
|
||||
}) {
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user