Added babel plugins to support latest TS functionalities

This commit is contained in:
Alejandro Celaya
2020-08-22 11:00:11 +02:00
parent d65a6ba970
commit eefea0c37b
9 changed files with 4014 additions and 1123 deletions

15
src/servers/data/index.ts Normal file
View File

@@ -0,0 +1,15 @@
export interface RegularServer {
id: string;
name: string;
url: string;
apiKey: string;
version?: string;
printableVersion?: string;
serverNotReachable?: boolean;
}
interface NotFoundServer {
serverNotFound: true;
}
export type Server = RegularServer | NotFoundServer;

View File

@@ -1,23 +0,0 @@
export default class ServersImporter {
constructor(csvjson) {
this.csvjson = csvjson;
}
importServersFromFile = (file) => {
if (!file || file.type !== 'text/csv') {
return Promise.reject('No file provided or file is not a CSV');
}
const reader = new FileReader();
return new Promise((resolve) => {
reader.addEventListener('loadend', (e) => {
const content = e.target.result;
const servers = this.csvjson.toObject(content);
resolve(servers);
});
reader.readAsText(file);
});
};
}

View File

@@ -0,0 +1,26 @@
import { CsvJson } from 'csvjson';
import { RegularServer } from '../data';
const CSV_MIME_TYPE = 'text/csv';
export default class ServersImporter {
public constructor(private readonly csvjson: CsvJson, private readonly fileReaderFactory: () => FileReader) {}
public importServersFromFile = async (file?: File): Promise<RegularServer[]> => {
if (!file || file.type !== CSV_MIME_TYPE) {
throw new Error('No file provided or file is not a CSV');
}
const reader = this.fileReaderFactory();
return new Promise((resolve) => {
reader.addEventListener('loadend', (e: ProgressEvent<FileReader>) => {
const content = e.target?.result?.toString() ?? '';
const servers = this.csvjson.toObject<RegularServer>(content);
resolve(servers);
});
reader.readAsText(file);
});
};
}

View File

@@ -41,7 +41,8 @@ const provideServices = (bottle, connect, withRouter) => {
// Services
bottle.constant('csvjson', csvjson);
bottle.service('ServersImporter', ServersImporter, 'csvjson');
bottle.constant('fileReaderFactory', () => new FileReader());
bottle.service('ServersImporter', ServersImporter, 'csvjson', 'fileReaderFactory');
bottle.service('ServersExporter', ServersExporter, 'Storage', 'window', 'csvjson');
// Actions