1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
8 |
|
9 | var _events = require("events");
|
10 |
|
11 | var _events2 = _interopRequireDefault(_events);
|
12 |
|
13 | var _net = require("net");
|
14 |
|
15 | var _net2 = _interopRequireDefault(_net);
|
16 |
|
17 | var _util = require("util");
|
18 |
|
19 | var _util2 = _interopRequireDefault(_util);
|
20 |
|
21 | var _stream = require("stream");
|
22 |
|
23 | var _stream2 = _interopRequireDefault(_stream);
|
24 |
|
25 | var _koaCompose = require("koa-compose");
|
26 |
|
27 | var _koaCompose2 = _interopRequireDefault(_koaCompose);
|
28 |
|
29 | var _debug = require("debug");
|
30 |
|
31 | var _debug2 = _interopRequireDefault(_debug);
|
32 |
|
33 | var _only = require("only");
|
34 |
|
35 | var _only2 = _interopRequireDefault(_only);
|
36 |
|
37 | var _session = require("./session");
|
38 |
|
39 | var _session2 = _interopRequireDefault(_session);
|
40 |
|
41 | var _context = require("./context");
|
42 |
|
43 | var _context2 = _interopRequireDefault(_context);
|
44 |
|
45 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
46 |
|
47 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
48 |
|
49 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
50 |
|
51 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
52 |
|
53 | var debug = new _debug2.default("whisper");
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 | var Application = function (_Emitter) {
|
61 | _inherits(Application, _Emitter);
|
62 |
|
63 | |
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | function Application() {
|
70 | _classCallCheck(this, Application);
|
71 |
|
72 | var _this = _possibleConstructorReturn(this, (Application.__proto__ || Object.getPrototypeOf(Application)).call(this));
|
73 |
|
74 | _this.middleware = [];
|
75 | _this.env = process.env.NODE_ENV || "development";
|
76 |
|
77 | if (_util2.default.inspect.custom) {
|
78 | _this[_util2.default.inspect.custom] = _this.inspect;
|
79 | }
|
80 | return _this;
|
81 | }
|
82 |
|
83 | |
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | _createClass(Application, [{
|
94 | key: "listen",
|
95 | value: function listen() {
|
96 | debug("listen");
|
97 | var server = _net2.default.createServer(this.callback());
|
98 | return server.listen.apply(server, arguments);
|
99 | }
|
100 |
|
101 | |
102 |
|
103 |
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 | }, {
|
110 | key: "toJSON",
|
111 | value: function toJSON() {
|
112 | return (0, _only2.default)(this, ["env"]);
|
113 | }
|
114 |
|
115 | |
116 |
|
117 |
|
118 |
|
119 |
|
120 |
|
121 |
|
122 | }, {
|
123 | key: "inspect",
|
124 | value: function inspect() {
|
125 | return this.toJSON();
|
126 | }
|
127 |
|
128 | |
129 |
|
130 |
|
131 |
|
132 |
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 | }, {
|
139 | key: "use",
|
140 | value: function use(fn) {
|
141 | if (typeof fn !== "function") throw new TypeError("middleware must be a function!");
|
142 | debug("use %s", fn._name || fn.name || "-");
|
143 | this.middleware.push(fn);
|
144 | return this;
|
145 | }
|
146 |
|
147 | |
148 |
|
149 |
|
150 |
|
151 |
|
152 |
|
153 |
|
154 |
|
155 | }, {
|
156 | key: "callback",
|
157 | value: function callback() {
|
158 | var _this2 = this;
|
159 |
|
160 | var fn = (0, _koaCompose2.default)(this.middleware);
|
161 |
|
162 | if (!this.listenerCount("error")) this.on("error", this.onerror);
|
163 |
|
164 | var handleConnect = function handleConnect(socket) {
|
165 |
|
166 | var session = new _session2.default(_this2, socket);
|
167 | socket.on("data", function (data) {
|
168 | var ctx = new _context2.default(session, data);
|
169 | _this2.handleRequest(ctx, fn);
|
170 | });
|
171 | };
|
172 |
|
173 | return handleConnect;
|
174 | }
|
175 |
|
176 | |
177 |
|
178 |
|
179 |
|
180 |
|
181 |
|
182 | }, {
|
183 | key: "handleRequest",
|
184 | value: function handleRequest(ctx, fnMiddleware) {
|
185 | debug("data comming with seq %s", ctx.seq);
|
186 | debug(ctx.data);
|
187 |
|
188 | var onerror = function onerror(err) {
|
189 | return ctx.onerror(err);
|
190 | };
|
191 | var handleResponse = function handleResponse() {
|
192 | return respond(ctx);
|
193 | };
|
194 | return fnMiddleware(ctx).then(handleResponse).catch(onerror);
|
195 | }
|
196 |
|
197 | |
198 |
|
199 |
|
200 |
|
201 |
|
202 |
|
203 |
|
204 | }, {
|
205 | key: "onerror",
|
206 | value: function onerror(err) {
|
207 | if (!(err instanceof Error)) throw new TypeError(_util2.default.format("non-error thrown: %j", err));
|
208 |
|
209 | if (this.silent) return;
|
210 |
|
211 | var msg = err.stack || err.toString();
|
212 | console.error();
|
213 | console.error(msg.replace(/^/gm, " "));
|
214 | console.error();
|
215 | }
|
216 | }]);
|
217 |
|
218 | return Application;
|
219 | }(_events2.default);
|
220 |
|
221 |
|
222 |
|
223 |
|
224 |
|
225 | exports.default = Application;
|
226 | function respond(ctx) {
|
227 | var socket = ctx.socket,
|
228 | dumb = ctx.dumb,
|
229 | body = ctx.body;
|
230 |
|
231 |
|
232 |
|
233 | if (dumb) return;
|
234 |
|
235 |
|
236 | if (!socket.writable) return;
|
237 |
|
238 |
|
239 | if (!body) {
|
240 | return debug("no body");
|
241 | }
|
242 |
|
243 | debug("respond body");
|
244 | debug(body);
|
245 |
|
246 |
|
247 | if (Buffer.isBuffer(body)) return socket.write(body);
|
248 | if ("string" === typeof body) return socket.write(body);
|
249 | if (body instanceof _stream2.default) return body.pipe(socket);
|
250 |
|
251 |
|
252 | var str = JSON.stringify(body);
|
253 | socket.write(str);
|
254 | } |
\ | No newline at end of file |