{
  "file": "lib/decorate-config.js",
  "content": "<pre class=\"language-javascript line-numbers\"><code class=\"language-javascript}\"><span aria-hidden=\"true\" role=\"presentation\" class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span><span class=\"token string\">'use strict'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> path <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'path'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\" spellcheck=\"true\">/**\n * Handle adding default values to config and validating required properties\n * are present\n * @class decorateConfig\n * @constructor\n * @param {Object} config      Project configuration file\n * @param {Object} packageJSON Project package.json file\n * @param {Object} buildConfig Configs passed to build function call\n * @return {Object} Fully decorated and validated project configuration file\n */</span>\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span> <span class=\"token function\">decorateConfig</span><span class=\"token punctuation\">(</span>config<span class=\"token punctuation\">,</span> packageJSON<span class=\"token punctuation\">,</span> buildConfig<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\" spellcheck=\"true\">// ========================================================</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Setup Default Configs</span>\n  <span class=\"token comment\" spellcheck=\"true\">// ========================================================</span>\n  buildConfig <span class=\"token operator\">=</span> buildConfig <span class=\"token operator\">||</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token comment\" spellcheck=\"true\">/**\n   * Fountianhead default configurations are targeted at Ember applications and\n   * include a sane default for every option with the goal of being able to\n   * install and use the addon with zero configuration for simple/standard Ember\n   * apps.\n   * TODO: Document defaults\n   * @property defaultConfigurations\n   * @type {Object}\n   */</span>\n  <span class=\"token keyword\">let</span> defaultConfigurations <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token punctuation\">:</span> <span class=\"token string\">''</span><span class=\"token punctuation\">,</span>\n    description<span class=\"token punctuation\">:</span> <span class=\"token string\">''</span><span class=\"token punctuation\">,</span>\n    entry<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'app'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    quiet<span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n    whiteListTags<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'passed'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'closure'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'action'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    guides<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    output<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n      filename<span class=\"token punctuation\">:</span> <span class=\"token string\">'fountainhead-data.json'</span><span class=\"token punctuation\">,</span>\n      path<span class=\"token punctuation\">:</span> path<span class=\"token punctuation\">.</span><span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token string\">'docs'</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// If consuming application is an addon, change entry to `/addon` dir</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Addons should have the entry 'ember-addon' in their package keywords</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>packageJSON<span class=\"token punctuation\">.</span>keywords <span class=\"token operator\">&amp;&amp;</span> packageJSON<span class=\"token punctuation\">.</span>keywords<span class=\"token punctuation\">.</span><span class=\"token function\">indexOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">'ember-addon'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">!==</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    defaultConfigurations<span class=\"token punctuation\">.</span>entry <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'addon'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n\n  <span class=\"token comment\" spellcheck=\"true\">// ========================================================</span>\n  <span class=\"token comment\" spellcheck=\"true\">// Merge Defaults with Consumer Defined Configs</span>\n  <span class=\"token comment\" spellcheck=\"true\">// ========================================================</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// Use .assign to set defaults for any missing configs</span>\n  config <span class=\"token operator\">=</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">assign</span><span class=\"token punctuation\">(</span>defaultConfigurations<span class=\"token punctuation\">,</span> config<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// YUIDoc expects an array of entries, Wrap single entry in an array</span>\n  config<span class=\"token punctuation\">.</span>entry <span class=\"token operator\">=</span> config<span class=\"token punctuation\">.</span>entry <span class=\"token keyword\">instanceof</span> <span class=\"token class-name\">Array</span> <span class=\"token operator\">?</span> config<span class=\"token punctuation\">.</span>entry <span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>config<span class=\"token punctuation\">.</span>entry<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// Validate config repository</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>config<span class=\"token punctuation\">.</span>repository <span class=\"token operator\">&amp;&amp;</span> packageJSON<span class=\"token punctuation\">.</span>repository<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    config<span class=\"token punctuation\">.</span>repository <span class=\"token operator\">=</span> <span class=\"token keyword\">typeof</span> packageJSON<span class=\"token punctuation\">.</span>repository <span class=\"token operator\">===</span> <span class=\"token string\">'string'</span>\n      <span class=\"token operator\">?</span> packageJSON<span class=\"token punctuation\">.</span>repository\n      <span class=\"token punctuation\">:</span> packageJSON<span class=\"token punctuation\">.</span>repository<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// Populate with package data where possible</span>\n  config<span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> config<span class=\"token punctuation\">.</span>name <span class=\"token operator\">||</span> packageJSON<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">;</span>\n  config<span class=\"token punctuation\">.</span>description <span class=\"token operator\">=</span> config<span class=\"token punctuation\">.</span>description <span class=\"token operator\">||</span> packageJSON<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">;</span>\n  config<span class=\"token punctuation\">.</span>version <span class=\"token operator\">=</span> config<span class=\"token punctuation\">.</span>version <span class=\"token operator\">||</span> packageJSON<span class=\"token punctuation\">.</span>version<span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// hashRouting determines if query params or hash fragments are used for links,</span>\n  <span class=\"token comment\" spellcheck=\"true\">// users can set this explicitly, but shouldn't have to. If the buildConfig has</span>\n  <span class=\"token comment\" spellcheck=\"true\">// locationType hash, set hashRouting to true (unless user has explicitly</span>\n  <span class=\"token comment\" spellcheck=\"true\">// configured)</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>config<span class=\"token punctuation\">.</span>hashRouting <span class=\"token operator\">===</span> undefined <span class=\"token operator\">&amp;&amp;</span> buildConfig<span class=\"token punctuation\">.</span>locationType <span class=\"token operator\">===</span> <span class=\"token string\">'hash'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    config<span class=\"token punctuation\">.</span>hashRouting <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> config<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n</code></pre>"
}