33Object . defineProperty ( exports , "__esModule" , {
44 value : true
55} ) ;
6-
7- /* istanbul ignore next */
8- var _slicedToArray = function ( ) { function sliceIterator ( arr , i ) { var _arr = [ ] ; var _n = true ; var _d = false ; var _e = undefined ; try { for ( var _i = arr [ Symbol . iterator ] ( ) , _s ; ! ( _n = ( _s = _i . next ( ) ) . done ) ; _n = true ) { _arr . push ( _s . value ) ; if ( i && _arr . length === i ) break ; } } catch ( err ) { _d = true ; _e = err ; } finally { try { if ( ! _n && _i [ "return" ] ) _i [ "return" ] ( ) ; } finally { if ( _d ) throw _e ; } } return _arr ; } return function ( arr , i ) { if ( Array . isArray ( arr ) ) { return arr ; } else if ( Symbol . iterator in Object ( arr ) ) { return sliceIterator ( arr , i ) ; } else { throw new TypeError ( "Invalid attempt to destructure non-iterable instance" ) ; } } ; } ( ) ;
9-
106exports . default = sync ;
117
128var _identity = require ( 'utilise/identity' ) ;
139
1410var _identity2 = _interopRequireDefault ( _identity ) ;
1511
12+ var _promise = require ( 'utilise/promise' ) ;
13+
14+ var _promise2 = _interopRequireDefault ( _promise ) ;
15+
1616var _values = require ( 'utilise/values' ) ;
1717
1818var _values2 = _interopRequireDefault ( _values ) ;
1919
20+ var _extend = require ( 'utilise/extend' ) ;
21+
22+ var _extend2 = _interopRequireDefault ( _extend ) ;
23+
2024var _header = require ( 'utilise/header' ) ;
2125
2226var _header2 = _interopRequireDefault ( _header ) ;
@@ -59,6 +63,8 @@ var _is = require('utilise/is');
5963
6064var _is2 = _interopRequireDefault ( _is ) ;
6165
66+ var _to = require ( 'utilise/to' ) ;
67+
6268/* istanbul ignore next */
6369function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
6470
@@ -69,138 +75,141 @@ function sync(ripple, server) {
6975 log ( 'creating' ) ;
7076
7177/* istanbul ignore next */
72- if ( ! _client2 . default && ! server ) return ;
78+ if ( ! _client2 . default && ! server ) return ripple ;
7379/* istanbul ignore next */
7480 if ( ! _client2 . default ) ripple . to = clean ( ripple . to ) , ( 0 , _values2 . default ) ( ripple . types ) . map ( function ( type ) {
7581 return type . parse = headers ( ripple ) ( type . parse ) ;
7682 } ) ;
7783
78- ripple . stream = stream ( ripple ) ;
79- ripple . respond = respond ( ripple ) ;
8084 ripple . io = io ( server ) ;
81- ripple . on ( 'change.stream' , ripple . stream ( ) ) ; // both - broadcast change to everyone
82- ripple . io . on ( 'change' , consume ( ripple ) ) ; // client - receive change
83- ripple . io . on ( 'response' , response ( ripple ) ) ; // client - receive response
84- ripple . io . on ( 'connection' , function ( s ) {
85- return s . on ( 'change' , consume ( ripple ) ) ;
86- } ) ; // server - receive change
87- ripple . io . on ( 'connection' , function ( s ) {
88- return ripple . stream ( s ) ( ) ;
89- } ) ; // server - send all resources to new client
90- ripple . io . use ( setIP ) ;
85+ ripple . io . use ( ip ) ;
86+ ripple . req = send ( ripple ) ( ripple ) ;
87+ /* istanbul ignore next */
88+ ripple . send = _client2 . default ? send ( ripple ) ( ripple . io ) : send ( ripple ) ;
89+ ripple . on ( 'change.send' , broadcast ( ripple ) ) ;
90+ ripple . io . on ( 'change' , consume ( ripple ) ) ;
91+ ripple . io . on ( 'connection' , connected ( ripple ) ) ;
9192 return ripple ;
9293}
9394
94- var respond = function respond ( ripple ) {
95- return function ( socket , name , time ) {
96- return function ( reply ) {
97- socket . emit ( 'response ', [ name , time , reply ] ) ;
98- } ;
95+ var connected = function connected ( ripple ) {
96+ return function ( socket ) {
97+ log ( 'connected' . green , ( 0 , _str2 . default ) ( socket . ip ) . grey ) ;
98+ socket . on ( 'change ', consume ( ripple ) ) ;
99+ ripple . send ( socket ) ( ) ;
99100 } ;
100101} ;
101102
102- var response = function response ( ripple ) {
103- return function ( _ref ) {
103+ var broadcast = function broadcast ( ripple ) {
104+ return function ( name , change ) {
104105/* istanbul ignore next */
105- var _ref2 = _slicedToArray ( _ref , 3 ) ;
106+ ( _client2 . default ? ripple . send : ripple . send ( ) ) ( ( 0 , _extend2 . default ) ( { name : name } ) ( change ) ) ;
107+ } ;
108+ } ;
106109
107- var name = _ref2 [ 0 ] ;
108- var time = _ref2 [ 1 ] ;
109- var reply = _ref2 [ 2 ] ;
110+ var normalize = function normalize ( ripple ) {
111+ var next = arguments . length <= 1 || arguments [ 1 ] === undefined ? _identity2 . default : arguments [ 1 ] ;
112+ return function ( name , type , value ) {
113+ var req = _is2 . default . obj ( name ) ? name : { name : name , type : type , value : value } ,
114+ resource = ripple . resources [ req . name ] ;
115+
116+ if ( ! req . name ) return next ( ( 0 , _values2 . default ) ( ripple . resources ) . map ( normalize ( ripple ) ) ) ;
117+
118+ if ( ! resource ) return Promise . resolve ( [ 404 , err ( 'cannot find ' + req . name ) ] ) ;
119+
120+ if ( ! req . type ) req = {
121+ name : req . name ,
122+ type : 'update' ,
123+ headers : resource . headers ,
124+ value : resource . body ,
125+ time : now ( resource )
126+ } ;
110127
111- ripple . resources [ name ] . body . emit ( 'response._' + time , reply ) ;
128+ if ( req . type == 'update' && ! req . key ) req . headers = resource . headers ;
129+
130+ return next ( req ) ;
112131 } ;
113132} ;
114133
115- // send diff to all or some sockets
116- var stream = function stream ( ripple ) {
117- return function ( sockets ) {
118- return function ( name , change ) {
119- if ( ! name ) return ( 0 , _values2 . default ) ( ripple . resources ) . map ( function ( d ) {
120- return stream ( ripple ) ( sockets ) ( d . name ) ;
121- } ) ;
122-
134+ // send all or some req, to all or some sockets
135+ var send = function send ( ripple ) {
136+ var l = arguments . length <= 1 || arguments [ 1 ] === undefined ? log : arguments [ 1 ] ;
137+ return function ( who ) {
138+ return normalize ( ripple , function ( req ) {
139+ var count = function count ( sent ) {
140+ return ( 0 , _str2 . default ) ( sent . length ) . green . bold + '/' + ( 0 , _str2 . default ) ( everyone . length ) . green ;
141+ } ,
142+ all = function all ( d ) {
143+ return req . length && log ( 'send' . grey , count ( sockets ) , 'all' . bold , ( '(' + req . length + ')' ) . grey ) ;
144+ } ,
123145/* istanbul ignore next */
124- var everyone = _client2 . default ? [ ripple . io ] : ( 0 , _values2 . default ) ( ripple . io . of ( '/' ) . sockets ) ,
125- log = count ( everyone . length , name ) ,
126- res = ripple . resources [ name ] ,
127- send = to ( ripple , res , change ) ;
146+ everyone = _client2 . default ? [ ripple . io ] : ( 0 , _values2 . default ) ( ripple . io . of ( '/' ) . sockets ) ,
147+ sockets = _is2 . default . arr ( who ) ? who : _is2 . default . str ( who ) ? everyone . filter ( ( 0 , _by2 . default ) ( 'sessionID' , who ) ) : ! who ? everyone : [ who ] ,
148+ /* istanbul ignore next */
149+ promises = _is2 . default . arr ( req ) ? ( all ( ) , req . map ( send ( ripple , l = _noop2 . default ) ( sockets ) ) ) : sockets . map ( function ( s ) {
150+ return to ( ripple , req , s ) ;
151+ } ) . filter ( Boolean ) ;
128152
129- return ! res ? log ( 'no resource' , name ) : _is2 . default . str ( sockets ) ? ( log ( everyone . filter ( ( 0 , _by2 . default ) ( 'sessionID' , sockets ) ) . map ( send ) ) , ripple ) : ! sockets ? ( log ( everyone . map ( send ) ) , ripple ) : ( log ( send ( sockets ) ) , ripple ) ;
130- } ;
153+ if ( promises . length ) l ( 'send' . grey , count ( promises ) , req . name ) ;
154+ return Promise . all ( promises ) ;
155+ } ) ;
131156 } ;
132157} ;
133158
134159// outgoing transforms
135- var to = function to ( ripple , res , change ) {
136- return function ( socket ) {
137- if ( ( 0 , _header2 . default ) ( 'silent' , socket ) ( res ) ) return delete res . headers . silent , false ;
138-
139- var xres = ( 0 , _header2 . default ) ( 'to' ) ( res ) ,
140- xtype = type ( ripple ) ( res ) . to ,
141- xall = ripple . to ,
142- body ,
143- rep ,
144- out ;
145-
146- body = res . body ;
147- if ( xres ) {
148- if ( ! ( out = xres . call ( socket , res , change ) ) ) return false ;
149- if ( out !== true ) {
150- change = false , body = out ;
151- }
152- }
160+ var to = function to ( ripple , req , socket , resource ) {
161+ if ( ( 0 , _header2 . default ) ( 'silent' , socket ) ( resource = ripple . resources [ req . name ] ) ) return delete resource . headers . silent , false ;
153162
154- rep = { name : res . name , body : body , headers : res . headers } ;
155- if ( xtype ) {
156- if ( ! ( out = xtype . call ( socket , rep , change ) ) ) return false ;
157- if ( out !== true ) change = false , rep = out ;
158- }
163+ var nametype = '(' + req . name + ', ' + req . type + ')' ,
164+ xres = ( 0 , _header2 . default ) ( 'to' ) ( resource ) || _identity2 . default ,
165+ xtyp = type ( ripple ) ( resource ) . to || _identity2 . default ,
166+ xall = ripple . to || _identity2 . default ,
167+ p = ( 0 , _promise2 . default ) ( ) ;
159168
160- if ( xall ) {
161- if ( ! ( out = xall . call ( socket , rep , change ) ) ) return false ;
162- if ( out !== true ) change = false , rep = out ;
163- }
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 ;
164174
165- return socket . emit ( 'change' , change ? [ res . name , change ] : [ res . name , false , rep ] ) , true ;
166- } ;
175+ socket == ripple ? consume ( ripple ) ( req , res ) : socket . emit ( 'change' , req , res ) ;
176+
177+ return p ;
178+
179+ function res ( ) {
180+ deb ( 'ack' . grey , nametype , ( 0 , _str2 . default ) ( socket . ip ) . grey ) ;
181+ p . resolve . call ( ripple , ( 0 , _to . arr ) ( arguments ) ) ;
182+ }
167183} ;
168184
169185// incoming transforms
170186var consume = function consume ( ripple ) {
171- return function ( _ref3 , ack ) {
187+ return function ( req ) {
172188/* istanbul ignore next */
173- var _ref4 = _slicedToArray ( _ref3 , 3 ) ;
174-
175- var name = _ref4 [ 0 ] ;
176- var change = _ref4 [ 1 ] ;
177- var _ref4$ = _ref4 [ 2 ] ;
178- var req = _ref4$ === undefined ? { } : _ref4$ ;
179-
180- log ( 'receiving' , name ) ;
181-
182- var res = ripple . resources [ name ] ,
183- xall = ripple . from ,
184- xtype = type ( ripple ) ( res ) . from || type ( ripple ) ( req ) . from // is latter needed?
185- ,
186- xres = ( 0 , _header2 . default ) ( 'from' ) ( res ) ,
187- next = ( 0 , _set2 . default ) ( change ) ,
188- silent = silence ( this ) ,
189- respond = ack || ripple . respond ( this , name , change . time ) ;
190-
191- return xall && ! xall . call ( this , req , change , respond ) ? debug ( 'skip all' , name ) // rejected - by xall
192- : xtype && ! xtype . call ( this , req , change , respond ) ? debug ( 'skip type' , name ) // rejected - by xtype
193- : xres && ! xres . call ( this , req , change , respond ) ? debug ( 'skip res' , name ) // rejected - by xres
194- : ! change ? ripple ( silent ( req ) ) // accept - replace (new)
195- : ! change . key ? ripple ( silent ( { name : name , body : change . value } ) ) // accept - replace at root
196- : ( silent ( res ) , next ( res . body ) ) ; // accept - deep change
189+ var res = arguments . length <= 1 || arguments [ 1 ] === undefined ? _noop2 . default : arguments [ 1 ] ;
190+
191+ var nametype = '(' + req . name + ', ' + req . type + ')' ,
192+ resource = ripple . resources [ req . name ] ,
193+ silent = silence ( req . socket = this ) ,
194+ xres = ( 0 , _header2 . default ) ( 'from' ) ( resource ) || _identity2 . default ,
195+ xtyp = type ( ripple ) ( resource ) . from || _identity2 . default ,
196+ xall = ripple . from || _identity2 . default ;
197+
198+ log ( 'recv' . grey , nametype ) ;
199+ try {
200+ ! req . name ? res ( 404 , err ( 'not found' . red , req . name ) ) : ! ( req = xall ( req , res ) ) ? deb ( 'skip' , 'global' , nametype ) : ! ( req = xtyp ( req , res ) ) ? deb ( 'skip' , 'type' , nametype ) : ! ( req = xres ( req , res ) ) ? deb ( 'skip' , 'resource' , nametype ) : ! req . key && req . type == 'update' ? ( ripple ( silent ( body ( req ) ) ) , res ( 200 , deb ( 'ok ' + nametype ) ) ) : isStandardVerb ( req . type ) ? ( ( 0 , _set2 . default ) ( req ) ( silent ( resource ) . body ) , res ( 200 , deb ( 'ok ' + nametype , _key2 . default . grey ) ) ) : ! isStandardVerb ( req . type ) ? res ( 405 , err ( 'method not allowed' , nametype ) ) : res ( 400 , err ( 'cannot process' , nametype ) ) ;
201+ } catch ( e ) {
202+ res ( e . status || 500 , err ( e . message , nametype , '\n' , e . stack ) ) ;
203+ }
197204 } ;
198205} ;
199206
200- var count = function count ( total , name ) {
201- return function ( tally ) {
202- return debug ( ( 0 , _str2 . default ) ( ( _is2 . default . arr ( tally ) ? tally : [ 1 ] ) . filter ( Boolean ) . length ) . green . bold + '/' + ( 0 , _str2 . default ) ( total ) . green , 'sending' , name ) ;
203- } ;
207+ var body = function body ( _ref ) {
208+ var name = _ref . name ;
209+ var _body = _ref . body ;
210+ var value = _ref . value ;
211+ var headers = _ref . headers ;
212+ return { name : name , headers : headers , body : value } ;
204213} ;
205214
206215var headers = function headers ( ripple ) {
@@ -224,40 +233,41 @@ var io = function io(opts) {
224233 return r ;
225234} ;
226235
227- var setIP = function setIP ( socket , next ) {
236+ var ip = function ip ( socket , next ) {
228237 socket . ip = socket . request . headers [ 'x-forwarded-for' ] || socket . request . connection . remoteAddress ;
229238 next ( ) ;
230239} ;
231240
232241var clean = function clean ( next ) {
233- return function ( _ref5 , change ) {
234- var name = _ref5 . name ;
235- var body = _ref5 . body ;
236- var headers = _ref5 . headers ;
237-
238- if ( change ) return next ? next . apply ( this , arguments ) : true ;
242+ return function ( req , res ) {
243+ if ( ! req . headers || ! req . headers . silent ) return ( next || _identity2 . default ) ( req , res ) ;
239244
240245 var stripped = { } ;
241246
242- ( 0 , _keys2 . default ) ( headers ) . filter ( ( 0 , _not2 . default ) ( ( 0 , _is2 . default ) ( 'silent' ) ) ) . map ( function ( header ) {
243- return stripped [ header ] = headers [ header ] ;
247+ ( 0 , _keys2 . default ) ( req . headers ) . filter ( ( 0 , _not2 . default ) ( ( 0 , _is2 . default ) ( 'silent' ) ) ) . map ( function ( header ) {
248+ return stripped [ header ] = req . headers [ header ] ;
244249 } ) ;
245250
246- return ( next || _identity2 . default ) . apply ( this , [ { name : name , body : body , headers : stripped } , change ] ) ;
251+ req . headers = stripped ;
252+ return ( next || _identity2 . default ) ( req , res ) ;
247253 } ;
248254} ;
249255
250256var type = function type ( ripple ) {
251257 return function ( res ) {
252258 return ripple . types [ ( 0 , _header2 . default ) ( 'content-type' ) ( res ) ] || { } ;
253259 } ;
260+ } ,
261+ now = function now ( d , t ) {
262+ return t = ( 0 , _key2 . default ) ( 'body.log.length' ) ( d ) , _is2 . default . num ( t ) ? t - 1 : t ;
254263} ,
255264 silence = function silence ( socket ) {
256265 return function ( res ) {
257266 return ( 0 , _key2 . default ) ( 'headers.silent' , socket ) ( res ) ;
258267 } ;
259268} ,
269+ isStandardVerb = _is2 . default . in ( [ 'update' , 'add' , 'remove' ] ) ,
260270 log = require ( 'utilise/log' ) ( '[ri/sync]' ) ,
261271 err = require ( 'utilise/err' ) ( '[ri/sync]' ) ,
262272/* istanbul ignore next */
263- debug = _noop2 . default ;
273+ deb = ( ! _client2 . default && process . env . DEBUG || '' ) . split ( ',' ) . some ( ( 0 , _is2 . default ) ( '[ri/sync]' ) ) ? log : _identity2 . default ;
0 commit comments