Home Reference Source Test

packages/causality-utils/src/fetch.js

import fetch from 'cross-fetch';
import { default as platform } from './platform';
import { default as NodeStreamMixins } from './fetchStreamMixins.node';
import { default as WebStreamMixins } from './fetchStreamMixins.web';

class Basefetch{
    constructor(fetch){
        this.fetch = fetch;
    }
}

/**
 * This isomorphic fetch class is mixed with:
 * - NodeStreamMixins  
 * - WebStreamMixins
 * @class Fetch
 * @extends Basefetch
 */
class Fetch extends platform.mixWith(Basefetch, {'node': [NodeStreamMixins], 'web':[WebStreamMixins]}){
    constructor(fetch){
        super(fetch);
    }
    /**
     * fetch text content given the url
     * @param { String } url
     * @returns { Promise } promise of content
     */
    fetchData(url){
        return new Promise((resolve, reject)=>{
            fetch(url).then(response=>{
                if (response.status >= 400) {
                    console.error(response.status);
                    reject("Bad response from server");
                }
                resolve(response.text());
            });
        });
    }
    /**
     * fetch json content given the url 
     * @param { String } url
     * @returns { promise } promise of content
     */
    fetchJson(url){
        return new Promise(async (resolve, reject)=>{
            fetch(url).then(response=>{
                if (response.status >= 400) {
                    console.error(response.status);
                    reject("Bad response from server");
                }
                resolve(response.json());
            });
        });
    }
}

export default new Fetch(fetch);