var RLS = require('./util/RequestLocalStorage').getNamespace()
, Cache = require("./ReactServerAgent/Cache")
, Request = require("./ReactServerAgent/Request")
, Plugins = require("./ReactServerAgent/Plugins")
;
const DATA_BUNDLE_PARAMETER = '_react_server_data_bundle';
const DATA_BUNDLE_OPTS = {[DATA_BUNDLE_PARAMETER]: 1};
var API = {
DATA_BUNDLE_PARAMETER,
get (url, data) {
var req = new Request('GET', url, API.cache());
if (data) req.query(data);
return req;
},
head (url, data) {
var req = new Request('HEAD', url, API.cache());
if (data) req.query(data);
return req;
},
del (url, data) {
var req = new Request('DELETE', url, API.cache());
if (data) req.send(data);
return req;
},
patch (url, data) {
var req = new Request('PATCH', url, API.cache());
if (data) req.send(data);
return req;
},
post (url, data) {
var req = new Request('POST', url, API.cache());
if (data) req.send(data);
return req;
},
put (url, data) {
var req = new Request('PUT', url, API.cache());
if (data) req.send(data);
return req;
},
cache () {
var cache = RLS().cache;
if (!cache) {
cache = RLS().cache = new Cache();
}
return cache;
},
_clearCache () {
delete RLS().cache;
},
plugRequest (pluginFunc) {
Plugins.forRequest().add(pluginFunc);
},
plugResponse (pluginFunc) {
Plugins.forResponse().add(pluginFunc);
},
_fetchDataBundle(url) {
return API.get(url, DATA_BUNDLE_OPTS).then(data => JSON.stringify(data.body));
},
_rehydrateDataBundle(data) {
API.cache().rehydrate(JSON.parse(data))
},
}
module.exports = API;