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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user