diff --git a/src/lib/extension/EntitiesTransporter.ts b/src/lib/extension/EntitiesTransporter.ts index 790b4d0..a1c030e 100644 --- a/src/lib/extension/EntitiesTransporter.ts +++ b/src/lib/extension/EntitiesTransporter.ts @@ -1,5 +1,5 @@ import {validateImportedEntity} from "$lib/extension/transporting/validators.js"; -import {exportEntityToObject} from "$lib/extension/transporting/exporters.js"; +import {exportEntityToObject} from "$lib/extension/transporting/exporters.ts"; import StorageEntity from "$lib/extension/base/StorageEntity.ts"; import {compressToEncodedURIComponent, decompressFromEncodedURIComponent} from "lz-string"; @@ -55,6 +55,10 @@ export default class EntitiesTransporter { throw new TypeError('Transporter should be connected to the same entity to export!'); } + if (!(entityObject instanceof StorageEntity)) { + throw new TypeError('Only storage entities could be exported!'); + } + const exportableObject = exportEntityToObject( entityObject, this.#entityName diff --git a/src/lib/extension/transporting/exporters.js b/src/lib/extension/transporting/exporters.js deleted file mode 100644 index 87757f5..0000000 --- a/src/lib/extension/transporting/exporters.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @type {Map Record)>} - */ -const entitiesExporters = new Map([ - ['profiles', /** @param {import('../entities/MaintenanceProfile.ts').default} entity */entity => { - return { - v: 1, - id: entity.id, - name: entity.settings.name, - tags: entity.settings.tags, - } - }] -]) - -/** - * @param entityInstance - * @param {string} entityName - * @returns {Record} - */ -export function exportEntityToObject(entityInstance, entityName) { - if (!entitiesExporters.has(entityName)) { - throw new Error(`Missing exporter for entity: ${entityName}`); - } - - return entitiesExporters.get(entityName).call(null, entityInstance); -} diff --git a/src/lib/extension/transporting/exporters.ts b/src/lib/extension/transporting/exporters.ts new file mode 100644 index 0000000..c2386c4 --- /dev/null +++ b/src/lib/extension/transporting/exporters.ts @@ -0,0 +1,24 @@ +import StorageEntity from "$lib/extension/base/StorageEntity.ts"; + +type ExportersMap = { + [EntityName in keyof App.EntityNamesMap]: (entity: App.EntityNamesMap[EntityName]) => Record +}; + +const entitiesExporters: ExportersMap = { + profiles: entity => { + return { + v: 1, + id: entity.id, + name: entity.settings.name, + tags: entity.settings.tags, + } + }, +}; + +export function exportEntityToObject(entityInstance: StorageEntity, entityName: string): Record { + 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); +} diff --git a/src/lib/extension/transporting/validators.js b/src/lib/extension/transporting/validators.js index cb41e3d..111c1be 100644 --- a/src/lib/extension/transporting/validators.js +++ b/src/lib/extension/transporting/validators.js @@ -1,6 +1,6 @@ /** * Map of validators for each entity. Function should throw the error if validation failed. - * @type {Map void)>} + * @type {Map void)>} */ const entitiesValidators = new Map([ ['profiles', importedObject => { diff --git a/src/routes/features/maintenance/[id]/export/+page.svelte b/src/routes/features/maintenance/[id]/export/+page.svelte index 9788c01..ea8e2a3 100644 --- a/src/routes/features/maintenance/[id]/export/+page.svelte +++ b/src/routes/features/maintenance/[id]/export/+page.svelte @@ -10,10 +10,6 @@ import MaintenanceProfile from "$entities/MaintenanceProfile.ts"; const profileId = $page.params.id; - - /** - * @type {import('$entities/MaintenanceProfile.ts').default|undefined} - */ const profile = $maintenanceProfilesStore.find(profile => profile.id === profileId); const profilesTransporter = new EntitiesTransporter(MaintenanceProfile);