/* Copyright IBM Corp. 2017 */ import { readFile, writeFile } from 'graceful-fs'; import { getType } from 'mime'; import { Observable, Observer } from 'rxjs'; import { VError } from 'verror'; import { FileDescriptor } from './rx.walk'; export interface JsonFile { desc: FileDescriptor; data: any; } function _readJSON(aDesc: FileDescriptor): Observable { return Observable.create((observer: Observer) => { // read the file readFile(aDesc.absPath, 'utf-8', (err, data) => { if (err) { observer.error(err); } else { try { observer.next({ desc: aDesc, data: JSON.parse(data) }); observer.complete(); } catch (error) { observer.error(new VError(error, 'Unable to parse JSON file %s.', aDesc.absPath)); } } }); }); } function _writeJSON(aDesc: JsonFile): Observable { return Observable.create((observer: Observer) => { try { // read the file writeFile(aDesc.desc.absPath, JSON.stringify(aDesc.data, undefined, 2), (err) => { if (err) { observer.error(err); } else { observer.next(aDesc.desc); observer.complete(); } }); } catch (error) { observer.error(new VError(error, 'Unable to write JSON file %s.', aDesc.desc.absPath)); } }); } function _isJSON(aDesc: FileDescriptor): boolean { return getType(aDesc.absPath) === 'application/json'; } export { _readJSON as readJSON, _writeJSON as writeJSON, _isJSON as isJSON };