@@ -30,6 +30,10 @@ var _client = require('utilise/client');
3030/* istanbul ignore next */
3131var _client2 = _interopRequireDefault ( _client ) ;
3232
33+ var _clone = require ( 'utilise/clone' ) ;
34+
35+ var _clone2 = _interopRequireDefault ( _clone ) ;
36+
3337var _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+
241251var 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 = { } ;
0 commit comments