UNPKG

nodulator

Version:

Complete NodeJS Framework for Restfull APIs

487 lines (333 loc) 16.5 kB
<!DOCTYPE html> <html> <head> <title>Wrappers.ls</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <ul id="jump_to"> <li> <a class="large" href="javascript:void(0);">Jump To &hellip;</a> <a class="small" href="javascript:void(0);">+</a> <div id="jump_wrapper"> <div id="jump_page_wrapper"> <div id="jump_page"> <a class="source" href="Nodulator.html"> Nodulator.ls </a> <a class="source" href="ClientDB.html"> ClientDB.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="Resource.html"> Resource.ls </a> <a class="source" href="Bus.html"> Bus.ls </a> <a class="source" href="Cache.html"> Cache.ls </a> <a class="source" href="ChangeWatcher.html"> ChangeWatcher.ls </a> <a class="source" href="Debug.html"> Debug.ls </a> <a class="source" href="Wrappers.html"> Wrappers.ls </a> <a class="source" href="Nodulator.html"> Nodulator.ls </a> <a class="source" href="Resource.html"> Resource.ls </a> <a class="source" href="Schema.html"> Schema.ls </a> <a class="source" href="NModule.html"> NModule.ls </a> <a class="source" href="AccountResource.html"> AccountResource.ls </a> <a class="source" href="User.html"> User.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="Nodulator-Angular.html"> Nodulator-Angular.ls </a> <a class="source" href="TaskDirective.html"> TaskDirective.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="TaskService.html"> TaskService.ls </a> <a class="source" href="main.html"> main.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="Task.html"> Task.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="DOM.html"> DOM.ls </a> <a class="source" href="View.html"> View.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="Nodulator.html"> Nodulator.ls </a> <a class="source" href="Mongo.html"> Mongo.ls </a> <a class="source" href="Mysql.html"> Mysql.ls </a> <a class="source" href="SqlMem.html"> SqlMem.ls </a> <a class="source" href="index.html"> index.ls </a> <a class="source" href="Resource.html"> Resource.ls </a> <a class="source" href="Request.html"> Request.ls </a> <a class="source" href="Route.html"> Route.ls </a> <a class="source" href="index.html"> index.ls </a> </div> </div> </li> </ul> <ul class="sections"> <li id="title"> <div class="annotation"> <h1>Wrappers.ls</h1> </div> </li> <li id="section-1"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-1">&#182;</a> </div> </div> <div class="content"><div class='highlight'><pre>ChangeWatcher = <span class="hljs-built_in">require</span> <span class="hljs-string">'./ChangeWatcher'</span> Q = <span class="hljs-built_in">require</span> <span class="hljs-string">'q'</span> async = <span class="hljs-built_in">require</span> <span class="hljs-string">'async'</span> polyparams = <span class="hljs-built_in">require</span> \polyparams watchers = [] cache = <span class="hljs-literal">null</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Wrappers</span></span> @_FindDone = <span class="hljs-function">-&gt;</span> it |&gt; find-index <span class="hljs-keyword">is</span>-type \Function @_WrapPromise = <span class="hljs-function"><span class="hljs-params">(cb)</span> -&gt;</span> d = <span class="hljs-literal">null</span> _FindDone = @_FindDone resource = @ (...args) -&gt; idx = _FindDone args <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> idx? d = Q.defer! args.push (err, data) -&gt; <span class="hljs-keyword">return</span> d.reject err <span class="hljs-keyword">if</span> err? d.resolve data ret = cb.apply @, args <span class="hljs-keyword">if</span> d? <span class="hljs-keyword">and</span> @_PrepareResource? <span class="hljs-keyword">and</span> @Init? @Init! <span class="hljs-keyword">new</span> @resource d</pre></div></div> </li> <li id="section-2"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-2">&#182;</a> </div> <p>else if @_promise? and d? @_promise.then d.promise @</p> </div> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> d? <span class="hljs-comment">#and @_promise?</span> @_promise = d.promise @ <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> d? <span class="hljs-keyword">and</span> ret?.state? <span class="hljs-keyword">and</span> @_type? @_promise = ret @ <span class="hljs-keyword">else</span> ret @_WrapResolvePromise = <span class="hljs-function"><span class="hljs-params">(cb)</span> -&gt;</span> findDone = @_FindDone (...args) -&gt; doneIdx = findDone args oldDone = args[doneIdx] <span class="hljs-keyword">if</span> doneIdx? <span class="hljs-keyword">if</span> @_promise? <span class="hljs-keyword">and</span> doneIdx? @ .Then -&gt; it._promise = <span class="hljs-literal">null</span> cb.apply it, args .Catch oldDone <span class="hljs-keyword">else</span> cb.apply @, args @_WrapResolveArgPromise = <span class="hljs-function"><span class="hljs-params">(cb)</span> -&gt;</span> findDone = @_FindDone (...args) -&gt; doneIdx = findDone args oldDone = args[doneIdx] async.map args, <span class="hljs-function"><span class="hljs-params">(arg, done)</span> -&gt;</span> <span class="hljs-keyword">if</span> arg?._promise? arg .Then -&gt; done <span class="hljs-literal">null</span> it .Catch done <span class="hljs-keyword">else</span> done <span class="hljs-literal">null</span> arg , (err, results) ~&gt; <span class="hljs-keyword">return</span> oldDone err <span class="hljs-keyword">if</span> oldDone? <span class="hljs-keyword">and</span> err? cb.apply @, results @ @_WrapWatchArgs = <span class="hljs-function"><span class="hljs-params">(cb)</span> -&gt;</span> resource = @ (...args) -&gt; <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> @N.Watch.active <span class="hljs-keyword">return</span> cb.apply @, args watcher = ChangeWatcher.Watch cb, args, @, @N <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> watcher cb.apply @, args <span class="hljs-keyword">else</span> resource._watchers.push watcher watcher @_WrapWatch = <span class="hljs-function"><span class="hljs-params">(cb)</span> -&gt;</span> (...args) -&gt; first = <span class="hljs-literal">true</span> @N.Watch ~&gt; <span class="hljs-keyword">if</span> first first := <span class="hljs-literal">false</span> cb.apply @, args @_WrapDebugError = <span class="hljs-function"><span class="hljs-params">(debug, cb)</span> -&gt;</span> resource = @ (...args) -&gt; doneIdx = resource._FindDone args <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> doneIdx? <span class="hljs-keyword">return</span> cb.apply @, args oldDone = args[doneIdx] args[doneIdx] = <span class="hljs-function"><span class="hljs-params">(err, data)</span> -&gt;</span> <span class="hljs-keyword">if</span> err? debug JSON.stringify err</pre></div></div> </li> <li id="section-3"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-3">&#182;</a> </div> <p>Debug.UnDepth!</p> </div> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">return</span> oldDone err, data oldDone err, data cb.apply @, args @_WrapParams = <span class="hljs-function"><span class="hljs-params">(...types)</span> -&gt;</span> (...args) -&gt; _cb = polyparams.apply @, types _cb.apply @, args @_WrapCache = <span class="hljs-function"><span class="hljs-params">(name, cb)</span> -&gt;</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> cache? cache = <span class="hljs-built_in">require</span>(\./Cache)(@N.config) <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> @N.config?.cache <span class="hljs-keyword">return</span> (...args) -&gt; cb.apply @, args fullName = name (...args) -&gt; Resource = @ name = @name + fullName doneIdx = @_FindDone args _oldDone = args[doneIdx] first = <span class="hljs-literal">true</span> <span class="hljs-function"> <span class="hljs-title">oldDone</span> = <span class="hljs-params">(err, res)</span> -&gt;</span> <span class="hljs-keyword">if</span> first first := <span class="hljs-literal">false</span> _oldDone err, res <span class="hljs-keyword">else</span> <span class="hljs-number">0</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">is</span>-type \Array args[<span class="hljs-number">0</span>] <span class="hljs-keyword">or</span> <span class="hljs-keyword">is</span>-type \Object args[<span class="hljs-number">0</span>] name += JSON.stringify args[<span class="hljs-number">0</span>] <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">is</span>-type \Number args[<span class="hljs-number">0</span>] name += args[<span class="hljs-number">0</span>] <span class="hljs-keyword">else</span> name += <span class="hljs-string">'{}'</span> cache.Get name, (err, cached) ~&gt; <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> err? <span class="hljs-keyword">and</span> cached? cached = JSON.parse cached <span class="hljs-keyword">if</span> <span class="hljs-keyword">is</span>-type \Array cached cached = cached |&gt; map -&gt; Resource.Hydrate it <span class="hljs-keyword">else</span> cached = Resource.Hydrate cached <span class="hljs-keyword">return</span> oldDone <span class="hljs-literal">null</span>, cached <span class="hljs-keyword">return</span> oldDone err <span class="hljs-keyword">if</span> err? args[doneIdx] = (err, res) ~&gt; <span class="hljs-keyword">if</span> err? <span class="hljs-keyword">return</span> oldDone err <span class="hljs-keyword">if</span> <span class="hljs-keyword">is</span>-type \Array res toStore = res <span class="hljs-keyword">else</span> toStore = obj-to-pairs res |&gt; filter (<span class="hljs-number">.0</span><span class="hljs-number">.0</span> <span class="hljs-keyword">isnt</span> \_) |&gt; pairs-to-obj cache.Set name, JSON.stringify(toStore), (err, status) ~&gt; <span class="hljs-keyword">return</span> oldDone err <span class="hljs-keyword">if</span> err? oldDone <span class="hljs-literal">null</span>, res watchers.push @N.Watch ~&gt; cb.apply @, args @Reset = <span class="hljs-function">-&gt;</span> watchers |&gt; each (.Stop!) watchers := [] <span class="hljs-built_in">module</span>.exports = Wrappers</pre></div></div> </li> <li id="section-4"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-4">&#182;</a> </div> <p>@N.Wrappers = Wrappers</p> </div> </li> </ul> </div> </body> </html>