+ <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)</li><li id="line24" class="line"> .filter(<span class="hljs-function"><span class="hljs-params">fn</span> =></span> !isNil(fn) && fn !== <span class="hljs-literal">false</span>)</li><li id="line25" class="line"> .map(<span class="hljs-function"><span class="hljs-params">fn</span> =></span> fn.applier === <span class="hljs-literal">undefined</span> ? (</li><li id="line26" class="line"> <span class="hljs-function">(<span class="hljs-params">[obj, appliedPaths]</span>) =></span> [fn(obj), appliedPaths]</li><li id="line27" class="line"> ) : (</li><li id="line28" class="line"> <span class="hljs-function">(<span class="hljs-params">[obj, appliedPaths]</span>) =></span> [</li><li id="line29" class="line"> fn.applier(obj, appliedPaths),</li><li id="line30" class="line"> [...appliedPaths, fn.applier.path],</li><li id="line31" class="line"> ]</li><li id="line32" class="line"> ))</li><li id="line33" class="line"> <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-params">obj</span> =></span> {</li><li id="line34" class="line"> <span class="hljs-keyword">const</span> [result] = fns.reduce(</li><li id="line35" class="line"> <span class="hljs-function">(<span class="hljs-params">acc, fn</span>) =></span> fn(acc),</li><li id="line36" class="line"> [obj, []],</li><li id="line37" class="line"> )</li><li id="line38" class="line"> <span class="hljs-keyword">return</span> result</li><li id="line39" class="line"> }</li><li id="line40" class="line">}</li><li id="line41" class="line"></li><li id="line42" class="line"><span class="hljs-keyword">export</span> { flow }</li><li id="line43" class="line"></li></ol></code></pre>
0 commit comments