+ <pre class="source linenums"><code><ol class="lines"><li id="line1" class="line"><span class="hljs-keyword">import</span> { flatten } <span class="hljs-keyword">from</span> <span class="hljs-string">'util/array'</span></li><li id="line2" class="line"><span class="hljs-keyword">import</span> { isNil } <span class="hljs-keyword">from</span> <span class="hljs-string">'util/lang'</span></li><li id="line3" class="line"></li><li id="line4" class="line"><span class="hljs-comment">/**</span></li><li id="line5" class="line"><span class="hljs-comment"> * A function successively applying a list of functions.</span></li><li id="line6" class="line"><span class="hljs-comment"> * @callback flowFunction</span></li><li id="line7" class="line"><span class="hljs-comment"> * @memberof flow</span></li><li id="line8" class="line"><span class="hljs-comment"> * @param {*} arg The starting value</span></li><li id="line9" class="line"><span class="hljs-comment"> * @returns {*} The resulting value</span></li><li id="line10" class="line"><span class="hljs-comment"> * @since 1.0.0</span></li><li id="line11" class="line"><span class="hljs-comment"> */</span></li><li id="line12" class="line"></li><li id="line13" class="line"><span class="hljs-comment">/**</span></li><li id="line14" class="line"><span class="hljs-comment"> * Successively calls <code>fns</code>.<br/></span></li><li id="line15" class="line"><span class="hljs-comment"> * Each function is called with the result of the previous one.<br/></span></li><li id="line16" class="line"><span class="hljs-comment"> * Falsey functions (<code>null</code>, <code>undefined</code> and <code>false</code>) are tolerated and will be skipped.</span></li><li id="line17" class="line"><span class="hljs-comment"> * @memberof flow</span></li><li id="line18" class="line"><span class="hljs-comment"> * @param {...(function|Array<function>)} args The functions to apply</span></li><li id="line19" class="line"><span class="hljs-comment"> * @returns {flow.flowFunction} A function successively calling <code>fns</code></span></li><li id="line20" class="line"><span class="hljs-comment"> * @since 1.0.0</span></li><li id="line21" class="line"><span class="hljs-comment"> */</span></li><li id="line22" class="line"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">flow</span>(<span class="hljs-params">...args</span>) </span>{</li><li id="line23" class="line"> <span class="hljs-keyword">const</span> fns = flatten(args).filter(<span class="hljs-function"><span class="hljs-params">fn</span> =></span> !isNil(fn) && fn !== <span class="hljs-literal">false</span>)</li><li id="line24" class="line"> <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-params">pObj</span> =></span> {</li><li id="line25" class="line"> <span class="hljs-keyword">const</span> [result] = fns.reduce(</li><li id="line26" class="line"> <span class="hljs-function">(<span class="hljs-params">[obj, appliedPaths], fn</span>) =></span> [</li><li id="line27" class="line"> fn(obj, appliedPaths),</li><li id="line28" class="line"> [...appliedPaths, fn.path],</li><li id="line29" class="line"> ],</li><li id="line30" class="line"> [pObj, []],</li><li id="line31" class="line"> )</li><li id="line32" class="line"> <span class="hljs-keyword">return</span> result</li><li id="line33" class="line"> }</li><li id="line34" class="line">}</li><li id="line35" class="line"></li><li id="line36" class="line"><span class="hljs-keyword">export</span> { flow }</li><li id="line37" class="line"></li></ol></code></pre>
0 commit comments