bajo 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/FUNDING.yml +13 -0
- package/.github/workflows/repo-lockdown.yml +24 -0
- package/.jsdoc.conf.json +7 -6
- package/LICENSE +1 -1
- package/README.md +50 -18
- package/class/app.js +376 -54
- package/class/bajo.js +228 -149
- package/class/base.js +106 -0
- package/class/helper/bajo.js +136 -85
- package/class/helper/{plugin.js → base.js} +96 -22
- package/class/{base → misc}/err.js +44 -14
- package/class/misc/log.js +212 -0
- package/class/misc/print.js +264 -0
- package/class/plugin.js +120 -68
- package/docs/App.html +23 -1
- package/docs/Bajo.html +2 -9
- package/docs/Base.html +3 -0
- package/docs/Err.html +3 -1
- package/docs/Log.html +5 -1
- package/docs/Plugin.html +1 -1
- package/docs/Print.html +1 -1
- package/docs/class_app.js.html +378 -56
- package/docs/class_bajo.js.html +230 -151
- package/docs/class_base.js.html +109 -0
- package/docs/class_helper_bajo.js.html +138 -87
- package/docs/class_helper_base.js.html +246 -0
- package/docs/class_misc_err.js.html +129 -0
- package/docs/class_misc_log.js.html +210 -0
- package/docs/class_misc_print.js.html +267 -0
- package/docs/class_plugin.js.html +122 -70
- package/docs/data/search.json +1 -1
- package/docs/global.html +4 -1
- package/docs/index.html +2 -2
- package/docs/index.js.html +35 -0
- package/docs/lib_current-loc.js.html +36 -0
- package/docs/lib_formats.js.html +8 -8
- package/docs/lib_import-module.js.html +59 -0
- package/docs/lib_log-levels.js.html +17 -7
- package/docs/lib_parse-args-argv.js.html +83 -0
- package/docs/lib_parse-env.js.html +53 -0
- package/docs/lib_resolve-path.js.html +3 -6
- package/docs/lib_shim.js.html +8 -3
- package/docs/module-Helper_Bajo.html +3 -0
- package/docs/module-Helper_Base.html +3 -0
- package/docs/module-Lib.html +15 -0
- package/docs/static/home.md +32 -0
- package/docs/static/logo-ecosystem.png +0 -0
- package/docs/static/logo.png +0 -0
- package/extend/bajo/intl/en-US.json +8 -2
- package/extend/bajo/intl/id.json +8 -2
- package/index.js +22 -2
- package/lib/current-loc.js +24 -2
- package/lib/formats.js +6 -6
- package/lib/import-module.js +29 -0
- package/lib/log-levels.js +15 -5
- package/lib/parse-args-argv.js +20 -12
- package/lib/parse-env.js +18 -7
- package/lib/resolve-path.js +1 -4
- package/lib/shim.js +6 -1
- package/package.json +4 -7
- package/wiki/CONFIG.md +30 -0
- package/wiki/CONTRIBUTING.md +5 -0
- package/wiki/DEV_GUIDE.md +3 -0
- package/wiki/ECOSYSTEM.md +93 -0
- package/wiki/GETTING-STARTED.md +356 -0
- package/wiki/USER-GUIDE.md +256 -0
- package/class/base/log.js +0 -205
- package/class/base/plugin.js +0 -177
- package/class/base/print.js +0 -272
- package/docs/BasePlugin.html +0 -5
- package/docs/class_base_err.js.html +0 -99
- package/docs/class_base_log.js.html +0 -208
- package/docs/class_base_plugin.js.html +0 -180
- package/docs/class_base_print.js.html +0 -275
- package/docs/class_helper_plugin.js.html +0 -172
- package/docs/lib_create-method.js.html +0 -42
- package/docs/module-class_helper_bajo.html +0 -3
- package/docs/module-class_helper_plugin.html +0 -3
- package/docs/module-lib_create-method.html +0 -3
- package/docs/module-lib_formats.html +0 -3
- package/docs/module-lib_log-levels.html +0 -3
- package/docs/module-lib_resolve-path.html +0 -3
- package/docs/module-lib_shim.html +0 -3
- package/docs/tutorial-contribution.html +0 -3
- package/docs/tutorial-ecosystem.html +0 -3
- package/docs/tutorial-getting-started.html +0 -13
- package/docs/tutorial-plugin-dev.html +0 -3
- package/docs/tutorial-user-guide.html +0 -3
- package/lib/create-method.js +0 -39
- package/lib/dayjs.js +0 -8
- package/lib/omitted-plugin-keys.js +0 -3
- package/lib/read-all-configs.js +0 -19
- package/misc-docs/.hook.md +0 -11
- package/misc-docs/bitcoin.jpeg +0 -0
- package/misc-docs/contribution.md +0 -20
- package/misc-docs/ecosystem.md +0 -94
- package/misc-docs/getting-started.md +0 -142
- package/misc-docs/plugin-dev.md +0 -0
- package/misc-docs/toc.json +0 -17
- package/misc-docs/user-guide.md +0 -1
- /package/docs/{bitcoin.jpeg → static/bitcoin.jpeg} +0 -0
|
@@ -1,121 +1,173 @@
|
|
|
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>Source: class/plugin.js</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 Framework</a><div class="sidebar-items-container"><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-class_helper_bajo.html">class/helper/bajo</a></div><div class="sidebar-section-children"><a href="module-class_helper_plugin.html">class/helper/plugin</a></div><div class="sidebar-section-children"><a href="module-lib_create-method.html">lib/create-method</a></div><div class="sidebar-section-children"><a href="module-lib_formats.html">lib/formats</a></div><div class="sidebar-section-children"><a href="module-lib_log-levels.html">lib/log-levels</a></div><div class="sidebar-section-children"><a href="module-lib_resolve-path.html">lib/resolve-path</a></div><div class="sidebar-section-children"><a href="module-lib_shim.html">lib/shim</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="BasePlugin.html">BasePlugin</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-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-contribution.html">Contribution</a></div><div class="sidebar-section-children"><a href="tutorial-ecosystem.html">Ecosystem</a></div><div class="sidebar-section-children"><a href="tutorial-getting-started.html">Getting Started</a></div><div class="sidebar-section-children"><a href="tutorial-plugin-dev.html">Plugin Development</a></div><div class="sidebar-section-children"><a href="tutorial-user-guide.html">User Guide</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#NsPathType">NsPathType</a></div><div class="sidebar-section-children"><a href="global.html#ObjectFormatType">ObjectFormatType</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://bajo.app" target="">Bajo.app</a></div><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><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 id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">class_plugin.js</h1></header><article><pre class="prettyprint source lang-js"><code>import BasePlugin from './base/plugin.js'
|
|
4
|
-
import
|
|
5
|
-
import omittedPluginKeys from '../lib/omitted-plugin-keys.js'
|
|
6
|
-
import readAllConfigs from '../lib/read-all-configs.js'
|
|
3
|
+
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">Bajo API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:bajo:afterAll%257Bmethod%257D">bajo:afterAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBootComplete">bajo:afterBootComplete</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBuildCollection">bajo:afterBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterCollectHooks">bajo:afterCollectHooks</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeAll%257Bmethod%257D">bajo:beforeAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeBuildCollection">bajo:beforeBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:afterAppletRun">{ns}:afterAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:after%257Bmethod%257D">{ns}:after{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:beforeAppletRun">{ns}:beforeAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:before%257Bmethod%257D">{ns}:before{method}</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Helper_Bajo.html">Helper/Bajo</a></div><div class="sidebar-section-children"><a href="module-Helper_Base.html">Helper/Base</a></div><div class="sidebar-section-children"><a href="module-Lib.html">Lib</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TAppConfigHandler">TAppConfigHandler</a></div><div class="sidebar-section-children"><a href="global.html#TAppEnv">TAppEnv</a></div><div class="sidebar-section-children"><a href="global.html#TAppLib">TAppLib</a></div><div class="sidebar-section-children"><a href="global.html#TBajoDataType">TBajoDataType</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatResult">TBajoFormatResult</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatType">TBajoFormatType</a></div><div class="sidebar-section-children"><a href="global.html#TLogJson">TLogJson</a></div><div class="sidebar-section-children"><a href="global.html#TLogLevels">TLogLevels</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathPairs">TNsPathPairs</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathResult">TNsPathResult</a></div><div class="sidebar-section-children"><a href="global.html#TPrintOptions">TPrintOptions</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/bajo" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/bajo" target="">Github</a></div><div class="navbar-item"><a id="" href="https://bajo.app" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">class_plugin.js</h1></header><article><pre class="prettyprint source lang-js"><code>import lodash from 'lodash'
|
|
4
|
+
import Err from './misc/err.js'
|
|
7
5
|
|
|
8
|
-
const {
|
|
6
|
+
const { get, isEmpty, cloneDeep, omit, isPlainObject, camelCase } = lodash
|
|
9
7
|
|
|
10
8
|
/**
|
|
11
|
-
* This is the
|
|
12
|
-
*
|
|
9
|
+
* This is the **mother** of all plugin classes. All Bajo plugin classess inherit from this class
|
|
10
|
+
* respectfully.
|
|
11
|
+
*
|
|
12
|
+
* There are currently only two main plugins available:
|
|
13
|
+
* - {@link Bajo} - Core plugin class, responsible for system wide setup and boot process. You should not touch this obviously
|
|
14
|
+
* - {@link Base} - Base plugin class your own plugin should extend from
|
|
13
15
|
*
|
|
14
16
|
* @class
|
|
15
17
|
*/
|
|
18
|
+
class Plugin {
|
|
19
|
+
/**
|
|
20
|
+
* Package name, the one from package.json
|
|
21
|
+
*
|
|
22
|
+
* @memberof Plugin
|
|
23
|
+
* @constant {string}
|
|
24
|
+
*/
|
|
25
|
+
static pkgName
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Namespace (ns) or plugin's name. Simply the camel cased version of plugin's package name
|
|
29
|
+
*
|
|
30
|
+
* @memberof Plugin
|
|
31
|
+
* @constant {string}
|
|
32
|
+
*/
|
|
33
|
+
static ns
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Plugin alias. Derived plugin must provide its own, unique alias. If it left blank,
|
|
37
|
+
* Bajo will provide this automatically (by using the kebab-cased version of plugin name)
|
|
38
|
+
*
|
|
39
|
+
* @readonly
|
|
40
|
+
* @memberof Plugin
|
|
41
|
+
* @type {string}
|
|
42
|
+
*/
|
|
43
|
+
static alias = ''
|
|
16
44
|
|
|
17
|
-
class Plugin extends BasePlugin {
|
|
18
45
|
/**
|
|
19
46
|
* @param {string} pkgName - Package name (the one you use in package.json)
|
|
20
47
|
* @param {Object} app - App instance reference. Usefull to call app method inside a plugin
|
|
21
48
|
*/
|
|
22
49
|
constructor (pkgName, app) {
|
|
23
|
-
|
|
50
|
+
this.constructor.pkgName = pkgName
|
|
51
|
+
this.constructor.ns = camelCase(pkgName)
|
|
52
|
+
|
|
24
53
|
/**
|
|
25
|
-
*
|
|
26
|
-
* Bajo will provide this automatically
|
|
54
|
+
* Reference to app instance
|
|
27
55
|
*
|
|
28
|
-
* @type {
|
|
56
|
+
* @type {Object}
|
|
29
57
|
*/
|
|
30
|
-
this.
|
|
58
|
+
this.app = app
|
|
31
59
|
|
|
32
60
|
/**
|
|
33
|
-
*
|
|
61
|
+
* Config object
|
|
34
62
|
*
|
|
35
|
-
*
|
|
63
|
+
* @type {Object}
|
|
64
|
+
* @see {@tutorial config}
|
|
65
|
+
*/
|
|
66
|
+
this.config = {}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Shortcut to {@link App#log} with prefix parameter set to this plugin name.
|
|
36
70
|
*
|
|
37
|
-
* @type {
|
|
71
|
+
* @type {Log}
|
|
38
72
|
*/
|
|
39
|
-
this.
|
|
40
|
-
|
|
73
|
+
this.log = {
|
|
74
|
+
trace: (...params) => this.app.log.trace(this.ns, ...params),
|
|
75
|
+
debug: (...params) => this.app.log.debug(this.ns, ...params),
|
|
76
|
+
info: (...params) => this.app.log.info(this.ns, ...params),
|
|
77
|
+
warn: (...params) => this.app.log.warn(this.ns, ...params),
|
|
78
|
+
error: (...params) => this.app.log.error(this.ns, ...params),
|
|
79
|
+
fatal: (...params) => this.app.log.fatal(this.ns, ...params),
|
|
80
|
+
silent: (...params) => this.app.log.silent(this.ns, ...params)
|
|
81
|
+
}
|
|
41
82
|
}
|
|
42
83
|
|
|
43
84
|
/**
|
|
44
|
-
*
|
|
45
|
-
* ```Env Variables > Program Arguments > Config File```
|
|
85
|
+
* Get plugin's config value
|
|
46
86
|
*
|
|
47
87
|
* @method
|
|
48
|
-
* @
|
|
88
|
+
* @param {string} [path] - dot separated config path (think of lodash's 'get'). If not provided, the full config will be given
|
|
89
|
+
* @param {Object} [options={}] - Options
|
|
90
|
+
* @param {any} [options.defValue={}] - Default value to use if returned object is undefined
|
|
91
|
+
* @param {string[]} [options.omit=[]] - Omit these keys from returned object
|
|
92
|
+
* @param {boolean} [options.noClone=false] - Set true to NOT clone returned object
|
|
93
|
+
* @returns {Object} Returned object. If no path provided, the whole config object is returned
|
|
49
94
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
let cfg = await readAllConfigs.call(this.app, `${dir}/config`)
|
|
57
|
-
this.alias = this.alias ?? (this.pkgName.slice(0, 5) === 'bajo-' ? this.pkgName.slice(5).toLowerCase() : this.name.toLowerCase())
|
|
58
|
-
this.alias = this.alias.toLowerCase()
|
|
59
|
-
|
|
60
|
-
this.dir = {
|
|
61
|
-
pkg: dir,
|
|
62
|
-
data: `${this.app.bajo.dir.data}/plugins/${this.name}`
|
|
63
|
-
}
|
|
64
|
-
const file = `${dir + (this.name === this.app.bajo.mainNs ? '/..' : '')}/package.json`
|
|
65
|
-
const pkgJson = await readJson(file)
|
|
66
|
-
this.pkg = pick(pkgJson,
|
|
67
|
-
['name', 'version', 'description', 'author', 'license', 'homepage'])
|
|
68
|
-
if (this.name === this.app.bajo.mainNs) {
|
|
69
|
-
this.alias = this.app.bajo.mainNs
|
|
70
|
-
this.title = this.title ?? this.alias
|
|
71
|
-
}
|
|
72
|
-
// merge with config from datadir
|
|
73
|
-
try {
|
|
74
|
-
const altCfg = await readAllConfigs.call(this.app, `${this.app.bajo.dir.data}/config/${this.name}`)
|
|
75
|
-
cfg = defaultsDeep({}, omit(altCfg, omittedPluginKeys), cfg)
|
|
76
|
-
} catch (err) {}
|
|
77
|
-
const cfgEnv = omit(get(this, `app.env._.${this.name}`, {}), omittedPluginKeys) ?? {}
|
|
78
|
-
const cfgArgv = omit(get(this, `app.argv._.${this.name}`, {}), omittedPluginKeys) ?? {}
|
|
79
|
-
const envArgv = defaultsDeep({}, cfgEnv, cfgArgv)
|
|
80
|
-
cfg = defaultsDeep({}, envArgv ?? {}, cfg ?? {}, this.config ?? {})
|
|
81
|
-
this.title = this.title ?? cfg.title ?? this.alias
|
|
82
|
-
|
|
83
|
-
this.dependencies = this.dependencies ?? []
|
|
84
|
-
this.config = parseObject(cfg, { parseValue: true })
|
|
95
|
+
getConfig = (path, options = {}) => {
|
|
96
|
+
let obj = isEmpty(path) ? this.config : get(this.config, path, options.defValue ?? {})
|
|
97
|
+
options.omit = options.omit ?? []
|
|
98
|
+
if (isPlainObject(obj) && !isEmpty(options.omit)) obj = omit(obj, options.omit)
|
|
99
|
+
if (!options.noClone) obj = cloneDeep(obj)
|
|
100
|
+
return obj
|
|
85
101
|
}
|
|
86
102
|
|
|
87
103
|
/**
|
|
88
|
-
*
|
|
89
|
-
* because after plugin is initialized, config will be deep frozen.
|
|
104
|
+
* Create an instance of {@link Err} object
|
|
90
105
|
*
|
|
91
106
|
* @method
|
|
92
|
-
* @
|
|
107
|
+
* @param {msg} msg - Error message
|
|
108
|
+
* @param {...any} [args] - Argument variables you might want to add to the error object
|
|
109
|
+
* @returns {Object} Err instance
|
|
93
110
|
*/
|
|
94
|
-
|
|
111
|
+
error = (msg, ...args) => {
|
|
112
|
+
if (!this.print) return new Error(msg, ...args)
|
|
113
|
+
const error = new Err(this, msg, ...args)
|
|
114
|
+
return error.write()
|
|
95
115
|
}
|
|
96
116
|
|
|
97
117
|
/**
|
|
98
|
-
*
|
|
118
|
+
* Create an instance of Err object, display it on screen and then force
|
|
119
|
+
* terminate the app process
|
|
99
120
|
*
|
|
100
121
|
* @method
|
|
101
|
-
* @
|
|
122
|
+
* @param {msg} msg - Error message
|
|
123
|
+
* @param {...any} [args] - Argument variables you might want to add to the error object
|
|
102
124
|
*/
|
|
103
|
-
|
|
125
|
+
fatal = (msg, ...args) => {
|
|
126
|
+
if (!this.print) return new Error(msg, ...args)
|
|
127
|
+
const error = new Err(this, msg, ...args)
|
|
128
|
+
error.fatal()
|
|
104
129
|
}
|
|
105
130
|
|
|
106
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Getter for plugin's package name
|
|
133
|
+
*
|
|
134
|
+
* @type {string}
|
|
135
|
+
*/
|
|
136
|
+
get pkgName () {
|
|
137
|
+
return this.constructor.pkgName
|
|
107
138
|
}
|
|
108
139
|
|
|
109
140
|
/**
|
|
110
|
-
*
|
|
111
|
-
* delete temporary files, freeing resources etc.
|
|
141
|
+
* Getter for plugin's ns
|
|
112
142
|
*
|
|
113
|
-
* @
|
|
114
|
-
|
|
143
|
+
* @type {string}
|
|
144
|
+
*/
|
|
145
|
+
get ns () {
|
|
146
|
+
return this.constructor.ns
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Getter for plugin's alias
|
|
151
|
+
*
|
|
152
|
+
* @type {string}
|
|
153
|
+
*/
|
|
154
|
+
get alias () {
|
|
155
|
+
return this.constructor.alias
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Translate text and interpolate with given ```args```.
|
|
160
|
+
*
|
|
161
|
+
* Shortcut to {@link App#t} with ns parameter set to this plugin namespace.
|
|
162
|
+
*
|
|
163
|
+
* @param {string} text - Text to translate
|
|
164
|
+
* @param {...any} params - Variables to interpolate to ```text```
|
|
165
|
+
* @returns {string}
|
|
115
166
|
*/
|
|
116
|
-
|
|
167
|
+
t = (text, ...params) => {
|
|
168
|
+
return this.app.t(this.ns, text, ...params)
|
|
117
169
|
}
|
|
118
170
|
}
|
|
119
171
|
|
|
120
172
|
export default Plugin
|
|
121
|
-
</code></pre></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
|
|
173
|
+
</code></pre></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">Bajo API</a><div class="mobile-nav-links"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/bajo" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/bajo" target="">Github</a></div><div class="navbar-item"><a id="" href="https://bajo.app" target="">Bajo</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-events"><div>Events</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#event:bajo:afterAll%257Bmethod%257D">bajo:afterAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBootComplete">bajo:afterBootComplete</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterBuildCollection">bajo:afterBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:afterCollectHooks">bajo:afterCollectHooks</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeAll%257Bmethod%257D">bajo:beforeAll{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:bajo:beforeBuildCollection">bajo:beforeBuildCollection</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:afterAppletRun">{ns}:afterAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:after%257Bmethod%257D">{ns}:after{method}</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:beforeAppletRun">{ns}:beforeAppletRun</a></div><div class="sidebar-section-children"><a href="global.html#event:%257Bns%257D:before%257Bmethod%257D">{ns}:before{method}</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Helper_Bajo.html">Helper/Bajo</a></div><div class="sidebar-section-children"><a href="module-Helper_Base.html">Helper/Base</a></div><div class="sidebar-section-children"><a href="module-Lib.html">Lib</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TAppConfigHandler">TAppConfigHandler</a></div><div class="sidebar-section-children"><a href="global.html#TAppEnv">TAppEnv</a></div><div class="sidebar-section-children"><a href="global.html#TAppLib">TAppLib</a></div><div class="sidebar-section-children"><a href="global.html#TBajoDataType">TBajoDataType</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatResult">TBajoFormatResult</a></div><div class="sidebar-section-children"><a href="global.html#TBajoFormatType">TBajoFormatType</a></div><div class="sidebar-section-children"><a href="global.html#TLogJson">TLogJson</a></div><div class="sidebar-section-children"><a href="global.html#TLogLevels">TLogLevels</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathPairs">TNsPathPairs</a></div><div class="sidebar-section-children"><a href="global.html#TNsPathResult">TNsPathResult</a></div><div class="sidebar-section-children"><a href="global.html#TPrintOptions">TPrintOptions</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
|
package/docs/data/search.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"list":[{"title":"App","link":"<a href=\"App.html\">App</a>","description":"<p>Class constructor</p>"},{"title":"App#addPlugin","link":"<a href=\"App.html#addPlugin\">addPlugin</a>","description":"<p>Add a plugin to the app</p>"},{"title":"App#boot","link":"<a href=\"App.html#boot\">boot</a>","description":"<p>Booting the app</p>"},{"title":"App#dump","link":"<a href=\"App.html#dump\">dump</a>","description":"<p>Dumping variable on screen</p>"},{"title":"Bajo","link":"<a href=\"Bajo.html\">Bajo</a>"},{"title":"Bajo#applets","link":"<a href=\"Bajo.html#applets\">applets</a>","description":"<p>Storage for applets</p>"},{"title":"Bajo#breakNsPath","link":"<a href=\"Bajo.html#breakNsPath\">breakNsPath</a>","description":"<p>Break name to its namespace & path infos</p>"},{"title":"Bajo#buildCollections","link":"<a href=\"Bajo.html#buildCollections\">buildCollections</a>","description":"<p>Method to transform an array or object from config into an array of collection safely.</p>\n<p>Emitted hooks:</p>\n<ol>\n<li><code>{ns}:beforeBuildCollection (container)</code> - called before collection is built</li>\n<li><code>{ns}:afterBuildCollection (container, items)</code> - called after collection is built</li>\n</ol>"},{"title":"Bajo#callHandler","link":"<a href=\"Bajo.html#callHandler\">callHandler</a>","description":"<p>Calling any plugin's method by its name. Name format: <code>ns:methodName</code>.</p>\n<ul>\n<li>If name is a string, the corresponding plugin's method will be called with passed args as its parameters</li>\n<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>\n<li>If name is a function, this function will be run under scope with the remaining args</li>\n<li>If name is an object and has <code>handler</code> key in it, this function handler will be instead</li>\n</ul>"},{"title":"Bajo#configHandlers","link":"<a href=\"Bajo.html#configHandlers\">configHandlers</a>","description":"<p>Storage for config handlers. By default there are only two handlers available: <code>.js</code>\nand <code>.json</code>.</p>\n<p>Use plugin to add more type - e.g: {@link https://github.com/ardhi/bajo-config|bajo-config}\nlets you to use <code>.yaml</code> and <code>.toml</code></p>"},{"title":"Bajo#eachPlugins","link":"<a href=\"Bajo.html#eachPlugins\">eachPlugins</a>","description":"<p>This function iterates through all loaded plugins and call the provided handler scoped as the running plugin.\nAnd an object with the following key serves as its parameter:</p>\n<ul>\n<li><code>file</code>: file matched the glob pattern</li>\n<li><code>dir</code>: plugin's base directory</li>\n</ul>"},{"title":"Bajo#findDeep","link":"<a href=\"Bajo.html#findDeep\">findDeep</a>","description":"<p>Find item deep in paths</p>"},{"title":"Bajo#format","link":"<a href=\"Bajo.html#format\">format</a>","description":"<p>Format value</p>"},{"title":"Bajo#formatByType","link":"<a href=\"Bajo.html#formatByType\">formatByType</a>","description":"<p>Format value by type</p>"},{"title":"Bajo#freeze","link":"<a href=\"Bajo.html#freeze\">freeze</a>","description":"<p>Freeze object</p>"},{"title":"Bajo#generateId","link":"<a href=\"Bajo.html#generateId\">generateId</a>","description":"<p>Generate unique random characters that can be used as ID. Use {@link https://github.com/ai/nanoid|nanoid} under the hood</p>"},{"title":"Bajo#getGlobalModuleDir","link":"<a href=\"Bajo.html#getGlobalModuleDir\">getGlobalModuleDir</a>","description":"<p>Get NPM global module directory</p>"},{"title":"Bajo#getMethod","link":"<a href=\"Bajo.html#getMethod\">getMethod</a>","description":"<p>Get class method by name</p>"},{"title":"Bajo#getModuleDir","link":"<a href=\"Bajo.html#getModuleDir\">getModuleDir</a>","description":"<p>Get module directory, locally and globally</p>"},{"title":"Bajo#getPlugin","link":"<a href=\"Bajo.html#getPlugin\">getPlugin</a>","description":"<p>Get plugin by name</p>"},{"title":"Bajo#getPluginDataDir","link":"<a href=\"Bajo.html#getPluginDataDir\">getPluginDataDir</a>","description":"<p>Get plugin data directory</p>"},{"title":"Bajo#getPluginFile","link":"<a href=\"Bajo.html#getPluginFile\">getPluginFile</a>","description":"<p>Resolve file path from:</p>\n<ul>\n<li>local/absolute file</li>\n<li>ns based path (<code>myPlugin:/path/to/file.txt</code>)</li>\n</ul>"},{"title":"Bajo#getUnitFormat","link":"<a href=\"Bajo.html#getUnitFormat\">getUnitFormat</a>","description":"<p>Get unit format</p>"},{"title":"Bajo#importModule","link":"<a href=\"Bajo.html#importModule\">importModule</a>","description":"<p>Import file/module from any loaded plugins</p>\n<p>Your plugin structure:</p>\n<pre class=\"prettyprint source\"><code>|- src\n| |- lib\n| | |- my-module.js\n|- index.js\n|- package.json\n</code></pre>\n<p>Inside your app/plugin:</p>\n<pre class=\"prettyprint source lang-javascript\"><code>const { importModule } = this.app.bajo\nconst myModule = await importModule('myPlugin:/src/lib/my-module.js')\n</code></pre>"},{"title":"Bajo#importPkg","link":"<a href=\"Bajo.html#importPkg\">importPkg</a>","description":"<p>Import one or more package belongs to a plugin</p>\n<p>Example: you want to import packages <code>delay</code> and <code>chalk</code> from <code>bajo</code> namespace and use it inside your app/plugin</p>\n<pre class=\"prettyprint source lang-javascript\"><code>const { importPkg } from this.app.bajo\nconst [delay, chalk] = await importPkg('bajo:delay', 'bajo:chalk')\n\nawait delay(1000)\n...\n</code></pre>"},{"title":"Bajo#isEmptyDir","link":"<a href=\"Bajo.html#isEmptyDir\">isEmptyDir</a>","description":"<p>Check whether directory is empty or not. More info please {@link https://github.com/gulpjs/empty-dir|check here}.</p>"},{"title":"Bajo#isLogInRange","link":"<a href=\"Bajo.html#isLogInRange\">isLogInRange</a>","description":"<p>Check whether log level is within log's app current level</p>"},{"title":"Bajo#isValidApp","link":"<a href=\"Bajo.html#isValidApp\">isValidApp</a>","description":"<p>Check whether directory is a valid Bajo app</p>"},{"title":"Bajo#isValidPlugin","link":"<a href=\"Bajo.html#isValidPlugin\">isValidPlugin</a>","description":"<p>Check whether directory is a valid Bajo plugin</p>"},{"title":"Bajo#mainNs","link":"<a href=\"Bajo.html#mainNs\">mainNs</a>","description":"<p>Your main namespace. And yes, you suppose NOT to change this</p>"},{"title":"Bajo#numUnit","link":"<a href=\"Bajo.html#numUnit\">numUnit</a>","description":"<p>Return its numeric portion of a value</p>"},{"title":"Bajo#parseDt","link":"<a href=\"Bajo.html#parseDt\">parseDt</a>","description":"<p>Parse datetime string as Javascript object. Please visit {@link https://day.js.org|dayjs} for valid formats and more infos</p>"},{"title":"Bajo#parseDur","link":"<a href=\"Bajo.html#parseDur\">parseDur</a>","description":"<p>Parse duration to its millisecond value. Use {@link https://github.com/vercel/ms|ms} under the hood</p>"},{"title":"Bajo#parseObject","link":"<a href=\"Bajo.html#parseObject\">parseObject</a>","description":"<p>Parse an object and optionally normalize its values recursively. Use {@link https://github.com/ladjs/dotenv-parse-variables}\nto parse values, so please have a visit to know how it works</p>\n<p>If <code>options.parseValue</code> is <code>true</code>, any key ends with <code>Dur</code> and <code>Dt</code> will\nalso be parsed as millisecond and Javascript datetime accordingly</p>"},{"title":"Bajo#pluginNames","link":"<a href=\"Bajo.html#pluginNames\">pluginNames</a>","description":"<p>List of all loaded plugin's names</p>"},{"title":"Bajo#pluginPkgs","link":"<a href=\"Bajo.html#pluginPkgs\">pluginPkgs</a>","description":"<p>List of all loaded plugin's package names</p>"},{"title":"Bajo#readConfig","link":"<a href=\"Bajo.html#readConfig\">readConfig</a>","description":"<p>Read and parse file as config object. Supported types: <code>.js</code> and <code>.json</code>.\nMore supports can be added using plugin. {@link https://github.com/ardhi/bajo-config|bajo-config} gives you additional supports for <code>.yml</code>, <code>.yaml</code> and <code>.toml</code> file</p>\n<p>If file extension is <code>.*</code>, it will be auto detected and parsed accordingly</p>"},{"title":"Bajo#readJson","link":"<a href=\"Bajo.html#readJson\">readJson</a>","description":"<p>Read and parse json file</p>"},{"title":"Bajo#resolvePath","link":"<a href=\"Bajo.html#resolvePath\">resolvePath</a>","description":"<p>Resolve file name to filesystem's path. Windows path separator <code>\\</code>\nis normalized to Unix's <code>/</code></p>"},{"title":"Bajo#runAt","link":"<a href=\"Bajo.html#runAt\">runAt</a>","description":"<p>Date/time when your app start</p>"},{"title":"Bajo#runHook","link":"<a href=\"Bajo.html#runHook\">runHook</a>","description":"<p>Run named hook</p>"},{"title":"Bajo#saveAsDownload","link":"<a href=\"Bajo.html#saveAsDownload\">saveAsDownload</a>","description":"<p>Save item as file in Bajo's download directory. That is a directory inside your\nBajo plugin's data directory.</p>\n<p>If file exists already, file will automatically be\nrenamed incrementally.</p>"},{"title":"BasePlugin","link":"<a href=\"BasePlugin.html\">BasePlugin</a>"},{"title":"BasePlugin#app","link":"<a href=\"BasePlugin.html#app\">app</a>","description":"<p>Reference to app instance</p>"},{"title":"BasePlugin#config","link":"<a href=\"BasePlugin.html#config\">config</a>","description":"<p>Config object</p>"},{"title":"BasePlugin#err","link":"<a href=\"BasePlugin.html#err\">err</a>","description":"<p>Create an instance of {@link Err} object</p>"},{"title":"BasePlugin#error","link":"<a href=\"BasePlugin.html#error\">error</a>","description":"<p>Alias to err () method above</p>"},{"title":"BasePlugin#fatal","link":"<a href=\"BasePlugin.html#fatal\">fatal</a>","description":"<p>Create an instance of Err object, display it on screen and then force\nterminate the app process</p>"},{"title":"BasePlugin#getConfig","link":"<a href=\"BasePlugin.html#getConfig\">getConfig</a>","description":"<p>Get plugin's config value</p>"},{"title":"BasePlugin#initLog","link":"<a href=\"BasePlugin.html#initLog\">initLog</a>","description":"<p>Initialize log. Please refer to {@link Log} class for more info</p>"},{"title":"BasePlugin#initPrint","link":"<a href=\"BasePlugin.html#initPrint\">initPrint</a>","description":"<p>Initialize print engine. Please refer to {@link Print} class for more info</p>"},{"title":"BasePlugin#lib","link":"<a href=\"BasePlugin.html#lib\">lib</a>","description":"<p>Property to give you direct access to the most commonly used 3rd party library in a bajo based app.\nNo manual import necessary, always available, everywhere, anytime!</p>\n<p>Example:</p>\n<pre class=\"prettyprint source lang-javascript\"><code>const { camelCase, kebabCase } = this.lib._\nconsole.log(camelCase('Elit commodo sit et aliqua'))\n</code></pre>"},{"title":"BasePlugin#name","link":"<a href=\"BasePlugin.html#name\">name</a>","description":"<p>Plugin name. Simply the camel cased version of plugin's package name</p>"},{"title":"BasePlugin#pkgName","link":"<a href=\"BasePlugin.html#pkgName\">pkgName</a>","description":"<p>Package name, the one from package.json</p>"},{"title":"Err","link":"<a href=\"Err.html\">Err</a>"},{"title":"Err#fatal","link":"<a href=\"Err.html#fatal\">fatal</a>","description":"<p>Print error object on screen and terminate app process</p>"},{"title":"Err#formatErrorDetails","link":"<a href=\"Err.html#formatErrorDetails\">formatErrorDetails</a>","description":"<p>Pretty format error details</p>"},{"title":"Err#write","link":"<a href=\"Err.html#write\">write</a>","description":"<p>Create the error object</p>"},{"title":"Log","link":"<a href=\"Log.html\">Log</a>"},{"title":"Log#child","link":"<a href=\"Log.html#child\">child</a>","description":"<p>Create child logger</p>"},{"title":"Log#debug","link":"<a href=\"Log.html#debug\">debug</a>","description":"<p>Display & format message as <code>debug</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#error","link":"<a href=\"Log.html#error\">error</a>","description":"<p>Display & format message as <code>error</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#fatal","link":"<a href=\"Log.html#fatal\">fatal</a>","description":"<p>Display & format message as <code>fatal</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#formatMsg","link":"<a href=\"Log.html#formatMsg\">formatMsg</a>","description":"<p>Display & format message according to one of these rules:</p>\n<ol>\n<li><code>level</code> <code>text</code> <code>var 1</code> <code>var 2</code> <code>...var n</code> - Translate <code>text</code> and interpolate with <code>vars</code> for level <code>level</code></li>\n<li><code>level</code> <code>data</code> <code>text</code> <code>var 1</code> <code>var 2</code> <code>...var n</code> - As above, and append stringified <code>data</code></li>\n<li><code>level</code> <code>error</code> - Format as <strong>error</strong>. If current log level is <em>trace</em>, dump the error object on screen</li>\n</ol>"},{"title":"Log#info","link":"<a href=\"Log.html#info\">info</a>","description":"<p>Display & format message as <code>info</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#init","link":"<a href=\"Log.html#init\">init</a>","description":"<p>Initialize logger. Auto detect to use different logger via Bajo's config file</p>"},{"title":"Log#isExtLogger","link":"<a href=\"Log.html#isExtLogger\">isExtLogger</a>","description":"<p>Do we use external logger or Bajo's built-in one?</p>"},{"title":"Log#isIgnored","link":"<a href=\"Log.html#isIgnored\">isIgnored</a>","description":"<p>Is provided level being ignored by config?</p>"},{"title":"Log#trace","link":"<a href=\"Log.html#trace\">trace</a>","description":"<p>Display & format message as <code>trace</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#warn","link":"<a href=\"Log.html#warn\">warn</a>","description":"<p>Display & format message as <code>warn</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#write","link":"<a href=\"Log.html#write\">write</a>","description":"<p>Interpolate and translate text via plugin's print engine. Check Print class\nfor more information</p>"},{"title":"NsPathType","link":"<a href=\"global.html#NsPathType\">NsPathType</a>","description":"<p>Object returned by {@link BajoCore#breakNsPath|breakNsPath}</p>"},{"title":"ObjectFormatType","link":"<a href=\"global.html#ObjectFormatType\">ObjectFormatType</a>","description":"<p>Object returned by {@link BajoCore#getUnitFormat|getUnitFormat}</p>"},{"title":"Plugin","link":"<a href=\"Plugin.html\">Plugin</a>"},{"title":"Plugin#alias","link":"<a href=\"Plugin.html#alias\">alias</a>","description":"<p>Plugin alias. Derived plugin must provide its own, unique alias. If it left blank,\nBajo will provide this automatically</p>"},{"title":"Plugin#dependencies","link":"<a href=\"Plugin.html#dependencies\">dependencies</a>","description":"<p>Dependencies to other plugins. Enter all plugin's package name your plugin dependent from.</p>\n<p>Semver is also supported.</p>"},{"title":"Plugin#exit","link":"<a href=\"Plugin.html#exit\">exit</a>","description":"<p>Upon app termination, this method will be called first. Mostly useful for system cleanup,\ndelete temporary files, freeing resources etc.</p>"},{"title":"Plugin#init","link":"<a href=\"Plugin.html#init\">init</a>","description":"<p>After config is read, plugin will be initialized. You can still change your config here,\nbecause after plugin is initialized, config will be deep frozen.</p>"},{"title":"Plugin#loadConfig","link":"<a href=\"Plugin.html#loadConfig\">loadConfig</a>","description":"<p>Load config from file in data directory, program arguments and environment variables. Level of importance:\n<code>Env Variables > Program Arguments > Config File</code></p>"},{"title":"Plugin#start","link":"<a href=\"Plugin.html#start\">start</a>","description":"<p>This method will be called after plugin's init</p>"},{"title":"Print","link":"<a href=\"Print.html\">Print</a>","description":"<p>Class constructor</p>"},{"title":"Print#clear","link":"<a href=\"Print.html#clear\">clear</a>","description":"<p>Clear spinner text</p>"},{"title":"Print#fail","link":"<a href=\"Print.html#fail\">fail</a>","description":"<p>Print failed message, prefixed with a cross icon</p>"},{"title":"Print#fatal","link":"<a href=\"Print.html#fatal\">fatal</a>","description":"<p>Print failed message, prefixed with a cross icon and terminate the app process</p>"},{"title":"Print#getElapsed","link":"<a href=\"Print.html#getElapsed\">getElapsed</a>","description":"<p>Get elapsed time since print instance is created</p>"},{"title":"Print#info","link":"<a href=\"Print.html#info\">info</a>","description":"<p>Print failed message, prefixed with an info icon</p>"},{"title":"Print#init","link":"<a href=\"Print.html#init\">init</a>","description":"<p>Initialize print engine and read plugin's translation files</p>"},{"title":"Print#render","link":"<a href=\"Print.html#render\">render</a>","description":"<p>Force render spinner</p>"},{"title":"Print#setOpts","link":"<a href=\"Print.html#setOpts\">setOpts</a>","description":"<p>Set spinner options</p>"},{"title":"Print#setText","link":"<a href=\"Print.html#setText\">setText</a>","description":"<p>Set spinner text</p>"},{"title":"Print#spinner","link":"<a href=\"Print.html#spinner\">spinner</a>","description":"<p>Create a new spinner</p>"},{"title":"Print#start","link":"<a href=\"Print.html#start\">start</a>","description":"<p>Start the spinner</p>"},{"title":"Print#stop","link":"<a href=\"Print.html#stop\">stop</a>","description":"<p>Stop the spinner</p>"},{"title":"Print#succeed","link":"<a href=\"Print.html#succeed\">succeed</a>","description":"<p>Print success message, prefixed with a check icon</p>"},{"title":"Print#warn","link":"<a href=\"Print.html#warn\">warn</a>","description":"<p>Print warning message, prefixed with a warn icon</p>"},{"title":"Print#write","link":"<a href=\"Print.html#write\">write</a>","description":"<p>Interpolate and translate text according to the chosen language</p>"},{"title":"module:class/helper/bajo","link":"<a href=\"module-class_helper_bajo.html\">class/helper/bajo</a>"},{"title":"module:class/helper/bajo.bootOrder","link":"<a href=\"module-class_helper_bajo.html#.bootOrder\">bootOrder</a>","description":"<p>Setup plugins boot orders by reading plugin's <code>.bootorder</code> file if provided.</p>"},{"title":"module:class/helper/bajo.bootPlugins","link":"<a href=\"module-class_helper_bajo.html#.bootPlugins\">bootPlugins</a>","description":"<p>Iterate through all plugins loaded and do:</p>\n<ol>\n<li>{@link module:class/helper/bajo-plugin.buildConfigs|build configs}</li>\n<li>{@link module:class/helper/bajo-plugin.checkNameAliases|ensure names & aliases uniqueness}</li>\n<li>{@link module:class/helper/bajo-plugin.checkDependencies|ensure dependencies are met}</li>\n<li>{@link module:class/helper/bajo-plugin.attachMethods|build and attach dynamic methods}</li>\n<li>{@link module:class/helper/bajo-plugin.collectHooks|collect hooks}</li>\n<li>{@link module:class/helper/bajo-plugin.run|run plugins}</li>\n</ol>"},{"title":"module:class/helper/bajo.buildBaseConfig","link":"<a href=\"module-class_helper_bajo.html#.buildBaseConfig\">buildBaseConfig</a>","description":"<p>Building bajo base config. Mostly dealing with directory setups:</p>\n<ul>\n<li>determine base directory</li>\n<li>check whether data directory is valid</li>\n<li>ensure data config directory is there</li>\n</ul>"},{"title":"module:class/helper/bajo.buildExtConfig","link":"<a href=\"module-class_helper_bajo.html#.buildExtConfig\">buildExtConfig</a>","description":"<p>Bajo extra config:</p>\n<ul>\n<li>reading config file</li>\n<li>merge config with arguments & environments values</li>\n<li>Set environment (<code>dev</code> or <code>prod</code>)</li>\n</ul>"},{"title":"module:class/helper/bajo.buildPlugins","link":"<a href=\"module-class_helper_bajo.html#.buildPlugins\">buildPlugins</a>","description":"<p>Building all plugins:</p>\n<ul>\n<li>read the list of plugins from <code>.plugins</code> file</li>\n<li>iterate through the list and build related plugins</li>\n<li>attach these plugins to the app instance</li>\n</ul>"},{"title":"module:class/helper/bajo.collectConfigHandlers","link":"<a href=\"module-class_helper_bajo.html#.collectConfigHandlers\">collectConfigHandlers</a>","description":"<p>Collect all config handlers, including the one provided by plugins</p>"},{"title":"module:class/helper/bajo.exitHandler","link":"<a href=\"module-class_helper_bajo.html#.exitHandler\">exitHandler</a>","description":"<p>Attach plugins exit handlers and make sure the app shutdowns gracefully</p>"},{"title":"module:class/helper/bajo.runAsApplet","link":"<a href=\"module-class_helper_bajo.html#.runAsApplet\">runAsApplet</a>","description":"<p>If app is in <code>applet</code> mode, this little helper should take care plugin's applet boot process</p>"},{"title":"module:class/helper/plugin","link":"<a href=\"module-class_helper_plugin.html\">class/helper/plugin</a>"},{"title":"module:class/helper/plugin.attachMethods","link":"<a href=\"module-class_helper_plugin.html#.attachMethods\">attachMethods</a>","description":"<p>Scan plugins <code>method</code> directories, and turn + attach its found files as methods dynamically.</p>"},{"title":"module:class/helper/plugin.buildConfigs","link":"<a href=\"module-class_helper_plugin.html#.buildConfigs\">buildConfigs</a>","description":"<p>Build configurations</p>"},{"title":"module:class/helper/plugin.checkDependencies","link":"<a href=\"module-class_helper_plugin.html#.checkDependencies\">checkDependencies</a>","description":"<p>Ensure dependencies are met</p>"},{"title":"module:class/helper/plugin.checkNameAliases","link":"<a href=\"module-class_helper_plugin.html#.checkNameAliases\">checkNameAliases</a>","description":"<p>Ensure for names and aliases to be unique and no clashes with other plugins</p>"},{"title":"module:class/helper/plugin.collectHooks","link":"<a href=\"module-class_helper_plugin.html#.collectHooks\">collectHooks</a>","description":"<p>Collect and build hooks and push them to the bajo's hook system</p>"},{"title":"module:class/helper/plugin.run","link":"<a href=\"module-class_helper_plugin.html#.run\">run</a>","description":"<p>Finally, run all plugins</p>"},{"title":"module:lib/create-method","link":"<a href=\"module-lib_create-method.html\">lib/create-method</a>"},{"title":"module:lib/create-method~createMethod","link":"<a href=\"module-lib_create-method.html#~createMethod\">createMethod</a>","description":"<p>This function scan directory for <code>.js</code> and <code>.json</code> files, read its content, and\nturn it to become a class method by attach it to its scope (its class instance) dynamically.</p>\n<p>File path is camel-cased and become the method name. File that starts with underscore (eg: <code>_my-file.js</code>)\nis ignored; usefull to use such file as your shared library.</p>"},{"title":"module:lib/formats","link":"<a href=\"module-lib_formats.html\">lib/formats</a>"},{"title":"module:lib/formats~DataType","link":"<a href=\"module-lib_formats.html#~DataType\">DataType</a>"},{"title":"module:lib/formats~FormatType","link":"<a href=\"module-lib_formats.html#~FormatType\">FormatType</a>"},{"title":"module:lib/log-levels","link":"<a href=\"module-lib_log-levels.html\">lib/log-levels</a>"},{"title":"module:lib/log-levels~LogLevelsType","link":"<a href=\"module-lib_log-levels.html#~LogLevelsType\">LogLevelsType</a>"},{"title":"module:lib/resolve-path","link":"<a href=\"module-lib_resolve-path.html\">lib/resolve-path</a>"},{"title":"module:lib/resolve-path~resolvePath","link":"<a href=\"module-lib_resolve-path.html#~resolvePath\">resolvePath</a>","description":"<p>Resolve file name to filesystem's path. Windows path separator <code>\\</code>\nis normalized to Unix's <code>/</code></p>"},{"title":"module:lib/shim","link":"<a href=\"module-lib_shim.html\">lib/shim</a>"},{"title":"module:lib/shim~shim","link":"<a href=\"module-lib_shim.html#~shim\">shim</a>","description":"<p>Function to attach some of the methods needed but probably not provided by your node installation:</p>\n<ul>\n<li><code>String.prototype.replaceAll</code></li>\n<li><code>String.prototype.splice</code></li>\n</ul>"}]}
|
|
1
|
+
{"list":[{"title":"App","link":"<a href=\"App.html\">App</a>"},{"title":"App#addPlugin","link":"<a href=\"App.html#addPlugin\">addPlugin</a>","description":"<p>Add and save plugin and it's class definition (if provided)</p>"},{"title":"App#applet","link":"<a href=\"App.html#applet\">applet</a>","description":"<p>If app runs in applet mode, this will be the applet's name</p>"},{"title":"App#applets","link":"<a href=\"App.html#applets\">applets</a>","description":"<p>Applets</p>"},{"title":"App#args","link":"<a href=\"App.html#args\">args</a>","description":"<p>Program arguments</p>\n<pre class=\"prettyprint source\"><code>$ node index.js arg1 arg2\n...\nconsole.log(this.args) // it should print: ['arg1', 'arg2']\n</code></pre>"},{"title":"App#argv","link":"<a href=\"App.html#argv\">argv</a>","description":"<p>Program options.</p>\n<ul>\n<li>Dash (<code>-</code>) breaks the string into object keys</li>\n<li>While colon (<code>:</code>) is used as namespace separator. If no namespace found, it is saved under <code>_</code> key.</li>\n</ul>\n<p>Values are parsed automatically. See {@link https://github.com/ladjs/dotenv-parse-variables|dotenv-parse-variables}\nfor details.</p>\n<pre class=\"prettyprint source\"><code>$ node index.js --my-name-first=John --my-name-last=Doe --my-birthDay=secret --nameSpace:path-subPath=true\n...\n// {\n// _: {\n// my: {\n// name: { first: 'John', last: 'Doe' },\n// birthDay: 'secret'\n// }\n// },\n// nameSpace: { path: { subPath: true } }\n// }\n</code></pre>"},{"title":"App#boot","link":"<a href=\"App.html#boot\">boot</a>","description":"<p>Boot process:</p>\n<ul>\n<li>Parsing {@link module:Lib.parseArgsArgv|program arguments, options} and {@link module:Lib.parseEnv|environment values}</li>\n<li>Create {@link Bajo|Bajo} instance & initialize it</li>\n<li>{@link module:Helper/Bajo.runAsApplet|Run in applet mode} if <code>-a</code> or <code>--applet</code> is given</li>\n</ul>\n<p>After boot process is completed, event <code>bajo:afterBootComplete</code> is emitted.</p>\n<p>If app mode is <code>applet</code>, it runs your choosen applet instead.</p>"},{"title":"App#configHandlers","link":"<a href=\"App.html#configHandlers\">configHandlers</a>","description":"<p>Config handlers.</p>\n<p>By default, there are two built-in handlers available: <code>.js</code>\nand <code>.json</code>. Use plugins to add more, e.g {@link https://github.com/ardhi/bajo-config|bajo-config}\nlets you to use <code>.yaml/.yml</code> and <code>.toml</code></p>"},{"title":"App#dump","link":"<a href=\"App.html#dump\">dump</a>","description":"<p>Dumping variable on screen. Like <code>console.log</code> but with max 10 depth.</p>"},{"title":"App#envVars","link":"<a href=\"App.html#envVars\">envVars</a>","description":"<p>Environment variables. Support dotenv (<code>.env</code>) file too!</p>\n<ul>\n<li>Underscore (<code>_</code>) translates key to camel-cased one</li>\n<li>Double underscores (<code>__</code>) breaks the key into object keys</li>\n<li>While dot (<code>.</code>) is used as namespace separator. If no namespace found, it is saved under <code>_</code> key.</li>\n</ul>\n<p>Values are also parsed automatically using {@link https://github.com/ladjs/dotenv-parse-variables|dotenv-parse-variables}.</p>\n<p>Example:</p>\n<ul>\n<li><code>MY_KEY=secret</code> → <code>{ _: { myKey: 'secret' } }</code></li>\n<li><code>MY_KEY__SUB_KEY=supersecret</code> → <code>{ _: { myKey: { subKey: 'supersecret' } } }</code></li>\n<li><code>MY_NS.MY_NAME=John</code> → <code>{ myNs: { myName: 'John' } }</code></li>\n</ul>"},{"title":"App#exit","link":"<a href=\"App.html#exit\">exit</a>","description":"<p>Terminate the app and back to console</p>"},{"title":"App#getAllNs","link":"<a href=\"App.html#getAllNs\">getAllNs</a>","description":"<p>Get all loaded plugin namesspaces</p>"},{"title":"App#getConfigFormats","link":"<a href=\"App.html#getConfigFormats\">getConfigFormats</a>","description":"<p>Helper method to list all supported config formats</p>"},{"title":"App#lib","link":"<a href=\"App.html#lib\">lib</a>","description":"<p>Gives you direct access to the most commonly used 3rd party library in a Bajo based app.\nNo manual import necessary, always available, anywhere, anytime!</p>\n<p>Example:</p>\n<pre class=\"prettyprint source lang-javascript\"><code>const { camelCase, kebabCase } = this.app.lib._\nconsole.log(camelCase('Elit commodo sit et aliqua'))\n</code></pre>"},{"title":"App#loadIntl","link":"<a href=\"App.html#loadIntl\">loadIntl</a>","description":"<p>Load internationalization & languages files for particular plugin</p>"},{"title":"App#log","link":"<a href=\"App.html#log\">log</a>","description":"<p>Instance of system log</p>"},{"title":"App#pluginClass","link":"<a href=\"App.html#pluginClass\">pluginClass</a>","description":"<p>All plugin's class definitions are saved here as key-value pairs with plugin name as its key.\nThe special key <code>base</code> is for {@link Base}'s class so anytime you want to\ncreate your own plugin, just use something like this:</p>\n<pre class=\"prettyprint source lang-javascript\"><code>class MyPlugin extends this.app.pluginClass.base {\n ... your class\n}</code></pre>"},{"title":"App#pluginPkgs","link":"<a href=\"App.html#pluginPkgs\">pluginPkgs</a>","description":"<p>List of all loaded plugin's package names</p>"},{"title":"App#runAt","link":"<a href=\"App.html#runAt\">runAt</a>","description":"<p>Date/time when your app start</p>"},{"title":"App#t","link":"<a href=\"App.html#t\">t</a>","description":"<p>Translate text and interpolate with given <code>args</code>.</p>\n<p>There is a shortcut to this method attached on all plugins. You'll normally call that shorcut\ninstead of this method, because it is bound to plugin's name already</p>\n<pre class=\"prettyprint source lang-javascript\"><code>... within your main plugin\nconst translated = this.app.t('main', 'My cute cat is %s', 'purring')\n// or\nconst translated = this.t('My cute cat is %s', 'purring')\n</code></pre>"},{"title":"App.envs","link":"<a href=\"App.html#.envs\">envs</a>","description":"<p>App environments</p>"},{"title":"App.mainNs","link":"<a href=\"App.html#.mainNs\">mainNs</a>","description":"<p>Your main namespace. And yes, you suppose to NOT CHANGE this</p>"},{"title":"Bajo","link":"<a href=\"Bajo.html\">Bajo</a>"},{"title":"Bajo#breakNsPath","link":"<a href=\"Bajo.html#breakNsPath\">breakNsPath</a>","description":"<p>Break name to its namespace & path infos</p>"},{"title":"Bajo#buildCollections","link":"<a href=\"Bajo.html#buildCollections\">buildCollections</a>","description":"<p>Method to transform config's array or object into an array of collection.</p>"},{"title":"Bajo#buildNsPath","link":"<a href=\"Bajo.html#buildNsPath\">buildNsPath</a>","description":"<p>Build ns/path pairs</p>"},{"title":"Bajo#callHandler","link":"<a href=\"Bajo.html#callHandler\">callHandler</a>","description":"<p>Calling any plugin's method by its name:</p>\n<ul>\n<li>If name is a string, the corresponding plugin's method will be called with passed args as its parameters</li>\n<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>\n<li>If name is a function, this function will be run under scope with the remaining args</li>\n<li>If name is an object and has <code>handler</code> key in it, this function handler will be instead</li>\n</ul>"},{"title":"Bajo#config","link":"<a href=\"Bajo.html#config\">config</a>","description":"<p>Config object</p>"},{"title":"Bajo#eachPlugins","link":"<a href=\"Bajo.html#eachPlugins\">eachPlugins</a>","description":"<p>This function iterates through all loaded plugins and call the provided handler scoped as the running plugin.\nAnd an object with the following key serves as its parameter:</p>\n<ul>\n<li><code>file</code>: file matched the glob pattern</li>\n<li><code>dir</code>: plugin's base directory</li>\n</ul>"},{"title":"Bajo#findDeep","link":"<a href=\"Bajo.html#findDeep\">findDeep</a>","description":"<p>Find item deep in paths</p>"},{"title":"Bajo#format","link":"<a href=\"Bajo.html#format\">format</a>","description":"<p>Format value</p>"},{"title":"Bajo#formatByType","link":"<a href=\"Bajo.html#formatByType\">formatByType</a>","description":"<p>Format value by type</p>"},{"title":"Bajo#freeze","link":"<a href=\"Bajo.html#freeze\">freeze</a>","description":"<p>Freeze object</p>"},{"title":"Bajo#generateId","link":"<a href=\"Bajo.html#generateId\">generateId</a>","description":"<p>Generate unique random characters that can be used as ID. Use {@link https://github.com/ai/nanoid|nanoid} under the hood</p>"},{"title":"Bajo#getGlobalModuleDir","link":"<a href=\"Bajo.html#getGlobalModuleDir\">getGlobalModuleDir</a>","description":"<p>Get NPM global module directory</p>"},{"title":"Bajo#getMethod","link":"<a href=\"Bajo.html#getMethod\">getMethod</a>","description":"<p>Get class method by name</p>"},{"title":"Bajo#getModuleDir","link":"<a href=\"Bajo.html#getModuleDir\">getModuleDir</a>","description":"<p>Get module directory, locally and globally</p>"},{"title":"Bajo#getPlugin","link":"<a href=\"Bajo.html#getPlugin\">getPlugin</a>","description":"<p>Get plugin by name</p>"},{"title":"Bajo#getPluginDataDir","link":"<a href=\"Bajo.html#getPluginDataDir\">getPluginDataDir</a>","description":"<p>Get plugin data directory</p>"},{"title":"Bajo#getPluginFile","link":"<a href=\"Bajo.html#getPluginFile\">getPluginFile</a>","description":"<p>Resolve file path from:</p>\n<ul>\n<li>local/absolute file</li>\n<li>TNsPath (<code>myPlugin:/path/to/file.txt</code>)</li>\n</ul>"},{"title":"Bajo#getUnitFormat","link":"<a href=\"Bajo.html#getUnitFormat\">getUnitFormat</a>","description":"<p>Get unit format</p>"},{"title":"Bajo#importModule","link":"<a href=\"Bajo.html#importModule\">importModule</a>","description":"<p>Import file/module from any loaded plugins.</p>\n<p>Method proxy from {@link module:Lib.importModule}</p>"},{"title":"Bajo#importPkg","link":"<a href=\"Bajo.html#importPkg\">importPkg</a>","description":"<p>Import one or more packages belongs to a plugin.</p>\n<p>If the last arguments passed is an object, this object serves as options object:</p>\n<ul>\n<li><code>returnDefault</code>: should return package's default export. Defaults to <code>true</code></li>\n<li><code>throwNotFound</code>: should throw if package is not found. Defaults to <code>false</code></li>\n<li><code>noCache</code>: always use fresh import. Defaults to <code>false</code></li>\n<li><code>asObject</code>: see below. Defaults to <code>false</code></li>\n</ul>\n<p>Return value:</p>\n<ul>\n<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>\n<li>Otherwise depends on how many parameters are provided, it should return the named package or an array of packages</li>\n</ul>\n<p>Example: you want to import <code>delay</code> and <code>chalk</code> from <code>bajo</code> plugin because you want to use it in your code</p>\n<pre class=\"prettyprint source lang-javascript\"><code>const { importPkg } from this.app.bajo\nconst [delay, chalk] = await importPkg('bajo:delay', 'bajo:chalk')\n\nawait delay(1000)\n...\n</code></pre>"},{"title":"Bajo#init","link":"<a href=\"Bajo.html#init\">init</a>","description":"<p>Initialization:</p>\n<ol>\n<li>Building {@link module:Helper/Bajo.buildBaseConfig|base config}</li>\n<li>{@link module:Helper/Bajo.buildPlugins|Building plugins}</li>\n<li>Collect all {@link module:Helper/Bajo.collectConfigHandlers|config handler}</li>\n<li>Building {@link module:Helper/Bajo.buildExtConfig|extra config}</li>\n<li>Setup {@link module:Helper/Bajo.bootOrder|boot order}</li>\n<li>{@link module:Helper/Bajo.bootPlugins|Boot loaded plugins}</li>\n<li>Attach {@link module:Helper/Bajo.exitHandler|exit handlers}</li>\n</ol>"},{"title":"Bajo#isEmptyDir","link":"<a href=\"Bajo.html#isEmptyDir\">isEmptyDir</a>","description":"<p>Check whether a directory is empty or not. More info please {@link https://github.com/gulpjs/empty-dir|check here}.</p>"},{"title":"Bajo#isLogInRange","link":"<a href=\"Bajo.html#isLogInRange\">isLogInRange</a>","description":"<p>Check whether log level is within log's app current level</p>"},{"title":"Bajo#isValidApp","link":"<a href=\"Bajo.html#isValidApp\">isValidApp</a>","description":"<p>Check whether directory is a valid Bajo app</p>"},{"title":"Bajo#isValidPlugin","link":"<a href=\"Bajo.html#isValidPlugin\">isValidPlugin</a>","description":"<p>Check whether directory is a valid Bajo plugin</p>"},{"title":"Bajo#join","link":"<a href=\"Bajo.html#join\">join</a>","description":"<p>Human friendly join array of items.</p>"},{"title":"Bajo#numUnit","link":"<a href=\"Bajo.html#numUnit\">numUnit</a>","description":"<p>Return its numeric portion of a value</p>"},{"title":"Bajo#parseDt","link":"<a href=\"Bajo.html#parseDt\">parseDt</a>","description":"<p>Parse datetime string as Javascript date object. Please visit {@link https://day.js.org|dayjs} for valid formats and more infos</p>"},{"title":"Bajo#parseDur","link":"<a href=\"Bajo.html#parseDur\">parseDur</a>","description":"<p>Parse duration to its millisecond value. Use {@link https://github.com/vercel/ms|ms} under the hood</p>"},{"title":"Bajo#parseObject","link":"<a href=\"Bajo.html#parseObject\">parseObject</a>","description":"<p>Parse an object and optionally normalize its values recursively. Use {@link https://github.com/ladjs/dotenv-parse-variables}\nto parse values, so please have a visit to know how it works</p>\n<p>If <code>options.parseValue</code> is <code>true</code>, any key ends with <code>Dur</code> and <code>Dt</code> will\nalso be parsed as millisecond and Javascript date time accordingly.</p>"},{"title":"Bajo#readAllConfigs","link":"<a href=\"Bajo.html#readAllConfigs\">readAllConfigs</a>","description":"<p>Read all config files by path</p>"},{"title":"Bajo#readConfig","link":"<a href=\"Bajo.html#readConfig\">readConfig</a>","description":"<p>Read and parse file as config object. Supported types: <code>.js</code> and <code>.json</code>.\nMore supports can be added using plugin. {@link https://github.com/ardhi/bajo-config|bajo-config} gives you additional supports for <code>.yml</code>, <code>.yaml</code> and <code>.toml</code> file</p>\n<p>If file extension is <code>.*</code>, it will be auto detected and parsed accordingly</p>"},{"title":"Bajo#readJson","link":"<a href=\"Bajo.html#readJson\">readJson</a>","description":"<p>Read and parse json file</p>"},{"title":"Bajo#resolvePath","link":"<a href=\"Bajo.html#resolvePath\">resolvePath</a>","description":"<p>Resolve file name to filesystem's path. Windows path separator <code>\\</code>\nis normalized to Unix's <code>/</code></p>"},{"title":"Bajo#runHook","link":"<a href=\"Bajo.html#runHook\">runHook</a>","description":"<p>Run named hook/event</p>"},{"title":"Bajo#saveAsDownload","link":"<a href=\"Bajo.html#saveAsDownload\">saveAsDownload</a>","description":"<p>Save item as file in Bajo's download directory. That is a directory inside your\nBajo plugin's data directory.</p>\n<p>If file exists already, file will automatically be\nrenamed incrementally.</p>"},{"title":"Base","link":"<a href=\"Base.html\">Base</a>"},{"title":"Base#exit","link":"<a href=\"Base.html#exit\">exit</a>","description":"<p>Upon app termination, this method will be called first. Mostly useful for system cleanup,\ndelete temporary files, freeing resources etc.</p>"},{"title":"Base#init","link":"<a href=\"Base.html#init\">init</a>","description":"<p>After config is read, plugin will be initialized. You can still change your config here,\nbecause after plugin is initialized, config will be deep frozen.</p>"},{"title":"Base#loadConfig","link":"<a href=\"Base.html#loadConfig\">loadConfig</a>","description":"<p>Load config from file in data directory, program arguments and environment variables. Level of importance:\n<code>Env Variables > Program Arguments > Config File</code></p>"},{"title":"Base#start","link":"<a href=\"Base.html#start\">start</a>","description":"<p>This method will be called after plugin's init</p>"},{"title":"Base.dependencies","link":"<a href=\"Base.html#.dependencies\">dependencies</a>","description":"<p>Dependencies to other plugins. Enter all plugin's package name your plugin dependent from.</p>\n<p>Semver is also supported.</p>"},{"title":"Err","link":"<a href=\"Err.html\">Err</a>"},{"title":"Err#app","link":"<a href=\"Err.html#app\">app</a>","description":"<p>The app instance</p>"},{"title":"Err#fatal","link":"<a href=\"Err.html#fatal\">fatal</a>","description":"<p>Print instance on console and terminate process</p>"},{"title":"Err#formatErrorDetails","link":"<a href=\"Err.html#formatErrorDetails\">formatErrorDetails</a>","description":"<p>Pretty format error details</p>"},{"title":"Err#message","link":"<a href=\"Err.html#message\">message</a>","description":"<p>Translated message</p>"},{"title":"Err#orgMessage","link":"<a href=\"Err.html#orgMessage\">orgMessage</a>","description":"<p>Original message before translation</p>"},{"title":"Err#payload","link":"<a href=\"Err.html#payload\">payload</a>","description":"<p>Error payload extracted from the last arguments</p>"},{"title":"Err#plugin","link":"<a href=\"Err.html#plugin\">plugin</a>","description":"<p>Attached plugin</p>"},{"title":"Err#write","link":"<a href=\"Err.html#write\">write</a>","description":"<p>Write message to the console</p>"},{"title":"Log","link":"<a href=\"Log.html\">Log</a>"},{"title":"Log#app","link":"<a href=\"Log.html#app\">app</a>","description":"<p>The app instance</p>"},{"title":"Log#debug","link":"<a href=\"Log.html#debug\">debug</a>","description":"<p>Display & format message in <code>debug</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#error","link":"<a href=\"Log.html#error\">error</a>","description":"<p>Display & format message in <code>error</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#fatal","link":"<a href=\"Log.html#fatal\">fatal</a>","description":"<p>Display & format message in <code>fatal</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#formatMsg","link":"<a href=\"Log.html#formatMsg\">formatMsg</a>","description":"<p>Display & format message according to one of these rules:</p>\n<ol>\n<li><code>level</code> <code>prefix</code> <code>text</code> <code>var 1</code> <code>var 2</code> <code>...var n</code> - Translate <code>text</code> and interpolate with <code>vars</code> for level <code>level</code></li>\n<li><code>level</code> <code>prefix</code> <code>data</code> <code>text</code> <code>var 1</code> <code>var 2</code> <code>...var n</code> - As above, and append stringified <code>data</code></li>\n<li><code>level</code> <code>prefix</code> <code>error</code> - Format as {@link Err} object. If current log level is <em>trace</em>, dump it on screen</li>\n</ol>\n<p>In <code>prod</code> environment, log will be delivered as JSON stringified object. See {@link TLogJson} for more info</p>"},{"title":"Log#info","link":"<a href=\"Log.html#info\">info</a>","description":"<p>Display & format message in <code>info</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#silent","link":"<a href=\"Log.html#silent\">silent</a>","description":"<p>Display & format message in <code>silent</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#trace","link":"<a href=\"Log.html#trace\">trace</a>","description":"<p>Display & format message in <code>trace</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Log#warn","link":"<a href=\"Log.html#warn\">warn</a>","description":"<p>Display & format message in <code>warn</code> level. See {@link Log#formatMsg|formatMsg} for details</p>"},{"title":"Plugin","link":"<a href=\"Plugin.html\">Plugin</a>"},{"title":"Plugin#alias","link":"<a href=\"Plugin.html#alias\">alias</a>","description":"<p>Getter for plugin's alias</p>"},{"title":"Plugin#app","link":"<a href=\"Plugin.html#app\">app</a>","description":"<p>Reference to app instance</p>"},{"title":"Plugin#config","link":"<a href=\"Plugin.html#config\">config</a>","description":"<p>Config object</p>"},{"title":"Plugin#error","link":"<a href=\"Plugin.html#error\">error</a>","description":"<p>Create an instance of {@link Err} object</p>"},{"title":"Plugin#fatal","link":"<a href=\"Plugin.html#fatal\">fatal</a>","description":"<p>Create an instance of Err object, display it on screen and then force\nterminate the app process</p>"},{"title":"Plugin#getConfig","link":"<a href=\"Plugin.html#getConfig\">getConfig</a>","description":"<p>Get plugin's config value</p>"},{"title":"Plugin#log","link":"<a href=\"Plugin.html#log\">log</a>","description":"<p>Shortcut to {@link App#log} with prefix parameter set to this plugin name.</p>"},{"title":"Plugin#ns","link":"<a href=\"Plugin.html#ns\">ns</a>","description":"<p>Getter for plugin's ns</p>"},{"title":"Plugin#pkgName","link":"<a href=\"Plugin.html#pkgName\">pkgName</a>","description":"<p>Getter for plugin's package name</p>"},{"title":"Plugin#t","link":"<a href=\"Plugin.html#t\">t</a>","description":"<p>Translate text and interpolate with given <code>args</code>.</p>\n<p>Shortcut to {@link App#t} with ns parameter set to this plugin namespace.</p>"},{"title":"Plugin.alias","link":"<a href=\"Plugin.html#.alias\">alias</a>","description":"<p>Plugin alias. Derived plugin must provide its own, unique alias. If it left blank,\nBajo will provide this automatically (by using the kebab-cased version of plugin name)</p>"},{"title":"Plugin.ns","link":"<a href=\"Plugin.html#.ns\">ns</a>","description":"<p>Namespace (ns) or plugin's name. Simply the camel cased version of plugin's package name</p>"},{"title":"Plugin.pkgName","link":"<a href=\"Plugin.html#.pkgName\">pkgName</a>","description":"<p>Package name, the one from package.json</p>"},{"title":"Print","link":"<a href=\"Print.html\">Print</a>"},{"title":"Print#app","link":"<a href=\"Print.html#app\">app</a>","description":"<p>The app instance</p>"},{"title":"Print#buildText","link":"<a href=\"Print.html#buildText\">buildText</a>","description":"<p>Translate, prefixed with counter and/or datetime etc</p>"},{"title":"Print#clear","link":"<a href=\"Print.html#clear\">clear</a>","description":"<p>Clear spinner text</p>"},{"title":"Print#fail","link":"<a href=\"Print.html#fail\">fail</a>","description":"<p>Print failed message, prefixed with a cross icon</p>"},{"title":"Print#fatal","link":"<a href=\"Print.html#fatal\">fatal</a>","description":"<p>Print failed message, prefixed with a cross icon and exit</p>"},{"title":"Print#getElapsed","link":"<a href=\"Print.html#getElapsed\">getElapsed</a>","description":"<p>Get elapsed time since instance is created</p>"},{"title":"Print#info","link":"<a href=\"Print.html#info\">info</a>","description":"<p>Print information message, prefixed with an info icon</p>"},{"title":"Print#options","link":"<a href=\"Print.html#options\">options</a>","description":"<p>Options object</p>"},{"title":"Print#ora","link":"<a href=\"Print.html#ora\">ora</a>","description":"<p>ora instance</p>"},{"title":"Print#plugin","link":"<a href=\"Print.html#plugin\">plugin</a>","description":"<p>Attached plugin</p>"},{"title":"Print#render","link":"<a href=\"Print.html#render\">render</a>","description":"<p>Force render spinner</p>"},{"title":"Print#setOpts","link":"<a href=\"Print.html#setOpts\">setOpts</a>","description":"<p>Setting spinner options; override the one passed at constructor</p>"},{"title":"Print#setText","link":"<a href=\"Print.html#setText\">setText</a>","description":"<p>Set spinner's text</p>"},{"title":"Print#spinner","link":"<a href=\"Print.html#spinner\">spinner</a>","description":"<p>Create a new print instance</p>"},{"title":"Print#start","link":"<a href=\"Print.html#start\">start</a>","description":"<p>Start the spinner</p>"},{"title":"Print#startTime","link":"<a href=\"Print.html#startTime\">startTime</a>","description":"<p>Time when instance is created</p>"},{"title":"Print#stop","link":"<a href=\"Print.html#stop\">stop</a>","description":"<p>Stop the spinner</p>"},{"title":"Print#succeed","link":"<a href=\"Print.html#succeed\">succeed</a>","description":"<p>Print success message, prefixed with a check icon</p>"},{"title":"Print#warn","link":"<a href=\"Print.html#warn\">warn</a>","description":"<p>Print warning message, prefixed with a warn icon</p>"},{"title":"TAppConfigHandler","link":"<a href=\"global.html#TAppConfigHandler\">TAppConfigHandler</a>"},{"title":"TAppEnv","link":"<a href=\"global.html#TAppEnv\">TAppEnv</a>"},{"title":"TAppLib","link":"<a href=\"global.html#TAppLib\">TAppLib</a>"},{"title":"TBajoDataType","link":"<a href=\"global.html#TBajoDataType\">TBajoDataType</a>","description":"<p>Supported data types</p>"},{"title":"TBajoFormatResult","link":"<a href=\"global.html#TBajoFormatResult\">TBajoFormatResult</a>","description":"<p>Object returned by {@link Bajo#getUnitFormat|bajo:getUnitFormat}</p>"},{"title":"TBajoFormatType","link":"<a href=\"global.html#TBajoFormatType\">TBajoFormatType</a>","description":"<p>General format types</p>"},{"title":"TLogJson","link":"<a href=\"global.html#TLogJson\">TLogJson</a>","description":"<p>Log output in stringified JSON format. Returned when app run in <code>prod</code> environment</p>"},{"title":"TLogLevels","link":"<a href=\"global.html#TLogLevels\">TLogLevels</a>"},{"title":"TNsPathPairs","link":"<a href=\"global.html#TNsPathPairs\">TNsPathPairs</a>","description":"<p>Name based <code>{ns}:{path}</code> format</p>"},{"title":"TNsPathResult","link":"<a href=\"global.html#TNsPathResult\">TNsPathResult</a>","description":"<p>Object returned by {@link Bajo#breakNsPath|bajo:breakNsPath}</p>"},{"title":"TPrintOptions","link":"<a href=\"global.html#TPrintOptions\">TPrintOptions</a>"},{"title":"bajo:afterAll{method}","link":"<a href=\"global.html#event:bajo:afterAll%257Bmethod%257D\">bajo:afterAll{method}</a>","description":"<p>Run after all <code>{method}</code> executed. Accepted <code>{method}</code>: <code>Init</code> or <code>Start</code></p>"},{"title":"bajo:afterBootComplete","link":"<a href=\"global.html#event:bajo:afterBootComplete\">bajo:afterBootComplete</a>","description":"<p>Run after boot process is completed</p>"},{"title":"bajo:afterBuildCollection","link":"<a href=\"global.html#event:bajo:afterBuildCollection\">bajo:afterBuildCollection</a>","description":"<p>Run after collection is built</p>"},{"title":"bajo:afterCollectHooks","link":"<a href=\"global.html#event:bajo:afterCollectHooks\">bajo:afterCollectHooks</a>","description":"<p>Run after hooks are collected</p>"},{"title":"bajo:beforeAll{method}","link":"<a href=\"global.html#event:bajo:beforeAll%257Bmethod%257D\">bajo:beforeAll{method}</a>","description":"<p>Run before all <code>{method}</code> executed. Accepted <code>{method}</code>: <code>Init</code> or <code>Start</code></p>"},{"title":"bajo:beforeBuildCollection","link":"<a href=\"global.html#event:bajo:beforeBuildCollection\">bajo:beforeBuildCollection</a>","description":"<p>Run before collection is built</p>"},{"title":"boot","link":"<a href=\"global.html#boot\">boot</a>","description":"<p>Main entry point of a Bajo app. Returned value is the app instance itself.</p>\n<p>While you can code directly around it, you typically write your code the main plugin (<code>{mainNs}</code>) or\nwriting your own custom plugin.</p>\n<p>I recommend the second method for its portability.</p>\n<p>Example:</p>\n<pre class=\"prettyprint source lang-javascript\"><code>// index.js file. Your main package entry point\nimport bajo from 'bajo'\nawait bajo()\n</code></pre>"},{"title":"event:{ns}:afterAppletRun","link":"<a href=\"global.html#event:%257Bns%257D:afterAppletRun\">{ns}:afterAppletRun</a>","description":"<p>Run after applet is run. <code>[ns]</code> is applet's namespace</p>"},{"title":"event:{ns}:after{method}","link":"<a href=\"global.html#event:%257Bns%257D:after%257Bmethod%257D\">{ns}:after{method}</a>","description":"<p>Run after <code>{method}</code> is executed within <code>{ns}</code> context</p>\n<ul>\n<li><code>{ns}</code> - namespace</li>\n<li><code>{method}</code> - Accepted methods: <code>Init</code> or <code>Start</code></li>\n</ul>"},{"title":"event:{ns}:beforeAppletRun","link":"<a href=\"global.html#event:%257Bns%257D:beforeAppletRun\">{ns}:beforeAppletRun</a>","description":"<p>Run before applet is run. <code>[ns]</code> is applet's namespace</p>"},{"title":"event:{ns}:before{method}","link":"<a href=\"global.html#event:%257Bns%257D:before%257Bmethod%257D\">{ns}:before{method}</a>","description":"<p>Run before <code>{method}</code> is executed within <code>{ns}</code> context</p>\n<ul>\n<li><code>{ns}</code> - namespace</li>\n<li><code>{method}</code> - Accepted methods: <code>Init</code> or <code>Start</code></li>\n</ul>"},{"title":"module:Helper/Bajo","link":"<a href=\"module-Helper_Bajo.html\">Helper/Bajo</a>","description":"<p>Internal helpers called by Bajo that only used once for bootstrapping. It should remains\nhidden and not to be imported by any program.</p>"},{"title":"module:Helper/Bajo.bootOrder","link":"<a href=\"module-Helper_Bajo.html#.bootOrder\">bootOrder</a>","description":"<p>Setup plugins boot orders by reading plugin's <code>.bootorder</code> file if provided.</p>"},{"title":"module:Helper/Bajo.bootPlugins","link":"<a href=\"module-Helper_Bajo.html#.bootPlugins\">bootPlugins</a>","description":"<p>Iterate through all plugins loaded and do:</p>\n<ol>\n<li>{@link module:Helper/Base.buildConfigs|build configs}</li>\n<li>{@link module:Helper/Base.checkNameAliases|ensure names & aliases uniqueness}</li>\n<li>{@link module:Helper/Base.checkDependencies|ensure dependencies are met}</li>\n<li>{@link module:Helper/Base.attachMethods|build and attach dynamic methods}</li>\n<li>{@link module:Helper/Base.collectHooks|collect hooks}</li>\n<li>{@link module:Helper/Base.run|run plugins}</li>\n</ol>"},{"title":"module:Helper/Bajo.buildBaseConfig","link":"<a href=\"module-Helper_Bajo.html#.buildBaseConfig\">buildBaseConfig</a>","description":"<p>Building bajo base config. Mostly dealing with directory setups:</p>\n<ul>\n<li>determine base directory</li>\n<li>check whether data directory is valid. If not exist, create one inside app dir</li>\n<li>ensure data config directory is there</li>\n<li>ensure tmp dir is there</li>\n<li>read the list of plugins from <code>.plugins</code> file</li>\n</ul>"},{"title":"module:Helper/Bajo.buildExtConfig","link":"<a href=\"module-Helper_Bajo.html#.buildExtConfig\">buildExtConfig</a>","description":"<p>Bajo extra config:</p>\n<ul>\n<li>reading config file</li>\n<li>merge config with arguments & environments values</li>\n<li>Set environment (<code>dev</code> or <code>prod</code>)</li>\n</ul>"},{"title":"module:Helper/Bajo.buildPlugins","link":"<a href=\"module-Helper_Bajo.html#.buildPlugins\">buildPlugins</a>","description":"<p>Building all plugins:</p>\n<ul>\n<li>load from app's pluginPkgs</li>\n<li>iterate through the list and build related plugins</li>\n<li>making sure main plugin is there. If not, create from template</li>\n<li>attach these plugins to the app instance</li>\n</ul>"},{"title":"module:Helper/Bajo.collectConfigHandlers","link":"<a href=\"module-Helper_Bajo.html#.collectConfigHandlers\">collectConfigHandlers</a>","description":"<p>Collect all config handlers, including the one provided by plugins</p>"},{"title":"module:Helper/Bajo.exitHandler","link":"<a href=\"module-Helper_Bajo.html#.exitHandler\">exitHandler</a>","description":"<p>Attach plugins exit handlers and make sure the app shutdowns gracefully</p>"},{"title":"module:Helper/Bajo.runAsApplet","link":"<a href=\"module-Helper_Bajo.html#.runAsApplet\">runAsApplet</a>","description":"<p>If app is in <code>applet</code> mode, this little helper should take care plugin's applet boot process</p>"},{"title":"module:Helper/Base","link":"<a href=\"module-Helper_Base.html\">Helper/Base</a>","description":"<p>Internal helpers called by Bajo & plugins that only used once for bootstrapping purpose.\nIt should remains hidden and not to be imported by any program.</p>"},{"title":"module:Helper/Base.attachMethods","link":"<a href=\"module-Helper_Base.html#.attachMethods\">attachMethods</a>","description":"<p>Scan plugins <code>method</code> directories, and turn + attach its found files as methods dynamically.</p>"},{"title":"module:Helper/Base.buildConfigs","link":"<a href=\"module-Helper_Base.html#.buildConfigs\">buildConfigs</a>","description":"<p>Build configurations</p>"},{"title":"module:Helper/Base.checkDependencies","link":"<a href=\"module-Helper_Base.html#.checkDependencies\">checkDependencies</a>","description":"<p>Ensure dependencies are met</p>"},{"title":"module:Helper/Base.checkNameAliases","link":"<a href=\"module-Helper_Base.html#.checkNameAliases\">checkNameAliases</a>","description":"<p>Ensure for names and aliases to be unique and no clashes with other plugins</p>"},{"title":"module:Helper/Base.collectHooks","link":"<a href=\"module-Helper_Base.html#.collectHooks\">collectHooks</a>","description":"<p>Collect and build hooks and push them to the bajo's hook system</p>"},{"title":"module:Helper/Base.run","link":"<a href=\"module-Helper_Base.html#.run\">run</a>","description":"<p>Finally, run all plugins</p>"},{"title":"module:Lib","link":"<a href=\"module-Lib.html\">Lib</a>","description":"<p>External helpers you can use by importing its file directly</p>"},{"title":"module:Lib.currentLoc","link":"<a href=\"module-Lib.html#.currentLoc\">currentLoc</a>","description":"<p>Get current directory & file. An attempt to brings back the old <code>__dirname</code> and <code>__filename</code>\nto the ES6 era.</p>\n<p>Returns object with the following keys:</p>\n<ul>\n<li><code>__dirname</code> (aliases to <code>dir</code>) - current directory name</li>\n<li><code>__filename</code> (aliases to <code>file</code>) - current file path</li>\n</ul>\n<p>Example:</p>\n<pre class=\"prettyprint source lang-javascript\"><code>const { importModule } = this.app.bajo\nconst currentLoc = await importModule('bajo:/lib/current-loc.js')\n\nconst { __dirname, __filename } = currentLoc(import.meta)\nconsole.log(__dirname, __filename)\n</code></pre>"},{"title":"module:Lib.importModule","link":"<a href=\"module-Lib.html#.importModule\">importModule</a>","description":"<p>Import file/module from any loaded plugins</p>\n<p>Example: your plugin structure looks like this</p>\n<pre class=\"prettyprint source\"><code>|- src\n| |- lib\n| | |- my-module.js\n|- index.js\n|- package.json\n</code></pre>\n<p>And now this is how to import <code>my-module.js</code>:</p>\n<pre class=\"prettyprint source lang-javascript\"><code>const { importModule } = this.app.bajo\nconst myModule = await importModule('myPlugin:/src/lib/my-module.js')\n</code></pre>"},{"title":"module:Lib.parseArgsArgv","link":"<a href=\"module-Lib.html#.parseArgsArgv\">parseArgsArgv</a>","description":"<p>Parse program arguments (args) & options (argv). See {@link App#args|args} & {@link App#argv|argv} for examples</p>"},{"title":"module:Lib.parseEnv","link":"<a href=\"module-Lib.html#.parseEnv\">parseEnv</a>","description":"<p>Parse environment variables. See {@link App#envVars|envVars} for examples</p>"},{"title":"module:Lib.resolvePath","link":"<a href=\"module-Lib.html#.resolvePath\">resolvePath</a>","description":"<p>Resolve file name to filesystem's path. Windows path separator <code>\\</code>\nis normalized to Unix's <code>/</code></p>"},{"title":"module:Lib.shim","link":"<a href=\"module-Lib.html#.shim\">shim</a>","description":"<p>Function to attach some of the methods needed but probably not provided by your node installation:</p>\n<ul>\n<li><code>String.prototype.replaceAll</code></li>\n<li><code>String.prototype.splice</code></li>\n</ul>"}]}
|