Skip to content

Commit 1c328b6

Browse files
author
pemrouz
committed
feat: promisify transformers
1 parent 2b053fd commit 1c328b6

File tree

3 files changed

+299
-180
lines changed

3 files changed

+299
-180
lines changed

dist/index.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ var _client = require('utilise/client');
3030
/* istanbul ignore next */
3131
var _client2 = _interopRequireDefault(_client);
3232

33+
var _clone = require('utilise/clone');
34+
35+
var _clone2 = _interopRequireDefault(_clone);
36+
3337
var _noop = require('utilise/noop');
3438

3539
/* istanbul ignore next */
@@ -166,19 +170,21 @@ var to = function to(ripple, req, socket, resource) {
166170
xall = ripple.to || _identity2.default,
167171
p = (0, _promise2.default)();
168172

169-
req = (0, _extend2.default)({ socket: socket })(req);
170-
if (!(req = xres(req))) return false;
171-
if (!(req = xtyp(req))) return false;
172-
if (!(req = xall(req))) return false;
173-
delete req.socket;
174-
175-
socket == ripple ? consume(ripple)(req, res) : socket.emit('change', req, res);
173+
Promise.resolve(xall((0, _extend2.default)({ socket: socket })(req))).then(function (req) {
174+
return req && xtyp(req);
175+
}).then(function (req) {
176+
return req && xres(req);
177+
}).then(function (req) {
178+
return !strip(req) ? p.resolve([false]) : socket == ripple ? consume(ripple)(req, res) : socket.emit('change', req, res);
179+
}).catch(function (e) {
180+
throw new Error(err('to failed'.red, e));
181+
});
176182

177183
return p;
178184

179185
function res() {
180186
deb('ack'.grey, nametype, (0, _str2.default)(socket.ip).grey);
181-
p.resolve.call(ripple, (0, _to.arr)(arguments));
187+
p.resolve((0, _to.arr)(arguments));
182188
}
183189
};
184190

@@ -238,8 +244,19 @@ var ip = function ip(socket, next) {
238244
next();
239245
};
240246

247+
var strip = function strip(req) {
248+
return delete req.socket, req;
249+
};
250+
241251
var clean = function clean(next) {
242252
return function (req, res) {
253+
if (_is2.default.obj(req.value)) try {
254+
req.value = (0, _clone2.default)(req.value);
255+
} catch (e) {
256+
err('cannot send circular structure');
257+
return false;
258+
}
259+
243260
if (!req.headers || !req.headers.silent) return (next || _identity2.default)(req, res);
244261

245262
var stripped = {};

src/index.js

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,21 +82,20 @@ const to = (ripple, req, socket, resource) => {
8282
, xall = ripple.to || identity
8383
, p = promise()
8484

85-
req = extend({ socket })(req)
86-
if (!(req = xres(req))) return false
87-
if (!(req = xtyp(req))) return false
88-
if (!(req = xall(req))) return false
89-
delete req.socket
90-
91-
socket == ripple
92-
? consume(ripple)(req, res)
93-
: socket.emit('change', req, res)
85+
Promise.resolve(xall(extend({ socket })(req)))
86+
.then(req => req && xtyp(req))
87+
.then(req => req && xres(req))
88+
.then(req =>
89+
!strip(req) ? p.resolve([false])
90+
: socket == ripple ? consume(ripple)(req, res)
91+
: socket.emit('change', req, res))
92+
.catch(e => { throw new Error(err('to failed'.red, e)) })
9493

9594
return p
9695

9796
function res() {
9897
deb('ack'.grey, nametype, str(socket.ip).grey)
99-
p.resolve.call(ripple, arr(arguments))
98+
p.resolve(arr(arguments))
10099
}
101100
}
102101

@@ -152,7 +151,15 @@ const ip = (socket, next) => {
152151
next()
153152
}
154153

154+
const strip = req => (delete req.socket, req)
155+
155156
const clean = next => (req, res) => {
157+
if (is.obj(req.value))
158+
try { req.value = clone(req.value) } catch (e) {
159+
err('cannot send circular structure')
160+
return false
161+
}
162+
156163
if (!req.headers || !req.headers.silent)
157164
return (next || identity)(req, res)
158165

@@ -172,6 +179,7 @@ import values from 'utilise/values'
172179
import extend from 'utilise/extend'
173180
import header from 'utilise/header'
174181
import client from 'utilise/client'
182+
import clone from 'utilise/clone'
175183
import noop from 'utilise/noop'
176184
import keys from 'utilise/keys'
177185
import not from 'utilise/not'

0 commit comments

Comments
 (0)