UNPKG

freight.js

Version:

An simple CommonJS dependency injection container for both node.js and the browser (using browserify)

164 lines (115 loc) 16.8 kB
<!DOCTYPE html><html lang="en"><head><title>freight</title></head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><meta name="groc-relative-root" content=""><meta name="groc-document-path" content="freight"><meta name="groc-project-path" content="src/freight.js"><link rel="stylesheet" type="text/css" media="all" href="assets/style.css"><script type="text/javascript" src="assets/behavior.js"></script><body><div id="meta"><div class="file-path">src/freight.js</div></div><div id="document"><div class="segment"><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">Definition</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./definition.js&#39;</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">Freight</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'> </span></p> <p>Determin how service id are distinques of normal string arguments in configuration</p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">idPrefix</span> <span class="o">=</span> <span class="s1">&#39;:&#39;</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments doc-section doc-section-private"><div class="wrapper"><p><span class='doc-section-header'>Private </span></p> <p>the array of definitions this container managers</p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">_definitions</span> <span class="o">=</span> <span class="p">[];</span></div></div></div><div class="segment"><div class="comments doc-section doc-section-private"><div class="wrapper"><p><span class='doc-section-header'>Private </span></p> <p>the hash with parameters this container holds</p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">_parameters</span> <span class="o">=</span> <span class="p">{};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'>Method getService()</span></p> <p>Get and service of parameter from the container</p> <p>Parameters:</p> <ul> <li><strong>id must be a string.</strong></li> </ul> <p><strong>Returns a mixed</strong></p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">get</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">get</span><span class="p">(</span><span class="nx">id</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">res</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> <span class="k">try</span> <span class="p">{</span> <span class="nx">res</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">getParameter</span><span class="p">(</span><span class="nx">id</span><span class="p">);</span> <span class="p">}</span> <span class="k">catch</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span> <span class="nx">res</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">getService</span><span class="p">(</span><span class="nx">id</span><span class="p">);</span> <span class="p">}</span> <span class="k">return</span> <span class="nx">res</span><span class="p">;</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'>Method isId()</span></p> <p>Check wether the string an parameter id</p> <p>Parameters:</p> <ul> <li><strong>str must be a string.</strong></li> </ul> <p><strong>Returns a Boolean</strong></p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">isId</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">isId</span><span class="p">(</span><span class="nx">val</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">val</span> <span class="o">!==</span> <span class="s1">&#39;string&#39;</span><span class="p">)</span> <span class="k">return</span> <span class="kc">false</span><span class="p">;</span> <span class="k">return</span> <span class="p">((</span><span class="nx">val</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">idPrefix</span><span class="p">)</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="o">?</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="o">:</span> <span class="p">(</span><span class="kc">false</span><span class="p">));</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'>Method setParameter()</span></p> <p>Set a parameter on this container</p> <p>Parameters:</p> <ul> <li><p><strong>id must be a string.</strong></p></li> <li><p><strong>val must be a mixed.</strong></p></li> </ul></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">setParameter</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">setParameter</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">val</span><span class="p">)</span> <span class="p">{</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_parameters</span><span class="p">[</span><span class="nx">id</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">;</span> <span class="k">return</span> <span class="nx">self</span><span class="p">;</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'></span></p> <p>Retrieve a parameter from the container</p> <p>Parameters:</p> <ul> <li><strong>id must be a string.</strong></li> </ul> <p><strong>Returns a mixed</strong></p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">getParameter</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">getParameter</span><span class="p">(</span><span class="nx">id</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">res</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_parameters</span><span class="p">[</span><span class="nx">id</span><span class="p">];</span> <span class="k">if</span><span class="p">(</span><span class="nx">res</span> <span class="o">===</span> <span class="kc">undefined</span><span class="p">)</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">&#39;Parameter &quot;&#39;</span><span class="o">+</span><span class="nx">id</span><span class="o">+</span><span class="s1">&#39;&quot; not found.&#39;</span><span class="p">);</span> <span class="k">return</span> <span class="nx">res</span><span class="p">;</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'>Method findTaggedServiceIds()</span></p> <p>Return an array of service ids from services with the given tag</p> <p>Parameters:</p> <ul> <li><strong>tag must be a string.</strong></li> </ul> <p><strong>Returns an Array</strong></p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">findTaggedServiceIds</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">findTaggedServiceIds</span><span class="p">(</span><span class="nx">tag</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">res</span> <span class="o">=</span> <span class="p">[];</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_definitions</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">d</span><span class="p">){</span> <span class="k">if</span><span class="p">(</span><span class="nx">d</span><span class="p">.</span><span class="nx">tags</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">tag</span><span class="p">)</span> <span class="o">!==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> <span class="nx">res</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">d</span><span class="p">.</span><span class="nx">id</span><span class="p">);</span> <span class="p">}</span> <span class="p">});</span> <span class="k">return</span> <span class="nx">res</span><span class="p">;</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'>Method getDefinition()</span></p> <p>Return a service definition from the container</p> <p>Parameters:</p> <ul> <li><strong>id must be a string.</strong></li> </ul> <p><strong>Returns a Definition</strong></p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">getDefinition</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">getDefinition</span><span class="p">(</span><span class="nx">id</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">def</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_definitions</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">d</span><span class="p">){</span> <span class="k">if</span><span class="p">(</span><span class="nx">d</span><span class="p">.</span><span class="nx">id</span> <span class="o">==</span> <span class="nx">id</span><span class="p">)</span> <span class="p">{</span> <span class="nx">def</span> <span class="o">=</span> <span class="nx">d</span><span class="p">;</span> <span class="p">}</span> <span class="p">});</span> <span class="k">return</span> <span class="nx">def</span><span class="p">;</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'>Method getService()</span></p> <p>Return an service by its id</p> <p>Parameters:</p> <ul> <li><strong>id must be a string.</strong></li> </ul> <p><strong>Returns a mixed</strong></p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">getService</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">getService</span><span class="p">(</span><span class="nx">id</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">def</span> <span class="o">=</span> <span class="nx">self</span><span class="p">.</span><span class="nx">getDefinition</span><span class="p">(</span><span class="nx">id</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">def</span> <span class="o">===</span> <span class="kc">false</span><span class="p">)</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">&#39;Service &quot;&#39;</span><span class="o">+</span><span class="nx">id</span><span class="o">+</span><span class="s1">&#39;&quot; not found.&#39;</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">service</span> <span class="o">=</span> <span class="nx">def</span><span class="p">.</span><span class="nx">retrieve</span><span class="p">();</span> <span class="k">return</span> <span class="nx">service</span><span class="p">;</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'>Method register()</span></p> <p>Register a new service as the specified id</p> <p>Parameters:</p> <ul> <li><p><strong>id must be a string.</strong></p></li> <li><p><strong>conf must be an Object.</strong><br/>(the configuration hash for the individual service)</p></li> </ul> <p><strong>Returns a Definition</strong></p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">register</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">register</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">conf</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">def</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Definition</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">conf</span><span class="p">,</span> <span class="nx">self</span><span class="p">);</span> <span class="nx">self</span><span class="p">.</span><span class="nx">_definitions</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">def</span><span class="p">);</span> <span class="k">return</span> <span class="nx">def</span><span class="p">;</span> <span class="p">};</span></div></div></div><div class="segment"><div class="comments doc-section"><div class="wrapper"><p><span class='doc-section-header'>Method registerAll()</span></p> <p>Register several definitions from an configuration hash (e.g. json)</p> <p>Parameters:</p> <ul> <li><strong>conf must be an Object.</strong><br/>(the services)</li> </ul> <p><strong>Returns an Array</strong><br/>(a array of registered definitions)</p></div></div><div class="code"><div class="wrapper"> <span class="nx">self</span><span class="p">.</span><span class="nx">registerAll</span> <span class="o">=</span> <span class="kd">function</span> <span class="nx">build</span><span class="p">(</span><span class="nx">conf</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">res</span> <span class="o">=</span> <span class="p">[];</span> <span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">conf</span><span class="p">).</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">id</span><span class="p">){</span> <span class="nx">res</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">register</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">conf</span><span class="p">[</span><span class="nx">id</span><span class="p">]));</span> <span class="p">});</span> <span class="k">return</span> <span class="nx">res</span><span class="p">;</span> <span class="p">};</span> <span class="p">};</span> <span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="nx">Freight</span><span class="p">;</span></div></div></div></div></body></html>