/
nodejs.js
79 lines (70 loc) · 2.44 KB
/
nodejs.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/**
* @file NodeJS specific HTTP implementation
* @since 0.2.1
*/
/*#ifndef(UMD)*/
"use strict";
/*global _GPF_HOST*/ // Host types
/*global _GpfNodeReadableStream*/ // gpf.node.ReadableStream
/*global _gpfHttpSetRequestImplIf*/ // Set the http request implementation if the host matches
/*global _gpfNodeHttp*/ // Node require("http")
/*global _gpfNodeHttps*/ // Node require("https")
/*global _gpfNodeUrl*/ // Node require("url")
/*global _gpfStringFromStream*/ // Read the stream
/*#endif*/
/*jshint node: true*/
/*eslint-env node*/
function _gpfHttpNodeProcessResponse (nodeResponse, resolve) {
nodeResponse.setEncoding("utf8");
var iReadableStream = new _GpfNodeReadableStream(nodeResponse);
_gpfStringFromStream(iReadableStream)
.then(function (responseText) {
iReadableStream.close();
resolve({
status: nodeResponse.statusCode,
headers: nodeResponse.headers,
responseText: responseText
});
});
}
function _gpfHttpNodeAdjustSettingsForSend (settings, data) {
if (data) {
settings.headers = Object.assign({
"Content-Type": "application/x-www-form-urlencoded",
"Content-Length": Buffer.byteLength(data)
}, settings.headers);
}
}
function _gpfHttpNodeBuildRequestSettings (request) {
var settings = Object.assign(_gpfNodeUrl.parse(request.url), request);
_gpfHttpNodeAdjustSettingsForSend(settings, request.data);
return settings;
}
function _gpfHttpNodeGetMessageHandler (settings) {
if (settings.protocol === "https:") {
return _gpfNodeHttps;
}
return _gpfNodeHttp;
}
function _gpfHttpNodeAllocate (request, resolve) {
var settings = _gpfHttpNodeBuildRequestSettings(request),
messageHandler = _gpfHttpNodeGetMessageHandler(settings);
return messageHandler.request(settings, function (nodeResponse) {
_gpfHttpNodeProcessResponse(nodeResponse, resolve);
});
}
function _gpfHttpNodeSend (clientRequest, data) {
if (data) {
clientRequest.write(data, "utf8", function () {
clientRequest.end();
});
} else {
clientRequest.end();
}
}
function _gpfHttpNodeRequestImpl (request, resolve, reject) {
var clientRequest = _gpfHttpNodeAllocate(request, resolve);
clientRequest.on("error", reject);
_gpfHttpNodeSend(clientRequest, request.data);
}
_gpfHttpSetRequestImplIf(_GPF_HOST.NODEJS, _gpfHttpNodeRequestImpl);