diff --git a/src/lib/extension/EntitiesTransporter.ts b/src/lib/extension/EntitiesTransporter.ts index 598edbb..790b4d0 100644 --- a/src/lib/extension/EntitiesTransporter.ts +++ b/src/lib/extension/EntitiesTransporter.ts @@ -1,16 +1,28 @@ import {validateImportedEntity} from "$lib/extension/transporting/validators.js"; import {exportEntityToObject} from "$lib/extension/transporting/exporters.js"; -import StorageEntity from "./base/StorageEntity.js"; +import StorageEntity from "$lib/extension/base/StorageEntity.ts"; import {compressToEncodedURIComponent, decompressFromEncodedURIComponent} from "lz-string"; -type EntityConstructor = - (new (id: string, settings: Record) => T) - & typeof StorageEntity; +export default class EntitiesTransporter { + readonly #targetEntityConstructor: new (...any: any[]) => EntityType; -export default class EntitiesTransporter { - readonly #targetEntityConstructor: EntityConstructor; + /** + * Name of the entity, exported directly from the constructor. + * @private + */ + get #entityName() { + // How the hell should I even do this? + return ((this.#targetEntityConstructor as any) as typeof StorageEntity)._entityName; + } + + /** + * @param entityConstructor Class which should be used for import or export. + */ + constructor(entityConstructor: new (...any: any[]) => EntityType) { + if (!(entityConstructor.prototype instanceof StorageEntity)) { + throw new TypeError('Invalid class provided as the target for importing!'); + } - constructor(entityConstructor: EntityConstructor) { this.#targetEntityConstructor = entityConstructor; } @@ -23,7 +35,7 @@ export default class EntitiesTransporter { validateImportedEntity( importedObject, - this.#targetEntityConstructor._entityName + this.#entityName ); return new this.#targetEntityConstructor( @@ -45,7 +57,7 @@ export default class EntitiesTransporter { const exportableObject = exportEntityToObject( entityObject, - this.#targetEntityConstructor._entityName + this.#entityName ); return JSON.stringify(exportableObject, null, 2); diff --git a/src/lib/extension/base/StorageEntity.ts b/src/lib/extension/base/StorageEntity.ts index e211232..c0469a2 100644 --- a/src/lib/extension/base/StorageEntity.ts +++ b/src/lib/extension/base/StorageEntity.ts @@ -24,7 +24,7 @@ export default abstract class StorageEntity { return this.#settings; } - protected static _entityName: string = "entity"; + public static readonly _entityName: string = "entity"; async save() { await EntitiesController.updateEntity(