UNPKG

@expressive-analytics/deep-thought-service

Version:

Typescript conversion of Deep Thought Services (formerly providers)

90 lines (89 loc) 2.9 kB
"use strict"; 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;