@expressive-analytics/deep-thought-service
Version:
Typescript conversion of Deep Thought Services (formerly providers)
90 lines (89 loc) • 2.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DTResponse = exports.DTErr = void 0;
const deep_thought_js_1 = require("@expressive-analytics/deep-thought-js");
var DTErr;
(function (DTErr) {
DTErr[DTErr["NONE"] = 0] = "NONE";
DTErr[DTErr["INVALID_KEY"] = 1] = "INVALID_KEY";
DTErr[DTErr["FAILED_QUERY"] = 2] = "FAILED_QUERY";
DTErr[DTErr["PROHIBITED_ACTION"] = 3] = "PROHIBITED_ACTION";
DTErr[DTErr["UNAUTHORIZED_TOKEN"] = 4] = "UNAUTHORIZED_TOKEN";
DTErr[DTErr["OAUTH_CONSUMER_KEY_REFUSED"] = 5] = "OAUTH_CONSUMER_KEY_REFUSED";
})(DTErr = exports.DTErr || (exports.DTErr = {}));
class DTResponse {
constructor(rsp, obj, err = 0) {
this.err = 0;
this.as_proxy = false;
this.obj = obj;
this.err = err;
this.rsp = rsp;
}
sendHeader(header) {
//this.rsp.setHeader(header)
this.rsp.writeHead(header);
}
setResponse(obj) {
this.obj = obj;
}
error(code) {
if (code !== undefined)
this.err = parseInt(code);
return this.err;
}
/** Converts the +obj+ to a form it can be rendered.
For DTModels, these are only the public properties. */
objectAsRenderable(obj, $public) {
if (obj === null)
return null;
let renderable;
if (obj instanceof deep_thought_js_1.DTModel) {
if ($public === undefined)
renderable = obj.toJson();
else
renderable = obj.to($public);
}
else if (Array.isArray(obj)) {
renderable = [];
for (let v of obj)
renderable.push(this.objectAsRenderable(v, $public));
}
else if (typeof obj === 'object') {
renderable = {};
Object.entries(obj).forEach(([k, v], index) => {
renderable[k] = this.objectAsRenderable(v);
});
}
else
renderable = obj;
return renderable;
}
//===================
//! Rendering Methods
//===================
renderAsDTR() {
let response = { "fmt": "DTR", "err": this.err, "obj": this.objectAsRenderable(this.obj) };
this.render(JSON.stringify(response));
}
renderAsJSON() {
this.render(JSON.stringify(this.objectAsRenderable(this.obj)));
}
render(str) {
this.rsp.end(str);
}
respond(params = {}) {
const fmt = (typeof params["fmt"] === 'undefined') ? "dtr" : params["fmt"];
if (this.err >= 400) // put this in the header
this.rsp.sendStatus(this.err);
else {
switch (fmt) {
case "json":
this.renderAsJSON();
break;
default:
this.renderAsDTR();
}
}
}
}
exports.DTResponse = DTResponse;