bajo 2.23.0 → 2.25.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.
Files changed (108) hide show
  1. package/.jsdoc.conf.json +2 -1
  2. package/class/app.js +220 -107
  3. package/class/bajo.js +257 -177
  4. package/class/base.js +85 -24
  5. package/class/cache.js +8 -16
  6. package/class/err.js +31 -10
  7. package/class/log.js +46 -38
  8. package/class/plugin.js +53 -30
  9. package/class/print.js +18 -15
  10. package/class/tools.js +17 -7
  11. package/docs/App.html +51 -1
  12. package/docs/Bajo.html +1 -1
  13. package/docs/Base.html +34 -1
  14. package/docs/Cache.html +1 -1
  15. package/docs/Err.html +2 -2
  16. package/docs/Log.html +2 -2
  17. package/docs/Main.html +3 -0
  18. package/docs/Plugin.html +1 -1
  19. package/docs/Print.html +1 -1
  20. package/docs/Tools.html +1 -1
  21. package/docs/class_app.js.html +222 -109
  22. package/docs/class_bajo.js.html +260 -179
  23. package/docs/class_base.js.html +87 -26
  24. package/docs/class_cache.js.html +10 -18
  25. package/docs/class_err.js.html +33 -12
  26. package/docs/class_log.js.html +48 -40
  27. package/docs/class_plugin.js.html +55 -32
  28. package/docs/class_print.js.html +20 -17
  29. package/docs/class_tools.js.html +19 -9
  30. package/docs/data/search.json +1 -1
  31. package/docs/global.html +22 -1
  32. package/docs/index.html +1 -1
  33. package/docs/index.js.html +53 -16
  34. package/docs/lib_applet-hook.js.html +328 -0
  35. package/docs/lib_config.js.html +167 -0
  36. package/docs/lib_helper.js.html +186 -192
  37. package/docs/module-Applet.html +3 -0
  38. package/docs/module-Helper.html +1 -8
  39. package/docs/module-Hook.html +1 -1
  40. package/docs/tutorial-01_WELCOME.html +3 -0
  41. package/docs/tutorial-02_GETTING_STARTED.html +125 -0
  42. package/docs/tutorial-03_USER_GUIDE.html +54 -0
  43. package/docs/tutorial-04_DEV_GUIDE.html +178 -0
  44. package/docs/tutorial-05_ECOSYSTEM.html +3 -0
  45. package/extend/bajo/intl/en-US.json +2 -1
  46. package/extend/bajo/intl/id.json +2 -1
  47. package/index.js +51 -14
  48. package/lib/applet-hook.js +325 -0
  49. package/lib/config.js +164 -0
  50. package/lib/helper.js +185 -191
  51. package/package.json +6 -2
  52. package/test/00-global-hooks.test.js +44 -0
  53. package/test/e2e/_run.js +19 -0
  54. package/test/e2e/e2e-applet-process.test.js +66 -0
  55. package/test/e2e/e2e-boot-process.test.js +62 -0
  56. package/test/e2e/e2e-hooks-process.test.js +68 -0
  57. package/test/integration/_setup.js +55 -0
  58. package/test/integration/aspect-01-boot-instance.test.js +24 -0
  59. package/test/integration/aspect-02-plugin-loading.test.js +24 -0
  60. package/test/integration/aspect-03-config-merge.test.js +27 -0
  61. package/test/integration/aspect-04-intl-loading.test.js +29 -0
  62. package/test/integration/aspect-05-cache-roundtrip.test.js +26 -0
  63. package/test/integration/aspect-06-log-file-save.test.js +28 -0
  64. package/test/integration/aspect-07-plugin-data-dir.test.js +25 -0
  65. package/test/integration/aspect-08-plugin-lookup.test.js +25 -0
  66. package/test/integration/aspect-09-config-formats.test.js +26 -0
  67. package/test/integration/aspect-10-hooks.test.js +38 -0
  68. package/test/unit/app.test.js +115 -0
  69. package/test/unit/applet-hook.test.js +10 -0
  70. package/test/unit/bajo.test.js +151 -0
  71. package/test/unit/base.test.js +90 -0
  72. package/test/unit/cache.test.js +89 -0
  73. package/test/unit/config.test.js +14 -0
  74. package/test/unit/err.test.js +57 -0
  75. package/test/unit/helper.test.js +116 -0
  76. package/test/unit/index.test.js +40 -0
  77. package/test/unit/log.test.js +84 -0
  78. package/test/unit/plugin.test.js +95 -0
  79. package/test/unit/print.test.js +72 -0
  80. package/test/unit/tools.test.js +29 -0
  81. package/wiki/CHANGES.md +10 -0
  82. package/wiki/tutorials/01_WELCOME.md +18 -0
  83. package/wiki/tutorials/02_GETTING_STARTED.md +366 -0
  84. package/wiki/tutorials/03_USER_GUIDE.md +262 -0
  85. package/wiki/tutorials/04_DEV_GUIDE.md +386 -0
  86. package/wiki/tutorials/05_ECOSYSTEM.md +95 -0
  87. package/wiki/tutorials/tutorials.json +17 -0
  88. package/docs/lib_hook.js.html +0 -231
  89. package/docs/module-Lib.html +0 -3
  90. package/lib/hook.js +0 -228
  91. package/test/app.test.js +0 -183
  92. package/test/bajo.test.js +0 -124
  93. package/test/base.test.js +0 -75
  94. package/test/cache.test.js +0 -94
  95. package/test/e2e.test.js +0 -137
  96. package/test/err.test.js +0 -73
  97. package/test/helper.test.js +0 -39
  98. package/test/import-module.test.js +0 -138
  99. package/test/integration.test.js +0 -218
  100. package/test/log.test.js +0 -119
  101. package/test/plugin.test.js +0 -116
  102. package/test/print.test.js +0 -100
  103. package/test/tools.test.js +0 -38
  104. package/wiki/CONFIG.md +0 -36
  105. package/wiki/DEV_GUIDE.md +0 -3
  106. package/wiki/ECOSYSTEM.md +0 -93
  107. package/wiki/GETTING-STARTED.md +0 -356
  108. package/wiki/USER-GUIDE.md +0 -256
