UNPKG

osh-js

Version:
70 lines (63 loc) 2.21 kB
import ConnectedSystemsApiFilter from "../../../consysapi/Filter"; import {isDefined} from "../../../utils/Utils"; class ConSysApiResultParser { constructor(dataObject) { this.dataObject = dataObject; this.parsers = { 'application/om+json' : { schemaPromise: undefined, parser: undefined }, 'application/swe+json' : { schemaPromise: undefined, parser: undefined }, 'application/swe+xml' : { schemaPromise: undefined, parser: undefined }, 'application/swe+csv' : { schemaPromise: undefined, parser: undefined }, 'application/swe+binary' : { schemaPromise: undefined, parser: undefined } } } async checkParser(format) { if(!(format in this.parsers)) { throw new Error(`Not support format ${format}`); } const parser = this.parsers[format]; if(!isDefined(parser.parser)) { if(!isDefined(parser.schemaPromise)) { this.parsers[format].schemaPromise = new Promise(async (resolve, reject) => { try { const jsonSchema = await this.dataObject.getSchema(new ConnectedSystemsApiFilter({ obsFormat: format })); this.init(jsonSchema, format); resolve(); } catch (ex) { console.error(ex); reject(ex); } }); } await parser.schemaPromise; return this.parsers[format].parser; } else { return parser.parser; } } init(schema, format) { throw new Error('Unsupported Operation') } async parseDataBlock(arrayBuffer, format = 'application/om+json') { const parser = await this.checkParser(format); return parser.parseDataBlock(arrayBuffer); } } export default ConSysApiResultParser;