@@ -1948,71 +1948,131 @@ SchemaInstance.prototype.$async = function(callback, index) {
19481948
19491949 if ( callback === undefined )
19501950 callback = NOOP ;
1951+
19511952 self . $$async = [ ] ;
19521953 self . $$result = [ ] ;
19531954 self . $callback = callback ;
1955+
19541956 setImmediate ( function ( ) {
1955- self . $$async . async ( function ( ) {
1957+ async_queue ( self . $$async , function ( ) {
19561958 var result = self . $$result ;
1957- delete self . $$result ;
19581959 delete self . $$async ;
1960+ delete self . $$result ;
1961+ delete self . $callback ;
19591962 callback ( null , index !== undefined ? result [ index ] : result ) ;
19601963 } ) ;
19611964 } ) ;
1965+
19621966 return self ;
19631967} ;
19641968
1965- SchemaInstance . prototype . $save = function ( helper , callback ) {
1969+ SchemaInstance . prototype . $push = function ( type , name , helper , first ) {
1970+
19661971 var self = this ;
1972+ var fn ;
1973+
1974+ if ( type === 'save' || type === 'remove' ) {
1975+
1976+ helper = name ;
1977+ name = undefined ;
1978+
1979+ fn = function ( next ) {
1980+ self . $$schema [ type ] ( self , helper , function ( err , result ) {
1981+ self . $$result && self . $$result . push ( err ? null : result ) ;
1982+ if ( ! err )
1983+ return next ( ) ;
1984+ next = null ;
1985+ var result = self . $$result ;
1986+ delete self . $$result ;
1987+ delete self . $$async ;
1988+ self . $callback ( err , result ) ;
1989+ } ) ;
1990+ } ;
1991+
1992+ } else if ( type === 'query' || type === 'get' || type === 'read' ) {
1993+
1994+ helper = name ;
1995+ name = undefined ;
1996+
1997+ fn = function ( next ) {
1998+ self . $$schema [ type ] ( helper , function ( err , result ) {
1999+ self . $$result && self . $$result . push ( err ? null : result ) ;
2000+ if ( ! err )
2001+ return next ( ) ;
2002+ next = null ;
2003+ var result = self . $$result ;
2004+ delete self . $$result ;
2005+ delete self . $$async ;
2006+ self . $callback ( err , result ) ;
2007+ } ) ;
2008+ } ;
2009+
2010+ } else {
2011+
2012+ fn = function ( next ) {
2013+ self . $$schema [ type ] ( name , self , helper , function ( err , result ) {
2014+ self . $$result && self . $$result . push ( err ? null : result ) ;
2015+ if ( ! err )
2016+ return next ( ) ;
2017+ next = null ;
2018+ var result = self . $$result ;
2019+ delete self . $$result ;
2020+ delete self . $$async ;
2021+ self . $callback ( err , result ) ;
2022+ } ) ;
2023+ } ;
19672024
1968- if ( ! self . $$async ) {
1969- self . $$schema . save ( self , helper , callback ) ;
1970- return self ;
19712025 }
19722026
1973- self . $$async . push ( function ( next ) {
1974- self . $$schema . save ( self , helper , function ( err , result ) {
2027+ if ( first )
2028+ self . $$async . unshift ( fn ) ;
2029+ else
2030+ self . $$async . push ( fn ) ;
19752031
1976- if ( self . $$result )
1977- self . $$result . push ( err ? null : result ) ;
2032+ return self ;
2033+ } ;
19782034
1979- if ( ! err )
1980- return next ( ) ;
1981- next = null ;
1982- var result = self . $$result ;
1983- delete self . $$result ;
1984- delete self . $$async ;
1985- self . $callback ( err , result ) ;
1986- } ) ;
1987- } ) ;
2035+ SchemaInstance . prototype . $next = function ( type , name , helper ) {
2036+ return this . $push ( type , name , helper , true ) ;
2037+ } ;
2038+
2039+ SchemaInstance . prototype . $save = function ( helper , callback ) {
2040+ var self = this ;
2041+
2042+ if ( self . $$async )
2043+ return self . $push ( 'save' , helper ) ;
19882044
2045+ self . $$schema . save ( self , helper , callback ) ;
19892046 return self ;
19902047} ;
19912048
1992- SchemaInstance . prototype . $remove = function ( helper , callback ) {
2049+ SchemaInstance . prototype . $query = function ( helper , callback ) {
19932050 var self = this ;
19942051
1995- if ( ! self . $$async ) {
1996- self . $$schema . remove ( helper , callback ) ;
1997- return self ;
1998- }
2052+ if ( self . $$async )
2053+ return self . $push ( 'query' , helper ) ;
19992054
2000- self . $$async . push ( function ( next ) {
2001- self . $$schema . remove ( self , helper , function ( err , result ) {
2055+ self . $$schema . query ( self , helper , callback ) ;
2056+ return self ;
2057+ } ;
20022058
2003- if ( self . $$result )
2004- self . $$result . push ( err ? null : result ) ;
2059+ SchemaInstance . prototype . $read = SchemaInstance . prototype . $get = function ( helper , callback ) {
2060+ var self = this ;
20052061
2006- if ( ! err )
2007- return next ( ) ;
2008- next = null ;
2009- var result = self . $$result ;
2010- delete self . $$result ;
2011- delete self . $$async ;
2012- self . $callback ( err , result ) ;
2013- } ) ;
2014- } ) ;
2062+ if ( self . $$async )
2063+ return self . $push ( 'get' , helper ) ;
20152064
2065+ self . $$schema . get ( self , helper , callback ) ;
2066+ return self ;
2067+ } ;
2068+
2069+ SchemaInstance . prototype . $remove = function ( helper , callback ) {
2070+ var self = this ;
2071+
2072+ if ( self . $$async )
2073+ return self . $push ( 'remove' , helper ) ;
2074+
2075+ self . $$schema . remove ( helper , callback ) ;
20162076 return self ;
20172077} ;
20182078
@@ -2027,82 +2087,30 @@ SchemaInstance.prototype.$destroy = function() {
20272087SchemaInstance . prototype . $transform = function ( name , helper , callback ) {
20282088 var self = this ;
20292089
2030- if ( ! self . $$async ) {
2031- self . $$schema . transform ( name , self , helper , callback ) ;
2032- return self ;
2033- }
2034-
2035- self . $$async . push ( function ( next ) {
2036- self . $$schema . transform ( name , self , helper , function ( err , result ) {
2037-
2038- if ( self . $$result )
2039- self . $$result . push ( err ? null : result ) ;
2040-
2041- if ( ! err )
2042- return next ( ) ;
2043-
2044- next = null ;
2045- var result = self . $$result ;
2046- delete self . $$result ;
2047- delete self . $$async ;
2048- self . $callback ( err , result ) ;
2049- } ) ;
2050- } ) ;
2090+ if ( self . $$async )
2091+ return self . $push ( 'transform' , name , helper ) ;
20512092
2093+ self . $$schema . transform ( name , self , helper , callback ) ;
20522094 return self ;
20532095} ;
20542096
20552097SchemaInstance . prototype . $workflow = function ( name , helper , callback ) {
20562098 var self = this ;
20572099
2058- if ( ! self . $$async ) {
2059- self . $$schema . workflow ( name , self , helper , callback ) ;
2060- return self ;
2061- }
2062-
2063- self . $$async . push ( function ( next ) {
2064- self . $$schema . workflow ( name , self , helper , function ( err , result ) {
2065-
2066- if ( self . $$result )
2067- self . $$result . push ( err ? null : result ) ;
2068-
2069- if ( ! err )
2070- return next ( ) ;
2071- next = null ;
2072- var result = self . $$result ;
2073- delete self . $$result ;
2074- delete self . $$async ;
2075- self . $callback ( err , result ) ;
2076- } ) ;
2077- } ) ;
2100+ if ( self . $$async )
2101+ return self . $push ( 'workflow' , name , helper ) ;
20782102
2103+ self . $$schema . workflow ( name , self , helper , callback ) ;
20792104 return self ;
20802105} ;
20812106
20822107SchemaInstance . prototype . $operation = function ( name , helper , callback ) {
20832108 var self = this ;
20842109
2085- if ( ! self . $$async ) {
2086- self . $$schema . operation ( name , self , helper , callback ) ;
2087- return self ;
2088- }
2089-
2090- self . $$async . push ( function ( next ) {
2091- self . $$schema . operation ( name , self , helper , function ( err , result ) {
2092-
2093- if ( self . $$result )
2094- self . $$result . push ( err ? null : result ) ;
2095-
2096- if ( ! err )
2097- return next ( ) ;
2098- next = null ;
2099- var result = self . $$result ;
2100- delete self . $$result ;
2101- delete self . $$async ;
2102- self . $callback ( err , result ) ;
2103- } ) ;
2104- } ) ;
2110+ if ( ! self . $$async )
2111+ return self . $push ( 'operation' , name , helper ) ;
21052112
2113+ self . $$schema . operation ( name , self , helper , callback ) ;
21062114 return self ;
21072115} ;
21082116
@@ -3304,6 +3312,13 @@ TransformBuilder.setDefaultTransform = function(name) {
33043312 transforms [ 'transformbuilder_default' ] = name ;
33053313} ;
33063314
3315+ function async_queue ( arr , callback ) {
3316+ var item = arr . shift ( ) ;
3317+ if ( item === undefined )
3318+ return callback ( ) ;
3319+ item ( ( ) => async_queue ( arr , callback ) ) ;
3320+ } ;
3321+
33073322// ======================================================
33083323// EXPORTS
33093324// ======================================================
@@ -3322,4 +3337,4 @@ global.SchemaBuilder = SchemaBuilder;
33223337exports . restart = function ( ) {
33233338 schemas = { } ;
33243339 Object . keys ( transforms ) . forEach ( key => { transforms [ key ] = { } ; } ) ;
3325- } ;
3340+ } ;
0 commit comments