onesky-fetch
Version:
Fetch and upload translation files from www.oneskyapp.com working in node.js and browser apps.
76 lines (59 loc) • 1.84 kB
JavaScript
;
var _http = require('http');
var _http2 = _interopRequireDefault(_http);
var _url = require('url');
var _url2 = _interopRequireDefault(_url);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function get() {}
function post() {}
// this is a very very basic fetch implementation
// to make it work in a node.js environment, without any
// dependency on 3rd party packages
module.exports = function (urlString, fetchOptions) {
var urlObject = _url2.default.parse(urlString);
var options = {
hostname: urlObject.hostname,
port: urlObject.port,
path: urlObject.path,
agent: false // create a new agent just for this one request
};
if (fetchOptions) {
if (fetchOptions.headers) {
options.headers = fetchOptions.headers;
}
options.method = fetchOptions.method ? fetchOptions.method : 'GET';
}
return new Promise(function (resolve, reject) {
var request = _http2.default.request(options, function (response) {
if (response.statusCode > 299) {
reject(response.statusMessage);
return;
}
var str = '';
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
var jsObject = null;
try {
jsObject = JSON.parse(str);
} catch (e) {
// this is just to make eslint happy
jsObject = null;
}
var json = function json() {
return Promise.resolve(jsObject);
};
var text = function text() {
return Promise.resolve(str);
};
var fetchResponse = { json: json, text: text };
resolve(fetchResponse);
});
});
if (fetchOptions.body) {
request.write(fetchOptions.body);
}
request.end();
});
};