package/docs/Bajo.html CHANGED
@@ -1,3 +1,3 @@
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="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-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-Hook.html">Hook</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#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="description"><p>Constructor.</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>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#line79">line 79</a></li></ul></dd></div></dl></div><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="alias"><span class="type-signature"></span>alias<span class="type-signature"> :string</span></h3><div class="description"><p>Alias</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</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#line92">line 92</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="config"><span class="type-signature"></span>config<span class="type-signature"> :Bajo.TObject</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">Bajo.<wbr>TObject</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#line106">line 106</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><h3 class="name has-anchor" id="hooks"><span class="type-signature"></span>hooks<span class="type-signature"> :Array.&lt;Bajo.THook></span></h3><div class="description"><p>Hooks container.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;Bajo.THook></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#line113">line 113</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="whiteSpace"><span class="type-signature"></span>whiteSpace<span class="type-signature"> :Array.&lt;string></span></h3><div class="description"><p>White space characters</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;string></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#line98">line 98</a></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"> &rarr; {TNsPathResult}</span></h3><div class="description"><p>Break name to its namespace &amp; 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">TNsPathPairs</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">&lt;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#line201">line 201</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">TNsPathResult</span></dd></dl></div><h3 class="name has-anchor" id="breakNsPathFromFile"><span class="type-signature"></span>breakNsPathFromFile<span class="signature">(options)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Break file path to its namespace &amp; 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 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 object</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>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>File path to break</p></td></tr><tr><td class="name"><code>dir</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Base directory to remove from file path</p></td></tr><tr><td class="name"><code>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Namespace to use. If not provided, will be extracted from file path</p></td></tr><tr><td class="name"><code>suffix</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Suffix to remove from file path</p></td></tr><tr><td class="name"><code>getType</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Whether to extract type from file 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#line155">line 155</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Namespace and path information</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</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"> &rarr; {Array.&lt;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">&lt;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">&lt;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.&lt;string></span></td><td class="attributes">&lt;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">&lt;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#line261">line 261</a></li></ul></dd></div></dl><div class="method-member-container flex w-100 overflow-auto mt-20"><strong>Fires:</strong><ul><li>bajo:beforeBuildCollection</li><li>bajo:afterBuildCollection</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:&nbsp;</dt><dd><span class="param-type">Array.&lt;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"> &rarr; {TNsPathPairs}</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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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#line187">line 187</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:&nbsp;</dt><dd><span class="param-type">TNsPathPairs</span></dd></dl></div><h3 class="name has-anchor" id="callHandler"><span class="type-signature">(async) </span>callHandler<span class="signature">(name, &hellip;args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {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">TNsPathPairs</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">&lt;optional><br>&lt;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#line316">line 316</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:&nbsp;</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"> &rarr; {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">&lt;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.&lt;string></span></td><td class="attributes">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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#line362">line 362</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Data type to use. See TBajoDataType 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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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#line462">line 462</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:&nbsp;</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"> &rarr; {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 TBajoFormatType 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">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Value's data type. See TBajoDataType 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">&lt;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">&lt;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">&lt;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#line434">line 434</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:&nbsp;</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"> &rarr; {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">&lt;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#line872">line 872</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:&nbsp;</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"> &rarr; {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">&lt;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#line886">line 886</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:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="fromYaml"><span class="type-signature"></span>fromYaml<span class="signature">(text, options)</span><span class="type-signature"> &rarr; {object}</span></h3><div class="description"><p>Parse YAML text</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>text</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Text to be parsed</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>Options 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#line899">line 899</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Parsed object</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">object</span></dd></dl></div><h3 class="name has-anchor" id="fromYml"><span class="type-signature"></span>fromYml<span class="signature">(text, options)</span><span class="type-signature"> &rarr; {object}</span></h3><div class="description"><p>Parse YML text. Alias for fromYaml.</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>text</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Text to be parsed</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>Options 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#line913">line 913</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Parsed object</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">object</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"> &rarr; {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">&lt;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#line517">line 517</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:&nbsp;</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, withGlobalDir<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Get 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"></td><td class="default"></td><td class="description last"><p>Package name to find.</p></td></tr><tr><td class="name"><code>withGlobalDir</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">true</td><td class="description last"><p>Whether to include the global module directory.</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#line532">line 532</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:&nbsp;</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"> &rarr; {TBajoFormatResult}</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">&lt;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">&lt;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">&lt;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#line415">line 415</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:&nbsp;</dt><dd><span class="param-type">TBajoFormatResult</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-Helper.html#.importModule">module:Helper.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#line556">line 556</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-Helper.html#.importModule">module:Helper.importModule</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="importPkg"><span class="type-signature">(async) </span>importPkg<span class="signature">(&hellip;pkgs)</span><span class="type-signature"> &rarr; {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 `javascript const { importPkg } from this.app.bajo const [delay, chalk] = await importPkg('bajo:delay', 'bajo:chalk')</p><p>await delay(1000) ... `</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>pkgs</code></td><td class="type"><span class="param-type">TNsPathPairs</span></td><td class="attributes">&lt;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#line587">line 587</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:&nbsp;</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#line130">line 130</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="isLogInRange"><span class="type-signature"></span>isLogInRange<span class="signature">(level)</span><span class="type-signature"> &rarr; {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 TLogLevels 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#line631">line 631</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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">&lt;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#line659">line 659</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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">&lt;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#line672">line 672</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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.&lt;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">&lt;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">&lt;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#line687">line 687</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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">&lt;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">&lt;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#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:&nbsp;</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"> &rarr; {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">&lt;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#line976">line 976</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:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="readAsConfig"><span class="type-signature"></span>readAsConfig<span class="signature">(input, exts<span class="signature-attributes">opt</span>, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Object|Array|null}</span></h3><div class="description"><p>Read config using all registered config handlers. The first handler that returns a valid object or array will be used.</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">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The input string to be processed by the config handlers.</p></td></tr><tr><td class="name"><code>exts</code></td><td class="type"><span class="param-type">Array.&lt;string></span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Optional array of extensions to filter the config handlers. If provided, only handlers with matching extensions will be used.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options to be passed to the config handlers.</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#line1058">line 1058</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The result from the first successful config handler, or null if none succeed.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span> |<wbr> <span class="param-type">Array</span> |<wbr> <span class="param-type">null</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"> &rarr; {Object}</span></h3><div class="description"><p>Read and parse file as config object. Supported types: <code>.js</code>, <code>.json</code> and <code>.yml/.yaml</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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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#line733">line 733</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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">&lt;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#line851">line 851</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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, &hellip;args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {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">TNsPathPairs</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">&lt;optional><br>&lt;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#line1004">line 1004</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:&nbsp;</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"> &rarr; {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">&lt;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#line1038">line 1038</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:&nbsp;</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"> &rarr; {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">&lt;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">&lt;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">&lt;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#line927">line 927</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:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="toYaml"><span class="type-signature"></span>toYaml<span class="signature">(object, options)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Convert object to YAML 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 class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>object</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>Object to be converted</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>Options 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#line944">line 944</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>YAML string</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="toYml"><span class="type-signature"></span>toYml<span class="signature">(object, options)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Convert object to YML string. Alias for toYaml.</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>object</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>Object to be converted</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>Options 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#line963">line 963</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>YML string</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h2 id="type-definitions" class="subsection-title has-anchor">Type Definitions</h2><h3 class="name has-anchor" id=".TDataType">TDataType</h3><div class="description"><p>Supported data types.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>0</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>string</p></td></tr><tr><td class="name"><code>1</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>float</p></td></tr><tr><td class="name"><code>2</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>double</p></td></tr><tr><td class="name"><code>3</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>integer</p></td></tr><tr><td class="name"><code>4</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>smallint</p></td></tr><tr><td class="name"><code>5</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>date</p></td></tr><tr><td class="name"><code>6</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>time</p></td></tr><tr><td class="name"><code>7</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>datetime</p></td></tr><tr><td class="name"><code>8</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>array</p></td></tr><tr><td class="name"><code>9</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>object</p></td></tr><tr><td class="name"><code>10</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>auto</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="lib_helper.js.html">lib/helper.js</a>, <a href="lib_helper.js.html#line736">line 736</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TFormatResult">TFormatResult</h3><div class="description"><p>Object returned by <a href="Bajo.html#getUnitFormat">bajo:getUnitFormat</a>.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>unitSys</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Unit system.</p></td></tr><tr><td class="name"><code>format</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Format 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#line48">line 48</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="Bajo.html#getUnitFormat">Bajo#getUnitFormat</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TFormatType">TFormatType</h3><div class="description"><p>General format types,</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>0</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>speed</p></td></tr><tr><td class="name"><code>1</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>distance</p></td></tr><tr><td class="name"><code>2</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>area</p></td></tr><tr><td class="name"><code>3</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>degree</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="lib_helper.js.html">lib/helper.js</a>, <a href="lib_helper.js.html#line755">line 755</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TNsPathPairs">TNsPathPairs</h3><div class="description"><p>Name based <code>{ns}:{path}</code> format.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</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#line38">line 38</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>TNsPathResult</li><li><a href="Bajo.html#buildNsPath">Bajo#buildNsPath</a></li><li><a href="Bajo.html#breakNsPath">Bajo#breakNsPath</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TNsPathResult">TNsPathResult</h3><div class="description"><p>Object returned by <a href="Bajo.html#breakNsPath">bajo:breakNsPath</a>.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th>Attributes</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"></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">&lt;optional><br></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">&lt;optional><br></td><td class="description last"><p>Sub of 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"></td><td class="description last"><p>Path without query string or hash</p></td></tr><tr><td class="name"><code>fullPath</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>Full path, including query string and hash</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#line58">line 58</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>TNsPathPairs</li><li><a href="Bajo.html#buildNsPath">Bajo#buildNsPath</a></li><li><a href="Bajo.html#breakNsPath">Bajo#breakNsPath</a></li></ul></dd></div></dl></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-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-Hook.html">Hook</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#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>
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-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-01_WELCOME.html">Welcome</a></div><div class="sidebar-section-children"><a href="tutorial-02_GETTING_STARTED.html">Getting Started</a></div><div class="sidebar-section-children"><a href="tutorial-03_USER_GUIDE.html">User Guide</a></div><div class="sidebar-section-children"><a href="tutorial-04_DEV_GUIDE.html">Developer Guide</a></div><div class="sidebar-section-children"><a href="tutorial-05_ECOSYSTEM.html">Ecosystem</a></div></div><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="Main.html">Main</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-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-Applet.html">Applet</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div><div class="sidebar-section-children"><a href="module-Hook.html">Hook</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#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div><div class="sidebar-section-children"><a href="global.html#package%25C2%25B7json">package·json</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 plugin. The main engine. The special plugin that controls the app's boot process and makes sure all other plugins work nicely.</p><p>Don't create your own instance of this class or <a href="App.html">App</a> class. Instead, use the <a href="global.html#boot">boot</a> process.</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="description"><p>Constructor.</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>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#line89">line 89</a></li></ul></dd></div></dl></div><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="alias"><span class="type-signature"></span>alias<span class="type-signature"> :string</span></h3><div class="description"><p>Alias. Read-only</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">'bajo'</li></ul></dd></div><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#line103">line 103</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="config"><span class="type-signature"></span>config<span class="type-signature"> :<a href="Bajo.html#.TConfig">Bajo.TConfig</a></span></h3><div class="description"><p>Configuration object</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type"><a href="Bajo.html#.TConfig">Bajo.<wbr>TConfig</a></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#line116">line 116</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><h3 class="name has-anchor" id="hooks"><span class="type-signature"></span>hooks<span class="type-signature"> :Array.&lt;Bajo.THook></span></h3><div class="description"><p>Hooks container. This is where all hooks definition are stored.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;Bajo.THook></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#line122">line 122</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="whiteSpace"><span class="type-signature"></span>whiteSpace<span class="type-signature"> :Array.&lt;string></span></h3><div class="description"><p>Array of white space characters. Used to trim strings</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;string></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#line109">line 109</a></li></ul></dd></div></dl><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="bootApp"><span class="type-signature">(async) </span>bootApp<span class="signature">()</span></h3><div class="description"><p>Bajo boot process. This method is called by the <a href="App.html">App</a> class during the app's boot process:</p><ol><li>Building Bajo's <a href="module-Helper.html#.buildBaseConfig">base configuration</a></li><li>Collect all <a href="module-Helper.html#.collectConfigHandlers">config handlers</a> from all loaded plugins</li><li>Build <a href="module-Helper.html#.buildConfig">configuration</a> object</li><li><a href="module-Helper.html#.buildPlugins">Building plugins</a> listed in <code>package.json</code> or <code>.plugins</code> file</li><li>Determining the <a href="module-Helper.html#.bootOrder">boot order</a></li><li>Ensure the <a href="module-Helper.html#.checkNameAliases">uniqueness</a> of all plugins' name and alias</li><li>Ensure all plugins <a href="module-Helper.html#.checkDependencies">dependencies</a> are met</li><li>Collect all <a href="module-Helper.html#.collectHooks">hooks</a> from all loaded plugins</li><li><a href="module-Helper.html#.runPlugins">Run all plugins</a> according to the boot order</li><li>And finally attaching all <a href="module-Helper.html#.exitHandler">exit handlers</a> it could find</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#line141">line 141</a></li></ul></dd></div></dl><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"> &rarr; {<a href="Bajo.html#.TNsPathResult">Bajo.TNsPathResult</a>}</span></h3><div class="description"><p>Break <code>name</code> to their components.</p><p>If path starts with <code>//</code>, e.g. name is <code>https://example.com</code>, it will be treated as a URL and returned as an object with only <code>path</code> property filled with the original name.</p><p>If query string is present in the path, it will be parsed and returned as an object with <code>qs</code> property containing the parsed query string.</p><p>If path contains parameters in the format of <code>:key|value</code> or <code>{key|value}</code>, they will be extracted and returned as an object with <code>params</code> property containing the extracted parameters.</p><p>This method is one of the most used method in Bajo. It is because every files, names, resources, and even commands are all identified by their namespace and 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>name</code></td><td class="type"><span class="param-type"><a href="Bajo.html#.TNsPathPairs">Bajo.<wbr>TNsPathPairs</a></span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>Name in format <code>ns:path</code></p></td></tr><tr><td class="name"><code>checkNs</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">true</td><td class="description last"><p>If <code>true</code> (default), check if the namespace exists in the app. If not, throw an 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#line227">line 227</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type"><a href="Bajo.html#.TNsPathResult">Bajo.<wbr>TNsPathResult</a></span></dd></dl></div><h3 class="name has-anchor" id="breakNsPathFromFile"><span class="type-signature"></span>breakNsPathFromFile<span class="signature">(options)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Break file path to its namespace &amp; 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 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 object</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>file</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>File path to break</p></td></tr><tr><td class="name"><code>dir</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Base directory to remove from file path</p></td></tr><tr><td class="name"><code>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Namespace to use. If not provided, will be extracted from file path</p></td></tr><tr><td class="name"><code>suffix</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Suffix to remove from file path</p></td></tr><tr><td class="name"><code>getType</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Whether to extract type from file 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#line169">line 169</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Namespace and path information</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="buildCollections"><span class="type-signature">(async) </span>buildCollections<span class="signature">(options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Array.&lt;Object>}</span></h3><div class="description"><p>Method to transform config's array or object into a collection of objects with uniformed structure. This is useful to build a collection of items from config's array or object, e.g. a collection of commands, routes, etc.</p><p>You typically also provide a <code>handler</code> function to transform each item in the collection. The handler function will be called with an object containing the following keys:</p><ul><li><code>item</code>: the current item in the collection</li><li><code>index</code>: the index of the current item in the collection</li><li><code>cfg</code>: the entire config object</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>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;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>ns</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'bajo'</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">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Function to transform each item while building</p></td></tr><tr><td class="name"><code>dupChecks</code></td><td class="type"><span class="param-type">Array.&lt;string></span></td><td class="attributes">&lt;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">&lt;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 item 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#line297">line 297</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-Hook.html#.%257Bns%257D:beforeBuildCollection">module:Hook.{ns}:beforeBuildCollection</a></li><li><a href="module-Hook.html#.%257Bns%257D:afterBuildCollection">module:Hook.{ns}:afterBuildCollection</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returned collection of objects</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array.&lt;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"> &rarr; {TNsPathPairs}</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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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#line201">line 201</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:&nbsp;</dt><dd><span class="param-type">TNsPathPairs</span></dd></dl></div><h3 class="name has-anchor" id="callHandler"><span class="type-signature">(async) </span>callHandler<span class="signature">(name, &hellip;args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;*>}</span></h3><div class="description"><p>Calling a function handler in any plugins:</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">TNsPathPairs</span> |<wbr> <span class="param-type"><a href="Plugin.html">Plugin</a></span> |<wbr> <span class="param-type">function</span> |<wbr> <span class="param-type">Object</span></td><td class="attributes"></td><td class="description last"><p>Method's name, plugin instance, function handler or plain object. See above for details</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes">&lt;optional><br>&lt;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#line350">line 350</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:&nbsp;</dt><dd><span class="param-type">Promise.&lt;*></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"> &rarr; {*}</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">&lt;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.&lt;string></span></td><td class="attributes">&lt;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">&lt;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">&lt;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">&lt;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">*</span></td><td class="attributes">&lt;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#line396">line 396</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">*</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"> &rarr; {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">*</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">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Data type to use. See TBajoDataType 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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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#line495">line 495</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:&nbsp;</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"> &rarr; {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 TBajoFormatType for acceptable values.</p></td></tr><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">*</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">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Value's data type. See TBajoDataType 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">&lt;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">&lt;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">&lt;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#line468">line 468</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:&nbsp;</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)</span><span class="type-signature"> &rarr; {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.readFromFile</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>Ignored for this method. Always read from file.</p></td></tr><tr><td class="name"><code>options.throwNotFound</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, throw exception if file is not found</p></td></tr><tr><td class="name"><code>options.defValue</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes">&lt;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>options.parserOpts</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options to be passed if file exports a 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#line890">line 890</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:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="fromJson"><span class="type-signature">(async) </span>fromJson<span class="signature">(text, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Parse JSON string or 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>text</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>Text to be parsed or file path to be read if <code>options.readFromFile</code> is <code>true</code></p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span> |<wbr> <span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options object. If a boolean is provided, it will be treated as <code>options.readFromFile</code></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>readFromFile</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, <code>text</code> is treated as a file path</p></td></tr><tr><td class="name"><code>throwNotFound</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, throw exception if file is not found</p></td></tr><tr><td class="name"><code>defValue</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes">&lt;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">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options to be passed to <code>JSON.parse()</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#line913">line 913</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="Bajo.html#toJson">Bajo#toJson</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Parsed object.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="fromYaml"><span class="type-signature">(async) </span>fromYaml<span class="signature">(text, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {object}</span></h3><div class="description"><p>Parse YAML text or read and parse YAML 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>text</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>Text to be parsed or file path to be read if <code>options.readFromFile</code> is <code>true</code></p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span> |<wbr> <span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options object. If a boolean is provided, it will be treated as <code>options.readFromFile</code></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>readFromFile</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, <code>text</code> is treated as a file path</p></td></tr><tr><td class="name"><code>throwNotFound</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, throw exception if file is not found</p></td></tr><tr><td class="name"><code>parserOpts</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options to be passed to <code>YAML.load()</code></p></td></tr><tr><td class="name"><code>defValue</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Default value to use if value returned empty</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#line936">line 936</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="Bajo.html#toYaml">Bajo#toYaml</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Parsed object</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">object</span></dd></dl></div><h3 class="name has-anchor" id="fromYml"><span class="type-signature">(async) </span>fromYml<span class="signature">(text, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {object}</span></h3><div class="description"><p>Parse YML text or read and parse YML file. Alias for <a href="Bajo.html#fromYaml">Bajo#fromYaml</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>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>text</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>Text to be parsed or file path to be read if <code>options.readFromFile</code> is <code>true</code></p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span> |<wbr> <span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options object. If a boolean is provided, it will be treated as <code>options.readFromFile</code></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>readFromFile</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, <code>text</code> is treated as a file path</p></td></tr><tr><td class="name"><code>throwNotFound</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, throw exception if file is not found</p></td></tr><tr><td class="name"><code>defValue</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes">&lt;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">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options to be passed to <code>YAML.load()</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#line959">line 959</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="Bajo.html#toYml">Bajo#toYml</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Parsed object</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">object</span></dd></dl></div><h3 class="name has-anchor" id="getDownloadDir"><span class="type-signature"></span>getDownloadDir<span class="signature">()</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Get download directory. If doesn't exist, it will be created automatically.</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#line1099">line 1099</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Absolute path to the download directory</p></div><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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">&lt;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#line549">line 549</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:&nbsp;</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, withGlobalDir<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Get 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"></td><td class="default"></td><td class="description last"><p>Package name to find.</p></td></tr><tr><td class="name"><code>withGlobalDir</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">true</td><td class="description last"><p>Whether to include the global module directory.</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#line564">line 564</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:&nbsp;</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"> &rarr; {TBajoFormatResult}</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">&lt;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">&lt;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">&lt;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#line449">line 449</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:&nbsp;</dt><dd><span class="param-type">TBajoFormatResult</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-Helper.html#.importModule">module:Helper.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#line588">line 588</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-Helper.html#.importModule">module:Helper.importModule</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="importPkg"><span class="type-signature">(async) </span>importPkg<span class="signature">(&hellip;pkgs)</span><span class="type-signature"> &rarr; {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 `javascript const { importPkg } from this.app.bajo const [delay, chalk] = await importPkg('bajo:delay', 'bajo:chalk')</p><p>await delay(1000) ... `</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>pkgs</code></td><td class="type"><span class="param-type">TNsPathPairs</span></td><td class="attributes">&lt;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#line619">line 619</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:&nbsp;</dt><dd><span class="param-type">Object</span> |<wbr> <span class="param-type">Array</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"> &rarr; {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 TLogLevels 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#line662">line 662</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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">&lt;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#line690">line 690</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {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">&lt;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#line703">line 703</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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">(input, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Return human friendly joined 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>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">Array.&lt;*></span></td><td class="attributes"></td><td class="default"></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="attributes">&lt;optional><br></td><td class="default">{}</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">&lt;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">&lt;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#line718">line 718</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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"> &rarr; {string}</span></h3><div class="description"><p>Get numeric portion and its unit from a 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>value</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;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">&lt;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#line739">line 739</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="parseWithConfig"><span class="type-signature"></span>parseWithConfig<span class="signature">(input, exts<span class="signature-attributes">opt</span>, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Object|Array|null}</span></h3><div class="description"><p>Parse <code>input</code> using all registered config handlers. The first handler that returns a valid object or array will be used.</p><p>Use this method if you want to parse a text <code>input</code> that can be in any format supported by the registered config handlers.</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">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The input string to be processed by the config handlers.</p></td></tr><tr><td class="name"><code>exts</code></td><td class="type"><span class="param-type">Array.&lt;string></span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Optional array of extensions to filter the config handlers. If provided, only handlers with matching extensions will be used.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options to be passed to the config handlers.</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#line1138">line 1138</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The result from the first successful config handler, or null if none succeed.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span> |<wbr> <span class="param-type">Array</span> |<wbr> <span class="param-type">null</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"> &rarr; {Object}</span></h3><div class="description"><p>Read all forms of configuration files from file path.</p><p>Internally, it will call <a href="Bajo.html#readConfig">Bajo#readConfig</a> twice, first for the default config file and second for the environment based config file. Then it will merge both results using <code>defaultsDeep</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>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">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options. See <a href="Bajo.html#readConfig">Bajo#readConfig</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#line1039">line 1039</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:&nbsp;</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"> &rarr; {Object}</span></h3><div class="description"><p>Read and parse file as config object. Supported types: <code>.js</code>, <code>.json</code> and <code>.yml/.yaml</code>. More supports can be added using plugin. <a href="https://ardhi.github.io/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">&lt;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">&lt;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">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If provided, scoped to this namespace. Otherwise, the running plugin's namespace will be used</p></td></tr><tr><td class="name"><code>baseNs</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If provided, it will be used as the base namespace for extending config from other plugins</p></td></tr><tr><td class="name"><code>extend</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Array.&lt;string></span> |<wbr> <span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If provided, it will be used as the base namespace for extending config from other plugins. Set to <code>false</code> to disable extending</p></td></tr><tr><td class="name"><code>checkOverride</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If <code>true</code> and <code>baseNs</code> is provided or <code>extend</code> is not <code>false</code>, check for override config in main plugin</p></td></tr><tr><td class="name"><code>merge</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If <code>true</code>, config from other plugins will be merged into the original config. Otherwise, it will perform a deep defaults merge</p></td></tr><tr><td class="name"><code>pattern</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If provided and auto detection is on (extension is <code>.*</code>), it will be used for instead the auto generated 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">&lt;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">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Parser options</p></td></tr><tr><td class="name"><code>globOpts</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;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#line767">line 767</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</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, &hellip;args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Array}</span></h3><div class="description"><p>Run named <a href="module-Hook.html">module:Hook</a>.</p><p>If no hook found with the given name, it will return an empty array. If a hook has <code>noWait</code> set to <code>true</code>, it will not wait for the hook to finish and will not return its result.</p><blockquote><p><strong>Note</strong>: Even though this method returns a result, it is not recommended to use the result for any purpose. Use the result only for debugging or logging purposes. Hooks are designed to be fast, lightweight and mutate arguments given to them so that the next hook can benefit from the changes.</p></blockquote></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">TNsPathPairs</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">&lt;optional><br>&lt;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#line1073">line 1073</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:&nbsp;</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"> &rarr; {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">&lt;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#line1119">line 1119</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:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="toJson"><span class="type-signature">(async) </span>toJson<span class="signature">(data, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;(string|void)>}</span></h3><div class="description"><p>Convert data to JSON string, optionally write to file if <code>options.writeToFile</code> is provided.</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> |<wbr> <span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options object. If a string is provided, it will be treated as <code>options.writeToFile</code></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">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If not empty, write result to this file path instead of returning it as string</p></td></tr><tr><td class="name"><code>parserOpts</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options for <code>JSON.stringify()</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#line975">line 975</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="Bajo.html#fromJson">Bajo#fromJson</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>JSON string or void if written to file</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;(string|void)></span></dd></dl></div><h3 class="name has-anchor" id="toYaml"><span class="type-signature">(async) </span>toYaml<span class="signature">(object, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;(string|void)>}</span></h3><div class="description"><p>Convert object to YAML string, optionally write to file if <code>options.writeToFile</code> is provided.</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>object</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes"></td><td class="description last"><p>Object to be converted</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span> |<wbr> <span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Options object. If a string is provided, it will be treated as <code>options.writeToFile</code></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">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If not empty, write result to this file path instead of returning it as string</p></td></tr><tr><td class="name"><code>parserOpts</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options for <code>YAML.dump()</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#line999">line 999</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="Bajo.html#fromYaml">Bajo#fromYaml</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>YAML string or void if written to file</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;(string|void)></span></dd></dl></div><h3 class="name has-anchor" id="toYml"><span class="type-signature">(async) </span>toYml<span class="signature">(object, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;(string|void)>}</span></h3><div class="description"><p>Convert object to YML string, optionally write to file if <code>options.writeToFile</code> is provided. Alias for <a href="Bajo.html#toYaml">Bajo#toYaml</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>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>object</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes"></td><td class="description last"><p>Object to be converted</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">object</span> |<wbr> <span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Options object. If a string is provided, it will be treated as <code>options.writeToFile</code></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">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>If not empty, write result to this file path instead of returning it as string</p></td></tr><tr><td class="name"><code>parserOpts</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Options for <code>YAML.dump()</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#line1023">line 1023</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="Bajo.html#fromYml">Bajo#fromYml</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>YAML string or void if written to file</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;(string|void)></span></dd></dl></div><h2 id="type-definitions" class="subsection-title has-anchor">Type Definitions</h2><h3 class="name has-anchor" id=".TConfig">TConfig</h3><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><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>env</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>Environment name (<code>dev</code> or <code>prod</code>)</p></td></tr><tr><td class="name"><code>runtime</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Runtime configuration</p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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>noWarning</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, Bajo will not show any warning messages. Default is <code>false</code></p></td></tr></tbody></table></div></td></tr><tr><td class="name"><code>log</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Logging configuration</p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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>timeTaken</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, Bajo will log the time taken for each operation. Default is <code>false</code></p></td></tr><tr><td class="name"><code>dateFormat</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'YYYY-MM-DDTHH:mm:ss.SSS'</td><td class="description last"><p>Date format for logging</p></td></tr><tr><td class="name"><code>useUtc</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, Bajo will use UTC instead of local time for logging. Default is <code>false</code></p></td></tr><tr><td class="name"><code>pretty</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, Bajo will use pretty logging format. Default is <code>false</code></p></td></tr><tr><td class="name"><code>applet</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>Whether to log when in applet mode or not. Default is <code>false</code></p></td></tr><tr><td class="name"><code>save</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>Whether to save logs to file. Default is <code>false</code></p></td></tr><tr><td class="name"><code>rotation</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Log rotation configuration, used only if <code>log.save</code> is <code>true</code></p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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>cycle</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'none'</td><td class="description last"><p>Rotation cycle (<code>none</code>, <code>daily</code>, <code>weekly</code>, <code>monthly</code>). Default is <code>none</code></p></td></tr><tr><td class="name"><code>compressOld</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">true</td><td class="description last"><p>Whether to compress old logs. Default is <code>true</code></p></td></tr><tr><td class="name"><code>byPlugin</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>Whether to rotate logs by plugin. Default is <code>false</code></p></td></tr><tr><td class="name"><code>retain</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">5</td><td class="description last"><p>Number of old logs to retain. Default is <code>5</code></p></td></tr></tbody></table></div></td></tr></tbody></table></div></td></tr><tr><td class="name"><code>dump</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Dump configuration</p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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>depth</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">2</td><td class="description last"><p>Depth of object to dump. Default is <code>2</code></p></td></tr><tr><td class="name"><code>compact</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If <code>true</code>, Bajo will dump objects in compact format. Default is <code>false</code></p></td></tr><tr><td class="name"><code>colors</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">true</td><td class="description last"><p>If <code>true</code>, Bajo will dump objects with colors. Default is <code>true</code></p></td></tr><tr><td class="name"><code>breakLength</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">80</td><td class="description last"><p>Break length for dumping objects. Default is <code>80</code></p></td></tr><tr><td class="name"><code>caller</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">true</td><td class="description last"><p>If <code>true</code>, Bajo will dump the caller of the dump function. Default is <code>true</code></p></td></tr><tr><td class="name"><code>frame</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Display frame configuration for dumping objects</p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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>titleAlignment</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'center'</td><td class="description last"><p>Title alignment for dumping objects. Default is <code>center</code></p></td></tr><tr><td class="name"><code>padding</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">1</td><td class="description last"><p>Padding for dumping objects. Default is <code>1</code></p></td></tr><tr><td class="name"><code>margin</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">1</td><td class="description last"><p>Margin for dumping objects. Default is <code>1</code></p></td></tr><tr><td class="name"><code>borderStyle</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'round'</td><td class="description last"><p>Border style for dumping objects. Default is <code>round</code></p></td></tr></tbody></table></div></td></tr></tbody></table></div></td></tr><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Default language for internationalization. Default is the system language or <code>en-US</code> if not available</p></td></tr><tr><td class="name"><code>intl</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Internationalization configuration</p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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>supported</code></td><td class="type"><span class="param-type">Array.&lt;string></span></td><td class="attributes">&lt;optional><br></td><td class="default">['en-US', 'id']</td><td class="description last"><p>Supported languages. Default is <code>en-US</code> and <code>id</code>. Add more if you want it</p></td></tr><tr><td class="name"><code>fallback</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'en-US'</td><td class="description last"><p>Fallback language if the requested language is not supported. Default is <code>en-US</code></p></td></tr><tr><td class="name"><code>lookupOrder</code></td><td class="type"><span class="param-type">Array.&lt;string></span></td><td class="attributes">&lt;optional><br></td><td class="default">[]</td><td class="description last"><p>Lookup order for languages. Default is empty array</p></td></tr><tr><td class="name"><code>format</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Formatting configuration</p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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">&lt;optional><br></td><td class="default">''</td><td class="description last"><p>Value to use for empty values. Default is empty string</p></td></tr><tr><td class="name"><code>datetime</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat">Intl.DateTimeFormat</a> for more information</p></td></tr><tr><td class="name"><code>date</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat">Intl.DateTimeFormat</a> for more information</p></td></tr><tr><td class="name"><code>time</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat">Intl.DateTimeFormat</a> for more information</p></td></tr><tr><td class="name"><code>float</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat">Intl.NumberFormat</a> for more information</p></td></tr><tr><td class="name"><code>double</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat">Intl.NumberFormat</a> for more information</p></td></tr><tr><td class="name"><code>smallint</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat">Intl.NumberFormat</a> for more information</p></td></tr><tr><td class="name"><code>integer</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>See <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat">Intl.NumberFormat</a> for more information</p></td></tr></tbody></table></div></td></tr><tr><td class="name"><code>unitSys</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Unit system configuration. Object with keys as language codes and values as unit systems. Supported values are <code>metric</code>, <code>imperial</code> and <code>nautical</code></p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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>en-US</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'imperial'</td><td class="description last"><p>Unit system for <code>en-US</code>. Default is <code>imperial</code></p></td></tr><tr><td class="name"><code>id</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'metric'</td><td class="description last"><p>Unit system for <code>id</code>. Default is <code>metric</code></p></td></tr></tbody></table></div></td></tr></tbody></table></div></td></tr><tr><td class="name"><code>exitHandler</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">true</td><td class="description last"><p>Whether to attach exit handlers for graceful shutdown. Default is <code>true</code></p></td></tr><tr><td class="name"><code>cache</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Cache configuration</p><h6>Properties</h6><div class="allow-overflow"><table class="props"><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>purge</code></td><td class="type"><span class="param-type">Array.&lt;string></span></td><td class="attributes">&lt;optional><br></td><td class="default">[]</td><td class="description last"><p>List of cache names to purge on startup. Default is empty array</p></td></tr><tr><td class="name"><code>purgeIntvDur</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">'5m'</td><td class="description last"><p>Interval duration for purging cache. Default is <code>5m</code></p></td></tr></tbody></table></div></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="lib_config.js.html">lib/config.js</a>, <a href="lib_config.js.html#line39">line 39</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TDataType">TDataType</h3><div class="description"><p>Supported data types.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>0</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>string</p></td></tr><tr><td class="name"><code>1</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>float</p></td></tr><tr><td class="name"><code>2</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>double</p></td></tr><tr><td class="name"><code>3</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>integer</p></td></tr><tr><td class="name"><code>4</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>smallint</p></td></tr><tr><td class="name"><code>5</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>date</p></td></tr><tr><td class="name"><code>6</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>time</p></td></tr><tr><td class="name"><code>7</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>datetime</p></td></tr><tr><td class="name"><code>8</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>array</p></td></tr><tr><td class="name"><code>9</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>object</p></td></tr><tr><td class="name"><code>10</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>auto</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="lib_helper.js.html">lib/helper.js</a>, <a href="lib_helper.js.html#line730">line 730</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TFormatResult">TFormatResult</h3><div class="description"><p>Object returned by <a href="Bajo.html#getUnitFormat">bajo:getUnitFormat</a>.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>unitSys</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>Unit system.</p></td></tr><tr><td class="name"><code>format</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Format 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#line51">line 51</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="Bajo.html#getUnitFormat">Bajo#getUnitFormat</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TFormatType">TFormatType</h3><div class="description"><p>General format types,</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>0</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>speed</p></td></tr><tr><td class="name"><code>1</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>distance</p></td></tr><tr><td class="name"><code>2</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>area</p></td></tr><tr><td class="name"><code>3</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>degree</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="lib_helper.js.html">lib/helper.js</a>, <a href="lib_helper.js.html#line749">line 749</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TNsPathPairs">TNsPathPairs</h3><div class="description"><p>Name in <code>{ns}:{path}</code> format.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</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#line41">line 41</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="Bajo.html#.TNsPathResult">Bajo.TNsPathResult</a></li><li><a href="Bajo.html#buildNsPath">Bajo#buildNsPath</a></li><li><a href="Bajo.html#breakNsPath">Bajo#breakNsPath</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".TNsPathResult">TNsPathResult</h3><div class="description"><p>Object returned by <a href="Bajo.html#breakNsPath">bajo:breakNsPath()</a>.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object</span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th>Attributes</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">&lt;optional><br></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">&lt;optional><br></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">&lt;optional><br></td><td class="description last"><p>Sub of sub namespace</p></td></tr><tr><td class="name"><code>fullNs</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Full namespace, including sub namespaces</p></td></tr><tr><td class="name"><code>path</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>Path without query string or hash</p></td></tr><tr><td class="name"><code>fullPath</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Full path, including query string and hash</p></td></tr><tr><td class="name"><code>realPath</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Path without query string or hash, but with parameters replaced with their values</p></td></tr><tr><td class="name"><code>realFullPath</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Full path, including query string and hash, but with parameters replaced with their values</p></td></tr><tr><td class="name"><code>qs</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Query string object</p></td></tr><tr><td class="name"><code>params</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Parameters 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#line61">line 61</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="Bajo.html#.TNsPathPairs">Bajo.TNsPathPairs</a></li><li><a href="Bajo.html#buildNsPath">Bajo#buildNsPath</a></li><li><a href="Bajo.html#breakNsPath">Bajo#breakNsPath</a></li></ul></dd></div></dl></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-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-01_WELCOME.html">Welcome</a></div><div class="sidebar-section-children"><a href="tutorial-02_GETTING_STARTED.html">Getting Started</a></div><div class="sidebar-section-children"><a href="tutorial-03_USER_GUIDE.html">User Guide</a></div><div class="sidebar-section-children"><a href="tutorial-04_DEV_GUIDE.html">Developer Guide</a></div><div class="sidebar-section-children"><a href="tutorial-05_ECOSYSTEM.html">Ecosystem</a></div></div><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="Main.html">Main</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-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-Applet.html">Applet</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div><div class="sidebar-section-children"><a href="module-Hook.html">Hook</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#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div><div class="sidebar-section-children"><a href="global.html#package%25C2%25B7json">package·json</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>