bajo 2.18.0 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/class/_helper.js +22 -7
- package/class/app.js +59 -45
- package/class/bajo.js +150 -129
- package/class/base.js +3 -3
- package/class/cache.js +60 -0
- package/class/err.js +14 -11
- package/class/log.js +41 -40
- package/class/plugin.js +35 -36
- package/class/print.js +54 -51
- package/class/tools.js +3 -4
- package/docs/App.html +7 -7
- package/docs/Bajo.html +2 -2
- package/docs/Base.html +1 -1
- package/docs/Cache.html +3 -0
- package/docs/Err.html +2 -2
- package/docs/Log.html +2 -2
- package/docs/Plugin.html +1 -1
- package/docs/Print.html +1 -1
- package/docs/Tools.html +3 -0
- package/docs/class__helper.js.html +694 -0
- package/docs/class_app.js.html +307 -149
- package/docs/class_bajo.js.html +316 -464
- package/docs/class_base.js.html +35 -32
- package/docs/class_cache.js.html +150 -0
- package/docs/class_err.js.html +144 -0
- package/docs/class_log.js.html +270 -0
- package/docs/class_plugin.js.html +98 -71
- package/docs/class_print.js.html +261 -0
- package/docs/class_tools.js.html +44 -0
- package/docs/data/search.json +1 -1
- package/docs/global.html +1 -4
- package/docs/index.html +1 -1
- package/docs/index.js.html +21 -14
- package/docs/lib_find-deep.js.html +27 -0
- package/docs/lib_formats.js.html +19 -19
- package/docs/lib_freeze.js.html +19 -0
- package/docs/lib_import-module.js.html +16 -14
- package/docs/lib_index.js.html +9 -0
- package/docs/lib_log-levels.js.html +2 -2
- package/docs/module-Helper.html +3 -0
- package/docs/module-Lib.html +3 -8
- package/docs/scripts/core.js +477 -476
- package/docs/scripts/resize.js +36 -36
- package/docs/scripts/search.js +105 -105
- package/docs/scripts/third-party/fuse.js +1 -1
- package/docs/scripts/third-party/hljs-line-num-original.js +285 -282
- package/docs/scripts/third-party/hljs-line-num.js +1 -1
- package/docs/scripts/third-party/hljs-original.js +1202 -1195
- package/docs/scripts/third-party/hljs.js +1 -1
- package/docs/scripts/third-party/popper.js +1 -1
- package/docs/scripts/third-party/tippy.js +1 -1
- package/docs/scripts/third-party/tocbot.js +509 -508
- package/index.js +8 -11
- package/lib/find-deep.js +3 -3
- package/lib/formats.js +17 -17
- package/lib/freeze.js +3 -3
- package/lib/import-module.js +8 -8
- package/package.json +1 -1
- package/test/app.test.js +183 -0
- package/test/bajo.test.js +125 -0
- package/test/base.test.js +74 -107
- package/test/cache.test.js +94 -0
- package/test/e2e.test.js +137 -0
- package/test/err.test.js +73 -0
- package/test/helper.test.js +39 -0
- package/test/import-module.test.js +138 -0
- package/test/integration.test.js +218 -0
- package/test/log.test.js +119 -0
- package/test/plugin.test.js +116 -0
- package/test/print.test.js +100 -0
- package/test/tools.test.js +38 -0
- package/wiki/CHANGES.md +5 -0
- package/.mocharc.json +0 -4
package/docs/Bajo.html
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Class: Bajo</title><!--[if lt IE 9]>
|
|
2
2
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
3
|
-
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">Bajo API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:bajo:afterAll%257Bmethod%257D">bajo:afterAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBootComplete">bajo:afterBootComplete</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBuildCollection">bajo:afterBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterCollectHooks">bajo:afterCollectHooks</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeAll%257Bmethod%257D">bajo:beforeAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeBuildCollection">bajo:beforeBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:afterAppletRun">{ns}:afterAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:after%257Bmethod%257D">{ns}:after{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:beforeAppletRun">{ns}:beforeAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:before%257Bmethod%257D">{ns}:before{method}</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Helper_Bajo.html">Helper/Bajo</a></div><div class="sidebar-section-children"><a href="module-Helper_Base.html">Helper/Base</a></div><div class="sidebar-section-children"><a href="module-Lib.html">Lib</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TAppConfigHandler">TAppConfigHandler</a></div><div class="sidebar-section-children"><a href="global.html#TAppEnv">TAppEnv</a></div><div class="sidebar-section-children"><a href="global.html#TAppLib">TAppLib</a></div><div class="sidebar-section-children"><a href="global.html#TBajoDataType">TBajoDataType</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatResult">TBajoFormatResult</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatType">TBajoFormatType</a></div><div class="sidebar-section-children"><a href="global.html#TLogJson">TLogJson</a></div><div class="sidebar-section-children"><a href="global.html#TLogLevels">TLogLevels</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathPairs">TNsPathPairs</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathResult">TNsPathResult</a></div><div class="sidebar-section-children"><a href="global.html#TPrintOptions">TPrintOptions</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/bajo" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/bajo" target="">Github</a></div><div class="navbar-item"><a id="" href="https://bajo.app" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><header><h1 id="Bajo-title" class="has-anchor">Bajo</h1><div class="class-description"><p>The Core. The main engine. The one and only plugin that control app's boot process and making sure all other plugins working nicely.</p></div></header><article><div class="container-overview"><h2 id="constructor" class="has-anchor">Constructor</h2><h3 class="name has-anchor" id="Bajo"><span class="type-signature"></span>new Bajo<span class="signature">(app)</span></h3><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>app</code></td><td class="type"><span class="param-type"><a href="App.html">App</a></span></td><td class="description last"><p>App instance. Usefull to call app method inside a plugin</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line46">line 46</a></li></ul></dd></div></dl></div><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="config"><span class="type-signature"></span>config<span class="type-signature"> :Object</span></h3><div class="description"><p>Config object</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line60">line 60</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>config</li></ul></dd></div></dl><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="breakNsPath"><span class="type-signature"></span>breakNsPath<span class="signature">(name, checkNs<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="global.html#TNsPathResult">TNsPathResult</a>}</span></h3><div class="description"><p>Break name to its namespace & path infos</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span> |<wbr> <span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Name to break</p></td></tr><tr><td class="name"><code>checkNs</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If <code>true</code> (default), namespace will be checked for its validity</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line196">line 196</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type"><a href="global.html#TNsPathResult">TNsPathResult</a></span></dd></dl></div><h3 class="name has-anchor" id="buildCollections"><span class="type-signature">(async) </span>buildCollections<span class="signature">(options)</span><span class="type-signature"> → {Array.<Object>}</span></h3><div class="description"><p>Method to transform config's array or object into an array of collection.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Namespace. If not provided, defaults to <code>bajo</code></p></td></tr><tr><td class="name"><code>handler</code></td><td class="type"><span class="param-type">function</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Handler to call while building the collection item</p></td></tr><tr><td class="name"><code>dupChecks</code></td><td class="type"><span class="param-type">Array.<string></span></td><td class="attributes"><optional><br></td><td class="default">[]</td><td class="description last"><p>Array of keys to check for duplicates</p></td></tr><tr><td class="name"><code>container</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Key used as container name</p></td></tr><tr><td class="name"><code>useDefaultName</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If true (default) and <code>name</code> key is not provided, returned collection will be named <code>default</code></p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line256">line 256</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li><a href="global.html#event:bajo:beforeBuildCollection">bajo:beforeBuildCollection</a></li><li><a href="global.html#event:bajo:afterBuildCollection">bajo:afterBuildCollection</a></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The collection</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array.<Object></span></dd></dl></div><h3 class="name has-anchor" id="buildNsPath"><span class="type-signature"></span>buildNsPath<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="global.html#TNsPathPairs">TNsPathPairs</a>}</span></h3><div class="description"><p>Build ns/path pairs</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options object</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Namespace</p></td></tr><tr><td class="name"><code>subNs</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Sub namespace</p></td></tr><tr><td class="name"><code>subSubNs</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Sub sub namespace</p></td></tr><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Path</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line168">line 168</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Ns/path pairs</li></ul></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span></dd></dl></div><h3 class="name has-anchor" id="callHandler"><span class="type-signature">(async) </span>callHandler<span class="signature">(name, …args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {any}</span></h3><div class="description"><p>Calling any plugin's method by its name:</p><ul><li>If name is a string, the corresponding plugin's method will be called with passed args as its parameters</li><li>If name is a plugin instance, this will be used as the scope instead. The first args is now the handler name and the rest are its parameters</li><li>If name is a function, this function will be run under scope with the remaining args</li><li>If name is an object and has <code>handler</code> key in it, this function handler will be instead</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span> |<wbr> <span class="param-type">Object</span> |<wbr> <span class="param-type">function</span></td><td class="attributes"></td><td class="description last"><p>Method's name, function handler, plain object or plugin instance</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>One or more arguments passed as parameter to the handler</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line330">line 330</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returned value</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">any</span></dd></dl></div><h3 class="name has-anchor" id="eachPlugins"><span class="type-signature">(async) </span>eachPlugins<span class="signature">(handler, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {any}</span></h3><div class="description"><p>This function iterates through all loaded plugins and call the provided handler scoped as the running plugin. And an object with the following key serves as its parameter:</p><ul><li><code>file</code>: file matched the glob pattern</li><li><code>dir</code>: plugin's base directory</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>handler</code></td><td class="type"><span class="param-type">function</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Function handler. Can be an async function. Scoped to the running plugin</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options. If a string is provided, it serves as the glob pattern, otherwise:</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>glob</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Array.<string></span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Glob pattern. If provided,</p></td></tr><tr><td class="name"><code>useBajo</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>If true, add <code>bajo</code> to the running plugins too</p></td></tr><tr><td class="name"><code>prefix</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Prepend glob pattern with prefix</p></td></tr><tr><td class="name"><code>noUnderscore</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If true (default), matched file with name starts with underscore is ignored</p></td></tr><tr><td class="name"><code>returnItems</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If true, each value of returned handler call will be saved as an object with running plugin name as its keys</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line377">line 377</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">any</span></dd></dl></div><h3 class="name has-anchor" id="findDeep"><span class="type-signature"></span>findDeep<span class="signature">(item, paths)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Find item deep in paths</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>item</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Item to find</p></td></tr><tr><td class="name"><code>paths</code></td><td class="type"><span class="param-type">Array</span></td><td class="description last"><p>Array of path to look for</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line618">line 618</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="format"><span class="type-signature"></span>format<span class="signature">(value, type<span class="signature-attributes">opt</span>, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Format value</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Value to format</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Data type to use. See <a href="global.html#TBajoDataType">TBajoDataType</a> for acceptable values. If not provided, return the untouched value</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>emptyValue</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Empty value to use if function resulted empty. Defaults to the one from your config</p></td></tr><tr><td class="name"><code>withUnit</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Return with its unit appended</p></td></tr><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Format value according to this language. Defaults to the one you set in config</p></td></tr><tr><td class="name"><code>latitude</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If Bajo Spatial is loaded and data type is a double or float, then format it as latitude in degree, minute, second</p></td></tr><tr><td class="name"><code>longitude</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If Bajo Spatial is loaded and data type is a double or float, then format it as longitude in degree, minute, second</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line490">line 490</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Formatted value</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="formatByType"><span class="type-signature"></span>formatByType<span class="signature">(type, value, dataType<span class="signature-attributes">opt</span>, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array|string}</span></h3><div class="description"><p>Format value by type</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Format type. See <a href="global.html#TBajoFormatType">TBajoFormatType</a> for acceptable values</p></td></tr><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Value to format</p></td></tr><tr><td class="name"><code>dataType</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Value's data type. See <a href="global.html#TBajoDataType">TBajoDataType</a> for acceptable values</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>withUnit</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Return with its unit appended</p></td></tr><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Format value according to this language. Defaults to the one you set in config</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line462">line 462</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Return string if <code>withUnit</code> is true. Otherwise is an array of <code>[value, unit, separator]</code></p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array</span> |<wbr> <span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="freeze"><span class="type-signature"></span>freeze<span class="signature">(obj, shallow<span class="signature-attributes">opt</span>)</span></h3><div class="description"><p>Freeze object</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>obj</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Object to freeze</p></td></tr><tr><td class="name"><code>shallow</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>If <code>false</code> (default), deep freeze object</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line118">line 118</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="generateId"><span class="type-signature"></span>generateId<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string|Object}</span></h3><div class="description"><p>Generate unique random characters that can be used as ID. Use <a href="https://github.com/ai/nanoid">nanoid</a> under the hood</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">boolean</span> |<wbr> <span class="param-type">string</span> |<wbr> <span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options. If set to <code>true</code> or <code>alpha</code>, it will generate alphaphet only characters. If set to <code>int</code>, it will generate integer only characters. Otherwise:</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>pattern</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Character pattern to use. Defaults to all available alphanumeric characters</p></td></tr><tr><td class="name"><code>length</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes"><optional><br></td><td class="default">13</td><td class="description last"><p>Length of resulted characters</p></td></tr><tr><td class="name"><code>case</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If set to <code>lower</code> to use lower cased pattern only. For upper cased pattern, set it to <code>upper</code></p></td></tr><tr><td class="name"><code>returnInstance</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Set to <code>true</code> to return <a href="https://github.com/ai/nanoid">nanoid</a> instance instead of string</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line547">line 547</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Return string or instance of <a href="https://github.com/ai/nanoid">nanoid</a></p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="getGlobalModuleDir"><span class="type-signature"></span>getGlobalModuleDir<span class="signature">(pkgName<span class="signature-attributes">opt</span>, silent<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Get NPM global module directory</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>pkgName</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If provided, return this package global directory. Otherwise the npm global module directory</p></td></tr><tr><td class="name"><code>silent</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Set to <code>false</code> to throw exception in case of error. Otherwise silently returns undefined</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line575">line 575</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="getMethod"><span class="type-signature"></span>getMethod<span class="signature">(name, thrown<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {function}</span></h3><div class="description"><p>Get class method by name</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Name in format <code>ns:methodName</code></p></td></tr><tr><td class="name"><code>thrown</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If <code>true</code> (default), throw exceptiom in case of error</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line603">line 603</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Class method</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="getModuleDir"><span class="type-signature"></span>getModuleDir<span class="signature">(pkgName, base)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Get module directory, locally and globally</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>pkgName</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Package name to find</p></td></tr><tr><td class="name"><code>base</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Provide base name if <code>pkgName</code> is a module under <code>base</code>'s package name</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line638">line 638</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Return absolute package directory</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="getPlugin"><span class="type-signature"></span>getPlugin<span class="signature">(name, silent<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Get plugin by name</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>Plugin name/namespace or alias</p></td></tr><tr><td class="name"><code>silent</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="description last"><p>If <code>true</code>, silently return undefined even on error</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line699">line 699</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Plugin object</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="getPluginDataDir"><span class="type-signature"></span>getPluginDataDir<span class="signature">(name, ensureDir<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Get plugin data directory</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Plugin name (namespace) or alias</p></td></tr><tr><td class="name"><code>ensureDir</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Set <code>true</code> (default) to ensure directory is existed</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line661">line 661</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="getPluginFile"><span class="type-signature"></span>getPluginFile<span class="signature">(file)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Resolve file path from:</p><ul><li>local/absolute file</li><li>TNsPath (<code>myPlugin:/path/to/file.txt</code>)</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>File path, see above for supported types</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line678">line 678</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Resolved file path</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="getUnitFormat"><span class="type-signature"></span>getUnitFormat<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="global.html#TBajoFormatResult">TBajoFormatResult</a>}</span></h3><div class="description"><p>Get unit format</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Language to use. Defaults to the one you set in config</p></td></tr><tr><td class="name"><code>unitSys</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Unit system to use. Defaults to language's unit system or <code>metric</code> if unspecified</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line443">line 443</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returned value</li></ul></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type"><a href="global.html#TBajoFormatResult">TBajoFormatResult</a></span></dd></dl></div><h3 class="name has-anchor" id="importModule"><span class="type-signature">(async) </span>importModule<span class="signature">()</span></h3><div class="description"><p>Import file/module from any loaded plugins.</p><p>Method proxy from <a href="module-Lib.html#.importModule">module:Lib.importModule</a></p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line728">line 728</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="module-Lib.html#.importModule">module:Lib.importModule</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="importPkg"><span class="type-signature">(async) </span>importPkg<span class="signature">(…pkgs)</span><span class="type-signature"> → {Object|Array}</span></h3><div class="description"><p>Import one or more packages belongs to a plugin.</p><p>If the last arguments passed is an object, this object serves as options object:</p><ul><li><code>returnDefault</code>: should return package's default export. Defaults to <code>true</code></li><li><code>throwNotFound</code>: should throw if package is not found. Defaults to <code>false</code></li><li><code>noCache</code>: always use fresh import. Defaults to <code>false</code></li><li><code>asObject</code>: see below. Defaults to <code>false</code></li></ul><p>Return value:</p><ul><li>if <code>options.asObject</code> is <code>true</code> (default <code>false</code>), return as object with package's names as it's keys</li><li>Otherwise depends on how many parameters are provided, it should return the named package or an array of packages</li></ul><p>Example: you want to import <code>delay</code> and <code>chalk</code> from <code>bajo</code> plugin because you want to use it in your code</p><pre class="prettyprint source lang-javascript"><code>const { importPkg } from this.app.bajo
|
|
3
|
+
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">Bajo API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Cache.html">Cache</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div><div class="sidebar-section-children"><a href="Tools.html">Tools</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:bajo:afterAll%257Bmethod%257D">bajo:afterAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBootComplete">bajo:afterBootComplete</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBuildCollection">bajo:afterBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterCollectHooks">bajo:afterCollectHooks</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeAll%257Bmethod%257D">bajo:beforeAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeBuildCollection">bajo:beforeBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:after%257Bmethod%257D">{ns}:after{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:beforeAppletRun">{ns}:beforeAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:before%257Bmethod%257D">{ns}:before{method}</a></div><div class="sidebar-section-children"><a href="module-Helper%257Bns%257D_afterAppletRun.html">Helper{ns}:afterAppletRun</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div><div class="sidebar-section-children"><a href="module-Lib.html">Lib</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TAppConfigHandler">TAppConfigHandler</a></div><div class="sidebar-section-children"><a href="global.html#TAppEnv">TAppEnv</a></div><div class="sidebar-section-children"><a href="global.html#TBajoDataType">TBajoDataType</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatResult">TBajoFormatResult</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatType">TBajoFormatType</a></div><div class="sidebar-section-children"><a href="global.html#TLogJson">TLogJson</a></div><div class="sidebar-section-children"><a href="global.html#TLogLevels">TLogLevels</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathPairs">TNsPathPairs</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathResult">TNsPathResult</a></div><div class="sidebar-section-children"><a href="global.html#TPrintOptions">TPrintOptions</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/bajo" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/bajo" target="">Github</a></div><div class="navbar-item"><a id="" href="https://bajo.app" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><header><h1 id="Bajo-title" class="has-anchor">Bajo</h1><div class="class-description"><p>The Core. The main engine. The one and only plugin that control app's boot process and making sure all other plugins working nicely.</p></div></header><article><div class="container-overview"><h2 id="constructor" class="has-anchor">Constructor</h2><h3 class="name has-anchor" id="Bajo"><span class="type-signature"></span>new Bajo<span class="signature">(app)</span></h3><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>app</code></td><td class="type"><span class="param-type"><a href="App.html">App</a></span></td><td class="description last"><p>App instance. Usefull to call app method inside a plugin.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line62">line 62</a></li></ul></dd></div></dl></div><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="config"><span class="type-signature"></span>config<span class="type-signature"> :Object</span></h3><div class="description"><p>Config object.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line76">line 76</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>config</li></ul></dd></div></dl><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="breakNsPath"><span class="type-signature"></span>breakNsPath<span class="signature">(name, checkNs<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="global.html#TNsPathResult">TNsPathResult</a>}</span></h3><div class="description"><p>Break name to its namespace & path infos.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span> |<wbr> <span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Name to break</p></td></tr><tr><td class="name"><code>checkNs</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If <code>true</code> (default), namespace will be checked for its validity</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line173">line 173</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type"><a href="global.html#TNsPathResult">TNsPathResult</a></span></dd></dl></div><h3 class="name has-anchor" id="buildCollections"><span class="type-signature">(async) </span>buildCollections<span class="signature">(options)</span><span class="type-signature"> → {Array.<Object>}</span></h3><div class="description"><p>Method to transform config's array or object into an array of collection.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Options.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Namespace. If not provided, defaults to <code>bajo</code></p></td></tr><tr><td class="name"><code>handler</code></td><td class="type"><span class="param-type">function</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Handler to call while building the collection item.</p></td></tr><tr><td class="name"><code>dupChecks</code></td><td class="type"><span class="param-type">Array.<string></span></td><td class="attributes"><optional><br></td><td class="default">[]</td><td class="description last"><p>Array of keys to check for duplicates.</p></td></tr><tr><td class="name"><code>container</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Key used as container name.</p></td></tr><tr><td class="name"><code>useDefaultName</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If true (default) and <code>name</code> key is not provided, returned collection will be named <code>default</code>.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line233">line 233</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li><a href="global.html#event:bajo:beforeBuildCollection">bajo:beforeBuildCollection</a></li><li><a href="global.html#event:bajo:afterBuildCollection">bajo:afterBuildCollection</a></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The collection</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array.<Object></span></dd></dl></div><h3 class="name has-anchor" id="buildNsPath"><span class="type-signature"></span>buildNsPath<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="global.html#TNsPathPairs">TNsPathPairs</a>}</span></h3><div class="description"><p>Build ns/path pairs.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options object.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Namespace.</p></td></tr><tr><td class="name"><code>subNs</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Sub namespace.</p></td></tr><tr><td class="name"><code>subSubNs</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Sub sub namespace.</p></td></tr><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Path.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line145">line 145</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Ns/path pairs.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span></dd></dl></div><h3 class="name has-anchor" id="callHandler"><span class="type-signature">(async) </span>callHandler<span class="signature">(name, …args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {any}</span></h3><div class="description"><p>Calling any plugin's method by its name:</p><ul><li>If name is a string, the corresponding plugin's method will be called with passed args as its parameters</li><li>If name is a plugin instance, this will be used as the scope instead. The first args is now the handler name and the rest are its parameters</li><li>If name is a function, this function will be run under scope with the remaining args</li><li>If name is an object and has <code>handler</code> key in it, this function handler will be instead</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span> |<wbr> <span class="param-type">Object</span> |<wbr> <span class="param-type">function</span></td><td class="attributes"></td><td class="description last"><p>Method's name, function handler, plain object or plugin instance.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>One or more arguments passed as parameter to the handler.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line309">line 309</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returned value.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">any</span></dd></dl></div><h3 class="name has-anchor" id="eachPlugins"><span class="type-signature">(async) </span>eachPlugins<span class="signature">(handler, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {any}</span></h3><div class="description"><p>This function iterates through all loaded plugins and call the provided handler scoped as the running plugin. And an object with the following key serves as its parameter:</p><ul><li><code>file</code>: file matched the glob pattern</li><li><code>dir</code>: plugin's base directory</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>handler</code></td><td class="type"><span class="param-type">function</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Function handler. Can be an async function. Scoped to the running plugin.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options. If a string is provided, it serves as the glob pattern, otherwise:</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>glob</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Array.<string></span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Glob pattern. If provided,</p></td></tr><tr><td class="name"><code>useBajo</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>If true, add <code>bajo</code> to the running plugins too.</p></td></tr><tr><td class="name"><code>prefix</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Prepend glob pattern with prefix.</p></td></tr><tr><td class="name"><code>noUnderscore</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If true (default), matched file with name starts with underscore is ignored.</p></td></tr><tr><td class="name"><code>returnItems</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If true, each value of returned handler call will be saved as an object with running plugin name as its keys.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line355">line 355</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">any</span></dd></dl></div><h3 class="name has-anchor" id="format"><span class="type-signature"></span>format<span class="signature">(value, type<span class="signature-attributes">opt</span>, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Format value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Value to format.</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Data type to use. See <a href="global.html#TBajoDataType">TBajoDataType</a> for acceptable values. If not provided, return the untouched value.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>emptyValue</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Empty value to use if function resulted empty. Defaults to the one from your config.</p></td></tr><tr><td class="name"><code>withUnit</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Return with its unit appended.</p></td></tr><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Format value according to this language. Defaults to the one you set in config.</p></td></tr><tr><td class="name"><code>latitude</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If Bajo Spatial is loaded and data type is a double or float, then format it as latitude in degree, minute, second.</p></td></tr><tr><td class="name"><code>longitude</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If Bajo Spatial is loaded and data type is a double or float, then format it as longitude in degree, minute, second.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line455">line 455</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Formatted value.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="formatByType"><span class="type-signature"></span>formatByType<span class="signature">(type, value, dataType<span class="signature-attributes">opt</span>, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array|string}</span></h3><div class="description"><p>Format value by type.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Format type. See <a href="global.html#TBajoFormatType">TBajoFormatType</a> for acceptable values.</p></td></tr><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Value to format.</p></td></tr><tr><td class="name"><code>dataType</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Value's data type. See <a href="global.html#TBajoDataType">TBajoDataType</a> for acceptable values.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>withUnit</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Return with its unit appended.</p></td></tr><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Format value according to this language. Defaults to the one you set in config.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line427">line 427</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Return string if <code>withUnit</code> is true. Otherwise is an array of <code>[value, unit, separator]</code>.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array</span> |<wbr> <span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="fromJs"><span class="type-signature">(async) </span>fromJs<span class="signature">(file, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Read and parse JavaScript file.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>File to read and parse.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line908">line 908</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Parsed JavaScript object.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="fromJson"><span class="type-signature"></span>fromJson<span class="signature">(data, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Read and parse JSON string or object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>data</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Filename to load from or JSON string to parse.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line922">line 922</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Parsed JSON object.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="getGlobalModuleDir"><span class="type-signature"></span>getGlobalModuleDir<span class="signature">(pkgName<span class="signature-attributes">opt</span>, silent<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Get NPM global module directory.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>pkgName</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If provided, return this package global directory. Otherwise the npm global module directory.</p></td></tr><tr><td class="name"><code>silent</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Set to <code>false</code> to throw exception in case of error. Otherwise silently returns undefined.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line510">line 510</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="getMethod"><span class="type-signature"></span>getMethod<span class="signature">(name, thrown<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {function}</span></h3><div class="description"><p>Get class method by name.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Name in format <code>ns:methodName</code>.</p></td></tr><tr><td class="name"><code>thrown</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If <code>true</code> (default), throw exception in case of error.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line538">line 538</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Class method.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="getModuleDir"><span class="type-signature"></span>getModuleDir<span class="signature">(pkgName, base)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Get module directory, locally and globally.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>pkgName</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Package name to find.</p></td></tr><tr><td class="name"><code>base</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Provide base name if <code>pkgName</code> is a module under <code>base</code>'s package name.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line553">line 553</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Return absolute package directory.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="getUnitFormat"><span class="type-signature"></span>getUnitFormat<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="global.html#TBajoFormatResult">TBajoFormatResult</a>}</span></h3><div class="description"><p>Get unit format.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Language to use. Defaults to the one you set in config.</p></td></tr><tr><td class="name"><code>unitSys</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Unit system to use. Defaults to language's unit system or <code>metric</code> if unspecified.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line408">line 408</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returned value.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type"><a href="global.html#TBajoFormatResult">TBajoFormatResult</a></span></dd></dl></div><h3 class="name has-anchor" id="importModule"><span class="type-signature">(async) </span>importModule<span class="signature">()</span></h3><div class="description"><p>Import file/module from any loaded plugins.</p><p>Method proxy from <a href="module-Lib.html#.importModule">module:Lib.importModule</a></p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line578">line 578</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="module-Lib.html#.importModule">module:Lib.importModule</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="importPkg"><span class="type-signature">(async) </span>importPkg<span class="signature">(…pkgs)</span><span class="type-signature"> → {Object|Array}</span></h3><div class="description"><p>Import one or more packages belongs to a plugin.</p><p>If the last arguments passed is an object, this object serves as options object:</p><ul><li><code>returnDefault</code>: should return package's default export. Defaults to <code>true</code></li><li><code>throwNotFound</code>: should throw if package is not found. Defaults to <code>false</code></li><li><code>noCache</code>: always use fresh import. Defaults to <code>false</code></li><li><code>asObject</code>: see below. Defaults to <code>false</code></li></ul><p>Return value:</p><ul><li>if <code>options.asObject</code> is <code>true</code> (default <code>false</code>), return as object with package's names as it's keys</li><li>Otherwise depends on how many parameters are provided, it should return the named package or an array of packages</li></ul><p>Example: you want to import <code>delay</code> and <code>chalk</code> from <code>bajo</code> plugin because you want to use it in your code</p><pre class="prettyprint source lang-javascript"><code>const { importPkg } from this.app.bajo
|
|
4
4
|
const [delay, chalk] = await importPkg('bajo:delay', 'bajo:chalk')
|
|
5
5
|
|
|
6
6
|
await delay(1000)
|
|
7
7
|
...
|
|
8
|
-
</code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>pkgs</code></td><td class="type"><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span></td><td class="attributes"><repeatable><br></td><td class="description last"><p>One or more packages in format <code>{ns}:{packageName}</code></p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line759">line 759</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>See above</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span> |<wbr> <span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="init"><span class="type-signature">(async) </span>init<span class="signature">()</span></h3><div class="description"><p>Initialization:</p><ol><li>Building <a href="module-Helper_Bajo.html#.buildBaseConfig">base config</a></li><li><a href="module-Helper_Bajo.html#.buildPlugins">Building plugins</a></li><li>Collect all <a href="module-Helper_Bajo.html#.collectConfigHandlers">config handler</a></li><li>Building <a href="module-Helper_Bajo.html#.buildExtConfig">extra config</a></li><li>Setup <a href="module-Helper_Bajo.html#.bootOrder">boot order</a></li><li><a href="module-Helper_Bajo.html#.bootPlugins">Boot loaded plugins</a></li><li>Attach <a href="module-Helper_Bajo.html#.exitHandler">exit handlers</a></li></ol></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line88">line 88</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="isEmptyDir"><span class="type-signature">(async) </span>isEmptyDir<span class="signature">(dir, filterFn)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Check whether a directory is empty or not. More info please <a href="https://github.com/gulpjs/empty-dir">check here</a>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>dir</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span></td><td class="description last"><p>Directory to check</p></td></tr><tr><td class="name"><code>filterFn</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>Filter function to filter out files that cause false positives.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line805">line 805</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isLogInRange"><span class="type-signature"></span>isLogInRange<span class="signature">(level)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Check whether log level is within log's app current level</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>level</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Level to check. See <a href="global.html#TLogLevels">TLogLevels</a> for more</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line818">line 818</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isValidApp"><span class="type-signature"></span>isValidApp<span class="signature">(dir, returnPkg<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean|Object}</span></h3><div class="description"><p>Check whether directory is a valid Bajo app</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>dir</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>Directory to check</p></td></tr><tr><td class="name"><code>returnPkg</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Set <code>true</code> to return its package.json content</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line846">line 846</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span> |<wbr> <span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="isValidPlugin"><span class="type-signature"></span>isValidPlugin<span class="signature">(dir, returnPkg<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean|Object}</span></h3><div class="description"><p>Check whether directory is a valid Bajo plugin</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>dir</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>Directory to check</p></td></tr><tr><td class="name"><code>returnPkg</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Set <code>true</code> to return its package.json content</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line859">line 859</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span> |<wbr> <span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="join"><span class="type-signature"></span>join<span class="signature">(array, options)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Human friendly join array of items.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">Array.<any></span></td><td class="description last"><p>Array to join</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Object</span></td><td class="description last"><p>If provided and is a string, it will be used as separator</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>separator</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">', '</td><td class="description last"><p>Separator to use</p></td></tr><tr><td class="name"><code>lastSeparator</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">and</td><td class="description last"><p>Text to use as the last separator</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line874">line 874</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="numUnit"><span class="type-signature"></span>numUnit<span class="signature">(value<span class="signature-attributes">opt</span>, defUnit<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Return its numeric portion of a value</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Value to get its numeric portion</p></td></tr><tr><td class="name"><code>defUnit</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Default unit if value doesn't have one</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line896">line 896</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="parseDt"><span class="type-signature"></span>parseDt<span class="signature">(dt)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Parse datetime string as Javascript date object. Please visit <a href="https://day.js.org">dayjs</a> for valid formats and more infos</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>dt</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Datetime string</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line922">line 922</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="https://day.js.org">dayjs</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Javascript date object</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="parseDur"><span class="type-signature"></span>parseDur<span class="signature">(dur)</span><span class="type-signature"> → {number}</span></h3><div class="description"><p>Parse duration to its millisecond value. Use <a href="https://github.com/vercel/ms">ms</a> under the hood</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>dur</code></td><td class="type"><span class="param-type">number</span> |<wbr> <span class="param-type">string</span></td><td class="description last"><p>If string is given, parse this to its millisecond value. Otherwise returns as is</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line910">line 910</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="https://github.com/vercel/ms">ms</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="parseObject"><span class="type-signature"></span>parseObject<span class="signature">(input, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Parse an object and optionally normalize its values recursively. Use <a href="https://github.com/ladjs/dotenv-parse-variables">https://github.com/ladjs/dotenv-parse-variables</a> to parse values, so please have a visit to know how it works</p><p>If <code>options.parseValue</code> is <code>true</code>, any key ends with <code>Dur</code> and <code>Dt</code> will also be parsed as millisecond and Javascript date time accordingly.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>input</code></td><td class="type"><span class="param-type">Object</span> |<wbr> <span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>If string is given, parse it first using JSON.parse</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>silent</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>If <code>true</code> (default), exception are not thrown and silently ignored</p></td></tr><tr><td class="name"><code>parseValue</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, values will be parsed & normalized</p></td></tr><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If provided, use this language instead of the one in config</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line944">line 944</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li><a href="https://github.com/ladjs/dotenv-parse-variables">https://github.com/ladjs/dotenv-parse-variables</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="readAllConfigs"><span class="type-signature">(async) </span>readAllConfigs<span class="signature">(path)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Read all config files by path</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Base path to start looking config files</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line1104">line 1104</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="readConfig"><span class="type-signature">(async) </span>readConfig<span class="signature">(file, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Read and parse file as config object. Supported types: <code>.js</code> and <code>.json</code>. More supports can be added using plugin. <a href="https://github.com/ardhi/bajo-config">bajo-config</a> gives you additional supports for <code>.yml</code>, <code>.yaml</code> and <code>.toml</code> file</p><p>If file extension is <code>.*</code>, it will be auto detected and parsed accordingly</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>File to read and parse</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>ignoreError</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Any exception will be silently discarded</p></td></tr><tr><td class="name"><code>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If given, use this as the scope</p></td></tr><tr><td class="name"><code>pattern</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If given and auto detection is on (extension is <code>.*</code>), it will be used for instead the default one</p></td></tr><tr><td class="name"><code>globOptions</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p><a href="https://github.com/mrmlnc/fast-glob">fast-glob</a> options</p></td></tr><tr><td class="name"><code>defValue</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Default value to use if value returned empty</p></td></tr><tr><td class="name"><code>opts</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Parser setting</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line1028">line 1028</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="readJson"><span class="type-signature"></span>readJson<span class="signature">(file, thrownNotFound<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Read and parse json file</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>File to read</p></td></tr><tr><td class="name"><code>thrownNotFound</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, silently ignore if file is not found</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line1075">line 1075</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="resolvePath"><span class="type-signature"></span>resolvePath<span class="signature">(file, asFileUrl<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Resolve file name to filesystem's path. Windows path separator <code>\</code> is normalized to Unix's <code>/</code></p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>File to resolve</p></td></tr><tr><td class="name"><code>asFileUrl</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>Return as file URL format <code>file:///<name></code></p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line107">line 107</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="runHook"><span class="type-signature">(async) </span>runHook<span class="signature">(hookName, …args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array}</span></h3><div class="description"><p>Run named hook/event</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>hookName</code></td><td class="type"><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span></td><td class="attributes"></td><td class="description last"></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>Argument passed to the hook function</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line1132">line 1132</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Array of hook execution results</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="saveAsDownload"><span class="type-signature">(async) </span>saveAsDownload<span class="signature">(file, item, printSaved<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Save item as file in Bajo's download directory. That is a directory inside your Bajo plugin's data directory.</p><p>If file exists already, file will automatically be renamed incrementally.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>File name</p></td></tr><tr><td class="name"><code>item</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Item to save</p></td></tr><tr><td class="name"><code>printSaved</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Print info on screen</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line1165">line 1165</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Full file path</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">Bajo API</a><div class="mobile-nav-links"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/bajo" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/bajo" target="">Github</a></div><div class="navbar-item"><a id="" href="https://bajo.app" target="">Bajo</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:bajo:afterAll%257Bmethod%257D">bajo:afterAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBootComplete">bajo:afterBootComplete</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBuildCollection">bajo:afterBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterCollectHooks">bajo:afterCollectHooks</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeAll%257Bmethod%257D">bajo:beforeAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeBuildCollection">bajo:beforeBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:afterAppletRun">{ns}:afterAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:after%257Bmethod%257D">{ns}:after{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:beforeAppletRun">{ns}:beforeAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:before%257Bmethod%257D">{ns}:before{method}</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Helper_Bajo.html">Helper/Bajo</a></div><div class="sidebar-section-children"><a href="module-Helper_Base.html">Helper/Base</a></div><div class="sidebar-section-children"><a href="module-Lib.html">Lib</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TAppConfigHandler">TAppConfigHandler</a></div><div class="sidebar-section-children"><a href="global.html#TAppEnv">TAppEnv</a></div><div class="sidebar-section-children"><a href="global.html#TAppLib">TAppLib</a></div><div class="sidebar-section-children"><a href="global.html#TBajoDataType">TBajoDataType</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatResult">TBajoFormatResult</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatType">TBajoFormatType</a></div><div class="sidebar-section-children"><a href="global.html#TLogJson">TLogJson</a></div><div class="sidebar-section-children"><a href="global.html#TLogLevels">TLogLevels</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathPairs">TNsPathPairs</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathResult">TNsPathResult</a></div><div class="sidebar-section-children"><a href="global.html#TPrintOptions">TPrintOptions</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
|
|
8
|
+
</code></pre></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>pkgs</code></td><td class="type"><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span></td><td class="attributes"><repeatable><br></td><td class="description last"><p>One or more packages in format <code>{ns}:{packageName}</code>.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line609">line 609</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>See above.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span> |<wbr> <span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="init"><span class="type-signature">(async) </span>init<span class="signature">()</span></h3><div class="description"><p>Initialization:</p><ol><li>Building base config</li><li>Building plugins</li><li>Collect all config handler</li><li>Building extra config</li><li>Setup boot order</li><li>Boot loaded plugins</li><li>Attach exit handlers</li></ol></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line101">line 101</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="isEmptyDir"><span class="type-signature">(async) </span>isEmptyDir<span class="signature">(dir, filterFn)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Check whether a directory is empty or not. More info please <a href="https://github.com/gulpjs/empty-dir">check here</a>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>dir</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span></td><td class="description last"><p>Directory to check.</p></td></tr><tr><td class="name"><code>filterFn</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>Filter function to filter out files that cause false positives.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line655">line 655</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isLogInRange"><span class="type-signature"></span>isLogInRange<span class="signature">(level)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Check whether log level is within log's app current level.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>level</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Level to check. See <a href="global.html#TLogLevels">TLogLevels</a> for more.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line668">line 668</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isValidApp"><span class="type-signature"></span>isValidApp<span class="signature">(dir, returnPkg<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean|Object}</span></h3><div class="description"><p>Check whether directory is a valid Bajo app.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>dir</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>Directory to check.</p></td></tr><tr><td class="name"><code>returnPkg</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Set <code>true</code> to return its package.json content.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line696">line 696</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span> |<wbr> <span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="isValidPlugin"><span class="type-signature"></span>isValidPlugin<span class="signature">(dir, returnPkg<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean|Object}</span></h3><div class="description"><p>Check whether directory is a valid Bajo plugin.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>dir</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>Directory to check.</p></td></tr><tr><td class="name"><code>returnPkg</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Set <code>true</code> to return its package.json content.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line709">line 709</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span> |<wbr> <span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="join"><span class="type-signature"></span>join<span class="signature">(array, options)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Human friendly join array of items.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">Array.<any></span></td><td class="description last"><p>Array to join</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Object</span></td><td class="description last"><p>If provided and is a string, it will be used as separator.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>separator</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">', '</td><td class="description last"><p>Separator to use.</p></td></tr><tr><td class="name"><code>lastSeparator</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">and</td><td class="description last"><p>Text to use as the last separator.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line724">line 724</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="numUnit"><span class="type-signature"></span>numUnit<span class="signature">(value<span class="signature-attributes">opt</span>, defUnit<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Return its numeric portion of a value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Value to get its numeric portion.</p></td></tr><tr><td class="name"><code>defUnit</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">''</td><td class="description last"><p>Default unit if value doesn't have one.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line746">line 746</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="readAllConfigs"><span class="type-signature">(async) </span>readAllConfigs<span class="signature">(path, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Read all config files from path.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Base path to start looking config files.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line955">line 955</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Merged configuration object.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="readConfig"><span class="type-signature">(async) </span>readConfig<span class="signature">(file, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Read and parse file as config object. Supported types: <code>.js</code> and <code>.json</code>. More supports can be added using plugin. <a href="https://github.com/ardhi/bajo-config">bajo-config</a> gives you additional supports for <code>.yml</code>, <code>.yaml</code> and <code>.toml</code> file.</p><p>If file extension is <code>.*</code>, it will be auto detected and parsed accordingly</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>File to read and parse.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>ignoreError</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Any exception will be silently discarded.</p></td></tr><tr><td class="name"><code>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If given, use this as the scope.</p></td></tr><tr><td class="name"><code>pattern</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>If given and auto detection is on (extension is <code>.*</code>), it will be used for instead the default one.</p></td></tr><tr><td class="name"><code>defValue</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Default value to use if value returned empty.</p></td></tr><tr><td class="name"><code>parserOpts</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Parser setting.</p></td></tr><tr><td class="name"><code>globOpts</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p><a href="https://github.com/mrmlnc/fast-glob">fast-glob</a> options.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line770">line 770</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="readJson"><span class="type-signature"></span>readJson<span class="signature">(file, thrownNotFound<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h3><div class="description"><p>Read and parse json file.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>File to read.</p></td></tr><tr><td class="name"><code>thrownNotFound</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, silently ignore if file is not found.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line887">line 887</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="runHook"><span class="type-signature">(async) </span>runHook<span class="signature">(hookName, …args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array}</span></h3><div class="description"><p>Run named hook/event.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>hookName</code></td><td class="type"><span class="param-type"><a href="global.html#TNsPathPairs">TNsPathPairs</a></span></td><td class="attributes"></td><td class="description last"><p>Name of the hook to run.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">any</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>Argument passed to the hook function.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line983">line 983</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Array of hook execution results.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="saveAsDownload"><span class="type-signature">(async) </span>saveAsDownload<span class="signature">(file, item, printSaved<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Save item as file in Bajo's download directory. That is a directory inside your Bajo plugin's data directory.</p><p>If file exists already, file will automatically be renamed incrementally.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>File name.</p></td></tr><tr><td class="name"><code>item</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Item to save.</p></td></tr><tr><td class="name"><code>printSaved</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">true</td><td class="description last"><p>Print info on screen.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line1017">line 1017</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Full file path.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="toJson"><span class="type-signature"></span>toJson<span class="signature">(data, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Convert data to JSON string.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>data</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Data to convert to JSON string.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes"><optional><br></td><td class="default">{}</td><td class="description last"><p>Options.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>writeToFile</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>If true, write the JSON string to a file.</p></td></tr><tr><td class="name"><code>saveAsFile</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>The file path to save the JSON string if writeToFile is true.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="class_bajo.js.html">class/bajo.js</a>, <a href="class_bajo.js.html#line937">line 937</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>JSON string</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">Bajo API</a><div class="mobile-nav-links"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/bajo" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/bajo" target="">Github</a></div><div class="navbar-item"><a id="" href="https://bajo.app" target="">Bajo</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Cache.html">Cache</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div><div class="sidebar-section-children"><a href="Tools.html">Tools</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:bajo:afterAll%257Bmethod%257D">bajo:afterAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBootComplete">bajo:afterBootComplete</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBuildCollection">bajo:afterBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterCollectHooks">bajo:afterCollectHooks</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeAll%257Bmethod%257D">bajo:beforeAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeBuildCollection">bajo:beforeBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:after%257Bmethod%257D">{ns}:after{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:beforeAppletRun">{ns}:beforeAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:before%257Bmethod%257D">{ns}:before{method}</a></div><div class="sidebar-section-children"><a href="module-Helper%257Bns%257D_afterAppletRun.html">Helper{ns}:afterAppletRun</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div><div class="sidebar-section-children"><a href="module-Lib.html">Lib</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TAppConfigHandler">TAppConfigHandler</a></div><div class="sidebar-section-children"><a href="global.html#TAppEnv">TAppEnv</a></div><div class="sidebar-section-children"><a href="global.html#TBajoDataType">TBajoDataType</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatResult">TBajoFormatResult</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatType">TBajoFormatType</a></div><div class="sidebar-section-children"><a href="global.html#TLogJson">TLogJson</a></div><div class="sidebar-section-children"><a href="global.html#TLogLevels">TLogLevels</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathPairs">TNsPathPairs</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathResult">TNsPathResult</a></div><div class="sidebar-section-children"><a href="global.html#TPrintOptions">TPrintOptions</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
|