@igo2/context
Version:
82 lines • 11 kB
JavaScript
import { Injectable } from '@angular/core';
import { ConfigService } from '@igo2/core/config';
import { Observable } from 'rxjs';
import { ImportInvalidFileError, ImportSizeError, ImportUnreadableFileError } from './context-import.errors';
import { getFileExtension } from './context-import.utils';
import * as i0 from "@angular/core";
import * as i1 from "@igo2/core/config";
export class ContextImportService {
config;
static allowedMimeTypes = ['application/json'];
static allowedExtensions = 'json';
clientSideFileSizeMax;
constructor(config) {
this.config = config;
const configFileSizeMb = this.config.getConfig('importExport.clientSideFileSizeMaxMb');
this.clientSideFileSizeMax =
(configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);
}
import(file) {
return this.importAsync(file);
}
getFileImporter(file) {
const extension = getFileExtension(file);
const mimeType = file.type;
const allowedMimeTypes = [...ContextImportService.allowedMimeTypes];
const allowedExtensions = ContextImportService.allowedExtensions;
if (allowedMimeTypes.indexOf(mimeType) < 0 &&
allowedExtensions.indexOf(extension) < 0) {
return undefined;
}
else if (mimeType === 'application/json' ||
extension === ContextImportService.allowedExtensions) {
return this.importFile;
}
return undefined;
}
importAsync(file) {
const doImport = (observer) => {
if (file.size >= this.clientSideFileSizeMax) {
observer.error(new ImportSizeError());
return;
}
const importer = this.getFileImporter(file);
if (importer === undefined) {
observer.error(new ImportInvalidFileError());
return;
}
importer.call(this, file, observer);
};
return new Observable(doImport);
}
importFile(file, observer) {
const reader = new FileReader();
reader.onload = (event) => {
try {
const context = this.parseContextFromFile(file, event.target.result);
observer.next(context);
}
catch {
observer.error(new ImportUnreadableFileError());
}
observer.complete();
};
reader.onerror = () => {
observer.error(new ImportUnreadableFileError());
};
reader.readAsText(file, 'UTF-8');
}
parseContextFromFile(file, data) {
const context = JSON.parse(data);
return context;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextImportService, deps: [{ token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextImportService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextImportService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.ConfigService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LWltcG9ydC1leHBvcnQvc2hhcmVkL2NvbnRleHQtaW1wb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZix5QkFBeUIsRUFDMUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBSzFELE1BQU0sT0FBTyxvQkFBb0I7SUFPWDtJQU5wQixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7SUFFMUIscUJBQXFCLENBQVM7SUFFdEMsWUFBb0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN2QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUM1QyxzQ0FBc0MsQ0FDdkMsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUI7WUFDeEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sZUFBZSxDQUNyQixJQUFVO1FBT1YsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMzQixNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsaUJBQWlCLENBQUM7UUFFakUsSUFDRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUN0QyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUN4QyxDQUFDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQzthQUFNLElBQ0wsUUFBUSxLQUFLLGtCQUFrQjtZQUMvQixTQUFTLEtBQUssb0JBQW9CLENBQUMsaUJBQWlCLEVBQ3BELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBVTtRQUM1QixNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQW1DLEVBQUUsRUFBRTtZQUN2RCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzVDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzNCLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7Z0JBQzdDLE9BQU87WUFDVCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQztRQUVGLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFVLEVBQUUsUUFBbUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUVoQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUVELFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNwQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUkseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsSUFBWTtRQUNuRCxNQUFNLE9BQU8sR0FBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO3dHQXhGVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEZXRhaWxlZENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0LW1hbmFnZXIvc2hhcmVkL2NvbnRleHQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEltcG9ydEludmFsaWRGaWxlRXJyb3IsXG4gIEltcG9ydFNpemVFcnJvcixcbiAgSW1wb3J0VW5yZWFkYWJsZUZpbGVFcnJvclxufSBmcm9tICcuL2NvbnRleHQtaW1wb3J0LmVycm9ycyc7XG5pbXBvcnQgeyBnZXRGaWxlRXh0ZW5zaW9uIH0gZnJvbSAnLi9jb250ZXh0LWltcG9ydC51dGlscyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRJbXBvcnRTZXJ2aWNlIHtcbiAgc3RhdGljIGFsbG93ZWRNaW1lVHlwZXMgPSBbJ2FwcGxpY2F0aW9uL2pzb24nXTtcblxuICBzdGF0aWMgYWxsb3dlZEV4dGVuc2lvbnMgPSAnanNvbic7XG5cbiAgcHJpdmF0ZSBjbGllbnRTaWRlRmlsZVNpemVNYXg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSkge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGVTaXplTWIgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXG4gICAgICAnaW1wb3J0RXhwb3J0LmNsaWVudFNpZGVGaWxlU2l6ZU1heE1iJ1xuICAgICk7XG4gICAgdGhpcy5jbGllbnRTaWRlRmlsZVNpemVNYXggPVxuICAgICAgKGNvbmZpZ0ZpbGVTaXplTWIgPyBjb25maWdGaWxlU2l6ZU1iIDogMzApICogTWF0aC5wb3coMTAyNCwgMik7XG4gIH1cblxuICBpbXBvcnQoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8RGV0YWlsZWRDb250ZXh0PiB7XG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0QXN5bmMoZmlsZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVJbXBvcnRlcihcbiAgICBmaWxlOiBGaWxlXG4gICk6IChcbiAgICBmaWxlOiBGaWxlLFxuICAgIG9ic2VydmVyOiBPYnNlcnZlcjxEZXRhaWxlZENvbnRleHQ+LFxuICAgIHByb2plY3Rpb25Jbjogc3RyaW5nLFxuICAgIHByb2plY3Rpb25PdXQ6IHN0cmluZ1xuICApID0+IHZvaWQge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGdldEZpbGVFeHRlbnNpb24oZmlsZSk7XG4gICAgY29uc3QgbWltZVR5cGUgPSBmaWxlLnR5cGU7XG4gICAgY29uc3QgYWxsb3dlZE1pbWVUeXBlcyA9IFsuLi5Db250ZXh0SW1wb3J0U2VydmljZS5hbGxvd2VkTWltZVR5cGVzXTtcbiAgICBjb25zdCBhbGxvd2VkRXh0ZW5zaW9ucyA9IENvbnRleHRJbXBvcnRTZXJ2aWNlLmFsbG93ZWRFeHRlbnNpb25zO1xuXG4gICAgaWYgKFxuICAgICAgYWxsb3dlZE1pbWVUeXBlcy5pbmRleE9mKG1pbWVUeXBlKSA8IDAgJiZcbiAgICAgIGFsbG93ZWRFeHRlbnNpb25zLmluZGV4T2YoZXh0ZW5zaW9uKSA8IDBcbiAgICApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vanNvbicgfHxcbiAgICAgIGV4dGVuc2lvbiA9PT0gQ29udGV4dEltcG9ydFNlcnZpY2UuYWxsb3dlZEV4dGVuc2lvbnNcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLmltcG9ydEZpbGU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGltcG9ydEFzeW5jKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPERldGFpbGVkQ29udGV4dD4ge1xuICAgIGNvbnN0IGRvSW1wb3J0ID0gKG9ic2VydmVyOiBPYnNlcnZlcjxEZXRhaWxlZENvbnRleHQ+KSA9PiB7XG4gICAgICBpZiAoZmlsZS5zaXplID49IHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4KSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBJbXBvcnRTaXplRXJyb3IoKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGltcG9ydGVyID0gdGhpcy5nZXRGaWxlSW1wb3J0ZXIoZmlsZSk7XG4gICAgICBpZiAoaW1wb3J0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgSW1wb3J0SW52YWxpZEZpbGVFcnJvcigpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpbXBvcnRlci5jYWxsKHRoaXMsIGZpbGUsIG9ic2VydmVyKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGRvSW1wb3J0KTtcbiAgfVxuXG4gIHByaXZhdGUgaW1wb3J0RmlsZShmaWxlOiBGaWxlLCBvYnNlcnZlcjogT2JzZXJ2ZXI8RGV0YWlsZWRDb250ZXh0Pikge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnBhcnNlQ29udGV4dEZyb21GaWxlKGZpbGUsIGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuICAgICAgICBvYnNlcnZlci5uZXh0KGNvbnRleHQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBJbXBvcnRVbnJlYWRhYmxlRmlsZUVycm9yKCkpO1xuICAgICAgfVxuXG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgIH07XG5cbiAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcbiAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBJbXBvcnRVbnJlYWRhYmxlRmlsZUVycm9yKCkpO1xuICAgIH07XG5cbiAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlLCAnVVRGLTgnKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDb250ZXh0RnJvbUZpbGUoZmlsZTogRmlsZSwgZGF0YTogc3RyaW5nKTogRGV0YWlsZWRDb250ZXh0IHtcbiAgICBjb25zdCBjb250ZXh0OiBEZXRhaWxlZENvbnRleHQgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG4iXX0=