1
0
mirror of https://github.com/koloml/furbooru-tagging-assistant.git synced 2025-12-24 07:12:57 +00:00

Updated exporters to use importable types for more type safety

This commit is contained in:
2025-02-19 03:07:52 +04:00
parent 371bce133e
commit 07373e17d5
2 changed files with 12 additions and 6 deletions

View File

@@ -60,8 +60,8 @@ export default class EntitiesTransporter<EntityType> {
}
const exportableObject = exportEntityToObject(
entityObject,
this.#entityName
this.#entityName as keyof App.EntityNamesMap,
entityObject
);
return JSON.stringify(exportableObject, null, 2);

View File

@@ -1,8 +1,11 @@
import StorageEntity from "$lib/extension/base/StorageEntity";
import type { ImportableObject } from "$lib/extension/transporting/importables";
type ExporterFunction<EntityType extends StorageEntity> = (entity: EntityType) => ImportableObject<EntityType>;
type ExportersMap = {
[EntityName in keyof App.EntityNamesMap]: (entity: App.EntityNamesMap[EntityName]) => Record<string, any>
};
[EntityName in keyof App.EntityNamesMap]: ExporterFunction<App.EntityNamesMap[EntityName]>;
}
const entitiesExporters: ExportersMap = {
profiles: entity => {
@@ -24,10 +27,13 @@ const entitiesExporters: ExportersMap = {
}
};
export function exportEntityToObject(entityInstance: StorageEntity<any>, entityName: string): Record<string, any> {
export function exportEntityToObject<EntityName extends keyof App.EntityNamesMap>(
entityName: EntityName,
entityInstance: App.EntityNamesMap[EntityName]
): ImportableObject<App.EntityNamesMap[EntityName]> {
if (!(entityName in entitiesExporters) || !entitiesExporters.hasOwnProperty(entityName)) {
throw new Error(`Missing exporter for entity: ${entityName}`);
}
return entitiesExporters[entityName as keyof App.EntityNamesMap].call(null, entityInstance);
return entitiesExporters[entityName].call(null, entityInstance);
}