    /**
     * @module Library
     */

    const libraryDir = './library/';

    /**
     * get list of networks from the library
     * @return {Promise} promise, the resolution is an object containing a list of libraries
     */
    export function getLibrary() {
        return new Promise((resolve, reject) => {
            const libraryFile = libraryDir + 'networkList.json';

            let request = new XMLHttpRequest();

            request.addEventListener('load', function() {
                if (this.response) {
                    resolve(this.response.networks);
                }
            });

            request.addEventListener(['error', 'abort'], () => {
                reject('Failed loading libraries.');
            });

            request.open('GET', libraryFile, true);
            request.responseType = 'json';
            request.send();
        });
    }

    /**
     * get a network from the library, specified by filename
     * @param  {string} networkName library file name without the extension
     * @return {Promise} promise, the resolution is an object containing the library import data
     */
    export function getNetworkFromLibrary(networkName) {
        return new Promise((resolve, reject) => {
            let request = new XMLHttpRequest();

            request.addEventListener('load', function() {
                if (this.response) {
                    resolve(this.response);
                }
            });

            request.addEventListener(['error', 'abort'], () => {
                reject(`Failed loading library ${networkName}.`);
            });

            request.open('GET', libraryDir + networkName + '.json', true);
            request.responseType = 'json';
            request.send();
        });
    }