forked from ForbesLindesay/sync-request
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
56 lines (48 loc) · 1.64 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
'use strict';
var fs = require('fs');
var spawnSync = require('child_process').spawnSync;
var HttpResponse = require('http-response-object');
require('concat-stream');
require('then-request');
var JSON = require('./lib/json-buffer');
Function('', fs.readFileSync(require.resolve('./lib/worker.js'), 'utf8'));
module.exports = doRequest;
function doRequest(method, url, options) {
if (!spawnSync) {
throw new Error(
'Sync-request requires node version 0.12 or later. If you need to use it with an older version of node\n' +
'you can `npm install sync-request@2.2.0`, which was the last version to support older versions of node.'
);
}
var req = JSON.stringify({
method: method,
url: url,
options: options
});
var res = spawnSync(process.execPath, [require.resolve('./lib/worker.js')], {input: req});
if (res.status !== 0) {
throw new Error(res.stderr.toString());
}
if (res.error) {
if (typeof res.error === 'string') res.error = new Error(res.error);
throw res.error;
}
var response = JSON.parse(res.stdout);
if (response.success) {
return new HttpResponse(response.response.statusCode, response.response.headers, response.response.body, response.response.url);
} else {
throw new Error(response.error.message || response.error || response);
}
}
doRequest.get = function (url, options) {
return doRequest('GET', url, options);
};
doRequest.post = function (url, options) {
return doRequest('POST', url, options);
};
doRequest.put = function (url, options) {
return doRequest('PUT', url, options);
}
doRequest.delete = function (url, options) {
return doRequest('DELETE', url, options);
}