easyurban
Version:
Urban dictionary definitions. Fast and simple.
64 lines (60 loc) • 2.01 kB
JavaScript
;
Reflect.defineProperty(exports, '__esModule', { value: true });
const { get } = require('https');
const { escape } = require('querystring');
const Requester = class Requester {
constructor(rootdir) {
const { NetConstants: {
base_path,
default_options,
random_path,
random_symb,
} } = rootdir.src.deps.$require;
this.base_path = base_path;
this.options = default_options;
this.random_path = random_path;
this.random_symb = random_symb;
}
buffer(query, page = 1, headers = {}) {
const options = Object.assign({}, this.options);
options.path = query === this.random_symb ? this.random_path : `${this.base_path}${escape(query)}&page=${page}`;
options.headers = Object.assign({}, options.headers, headers);
return new Promise((res, rej) => {
const req = this.lastrequest = get(options, response => {
const { statusCode } = response;
let error = null;
if (statusCode !== 200) {
error = { details: new Error(`Status Code: ${statusCode}`), code: statusCode };
response.resume();
}
let chunks = [];
response.on('data', chunk => chunks.push(chunk));
return response.on('end', () => {
const buf = Buffer.concat(chunks);
let message = buf.toString('utf-8');
try {
message = JSON.parse(message);
} finally {
if (error) {
return rej({
error: error.details,
code: error.code,
message,
});
}
return res(buf);
}
});
});
return req.end();
});
}
text(query, page = 1, headers = {}) {
return this.buffer(query, page, headers).then(r => r.toString());
}
async json(query, page = 1, headers = {}) {
return JSON.parse(await this.text(query, page, headers));
}
};
Requester.Requester = Requester.default = Requester;
exports.default = Requester;