bajo 2.23.0 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/.jsdoc.conf.json +2 -1
  2. package/class/app.js +220 -107
  3. package/class/bajo.js +257 -177
  4. package/class/base.js +85 -24
  5. package/class/cache.js +8 -16
  6. package/class/err.js +31 -10
  7. package/class/log.js +46 -38
  8. package/class/plugin.js +53 -30
  9. package/class/print.js +18 -15
  10. package/class/tools.js +17 -7
  11. package/docs/App.html +51 -1
  12. package/docs/Bajo.html +1 -1
  13. package/docs/Base.html +34 -1
  14. package/docs/Cache.html +1 -1
  15. package/docs/Err.html +2 -2
  16. package/docs/Log.html +2 -2
  17. package/docs/Main.html +3 -0
  18. package/docs/Plugin.html +1 -1
  19. package/docs/Print.html +1 -1
  20. package/docs/Tools.html +1 -1
  21. package/docs/class_app.js.html +222 -109
  22. package/docs/class_bajo.js.html +260 -179
  23. package/docs/class_base.js.html +87 -26
  24. package/docs/class_cache.js.html +10 -18
  25. package/docs/class_err.js.html +33 -12
  26. package/docs/class_log.js.html +48 -40
  27. package/docs/class_plugin.js.html +55 -32
  28. package/docs/class_print.js.html +20 -17
  29. package/docs/class_tools.js.html +19 -9
  30. package/docs/data/search.json +1 -1
  31. package/docs/global.html +22 -1
  32. package/docs/index.html +1 -1
  33. package/docs/index.js.html +53 -16
  34. package/docs/lib_applet-hook.js.html +328 -0
  35. package/docs/lib_config.js.html +167 -0
  36. package/docs/lib_helper.js.html +186 -192
  37. package/docs/module-Applet.html +3 -0
  38. package/docs/module-Helper.html +1 -8
  39. package/docs/module-Hook.html +1 -1
  40. package/docs/tutorial-01_WELCOME.html +3 -0
  41. package/docs/tutorial-02_GETTING_STARTED.html +125 -0
  42. package/docs/tutorial-03_USER_GUIDE.html +54 -0
  43. package/docs/tutorial-04_DEV_GUIDE.html +178 -0
  44. package/docs/tutorial-05_ECOSYSTEM.html +3 -0
  45. package/extend/bajo/intl/en-US.json +2 -1
  46. package/extend/bajo/intl/id.json +2 -1
  47. package/index.js +51 -14
  48. package/lib/applet-hook.js +325 -0
  49. package/lib/config.js +164 -0
  50. package/lib/helper.js +185 -191
  51. package/package.json +6 -2
  52. package/test/00-global-hooks.test.js +44 -0
  53. package/test/e2e/_run.js +19 -0
  54. package/test/e2e/e2e-applet-process.test.js +66 -0
  55. package/test/e2e/e2e-boot-process.test.js +62 -0
  56. package/test/e2e/e2e-hooks-process.test.js +68 -0
  57. package/test/integration/_setup.js +55 -0
  58. package/test/integration/aspect-01-boot-instance.test.js +24 -0
  59. package/test/integration/aspect-02-plugin-loading.test.js +24 -0
  60. package/test/integration/aspect-03-config-merge.test.js +27 -0
  61. package/test/integration/aspect-04-intl-loading.test.js +29 -0
  62. package/test/integration/aspect-05-cache-roundtrip.test.js +26 -0
  63. package/test/integration/aspect-06-log-file-save.test.js +28 -0
  64. package/test/integration/aspect-07-plugin-data-dir.test.js +25 -0
  65. package/test/integration/aspect-08-plugin-lookup.test.js +25 -0
  66. package/test/integration/aspect-09-config-formats.test.js +26 -0
  67. package/test/integration/aspect-10-hooks.test.js +38 -0
  68. package/test/unit/app.test.js +115 -0
  69. package/test/unit/applet-hook.test.js +10 -0
  70. package/test/unit/bajo.test.js +151 -0
  71. package/test/unit/base.test.js +90 -0
  72. package/test/unit/cache.test.js +89 -0
  73. package/test/unit/config.test.js +14 -0
  74. package/test/unit/err.test.js +57 -0
  75. package/test/unit/helper.test.js +116 -0
  76. package/test/unit/index.test.js +40 -0
  77. package/test/unit/log.test.js +84 -0
  78. package/test/unit/plugin.test.js +95 -0
  79. package/test/unit/print.test.js +72 -0
  80. package/test/unit/tools.test.js +29 -0
  81. package/wiki/CHANGES.md +10 -0
  82. package/wiki/tutorials/01_WELCOME.md +18 -0
  83. package/wiki/tutorials/02_GETTING_STARTED.md +366 -0
  84. package/wiki/tutorials/03_USER_GUIDE.md +262 -0
  85. package/wiki/tutorials/04_DEV_GUIDE.md +386 -0
  86. package/wiki/tutorials/05_ECOSYSTEM.md +95 -0
  87. package/wiki/tutorials/tutorials.json +17 -0
  88. package/docs/lib_hook.js.html +0 -231
  89. package/docs/module-Lib.html +0 -3
  90. package/lib/hook.js +0 -228
  91. package/test/app.test.js +0 -183
  92. package/test/bajo.test.js +0 -124
  93. package/test/base.test.js +0 -75
  94. package/test/cache.test.js +0 -94
  95. package/test/e2e.test.js +0 -137
  96. package/test/err.test.js +0 -73
  97. package/test/helper.test.js +0 -39
  98. package/test/import-module.test.js +0 -138
  99. package/test/integration.test.js +0 -218
  100. package/test/log.test.js +0 -119
  101. package/test/plugin.test.js +0 -116
  102. package/test/print.test.js +0 -100
  103. package/test/tools.test.js +0 -38
  104. package/wiki/CONFIG.md +0 -36
  105. package/wiki/DEV_GUIDE.md +0 -3
  106. package/wiki/ECOSYSTEM.md +0 -93
  107. package/wiki/GETTING-STARTED.md +0 -356
  108. package/wiki/USER-GUIDE.md +0 -256
@@ -0,0 +1,328 @@
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: lib/applet-hook.js</title><!--[if lt IE 9]>
2
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">Bajo API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-01_WELCOME.html">Welcome</a></div><div class="sidebar-section-children"><a href="tutorial-02_GETTING_STARTED.html">Getting Started</a></div><div class="sidebar-section-children"><a href="tutorial-03_USER_GUIDE.html">User Guide</a></div><div class="sidebar-section-children"><a href="tutorial-04_DEV_GUIDE.html">Developer Guide</a></div><div class="sidebar-section-children"><a href="tutorial-05_ECOSYSTEM.html">Ecosystem</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Cache.html">Cache</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Main.html">Main</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div><div class="sidebar-section-children"><a href="Tools.html">Tools</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Applet.html">Applet</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div><div class="sidebar-section-children"><a href="module-Hook.html">Hook</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div><div class="sidebar-section-children"><a href="global.html#package%25C2%25B7json">package·json</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/bajo" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/bajo" target="">Github</a></div><div class="navbar-item"><a id="" href="https://bajo.app" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">lib_applet-hook.js</h1></header><article><pre class="prettyprint source lang-js"><code>/**
4
+ * # Applet
5
+ *
6
+ * Bajo has a built-in applet system that allows you to run your app as an applet.
7
+ * An applet is a small command-line app that can be embedded inside a plugin, purposefully designed
8
+ * to run a simple task mostly bound to the plugin itself. It is a convenient way to run a plugin's task
9
+ * without having to write a separate script.
10
+ *
11
+ * Since it is embedded inside a plugin, it behaves like running the whole app but doing only task
12
+ * that you want to run.
13
+ *
14
+ * Applet needs {@link https://ardhi.github.io/bajo-cli/|bajo-cli} plugin to be installed and loaded.
15
+ * This is because applet is a command-line app and `bajo-cli` plugin is specifically designed to provide
16
+ * the necessary command-line interface and function helpers to run command-line based app.
17
+ *
18
+ * So please make sure that `bajo-cli` is in your app's `package.json` file and in the `plugins`
19
+ * array of your app's config before you run an applet. Otherwise, it will throw an error.
20
+ *
21
+ * You can run an applet by using the following command:
22
+ * - `node index.js -a` or `node index.js --applet` to list all available applets and choose one to run
23
+ * - `node index.js -a &lt;pluginNs>` to list all `pluginNs` only applets and choose one to run
24
+ * - `node index.js -a &lt;pluginNs:appletName>` to run the specific applet directly
25
+ *
26
+ * On all cases, you might require to provide additional arguments and/or options to the applet.
27
+ *
28
+ * By default, applet won't show you any log output. This is by design because it could clutter your
29
+ * terminal output. If you insist on seeing the log output, you have to add the `--log-applet` option.
30
+ *
31
+ * > **Note**: all standard bajo's command line arguments and options are also available to applet,
32
+ * e.g. `--env=prod`, `--lang=id`, `--log-level=trace`, etc.
33
+ *
34
+ * > **Development** : Please visit {@link https://ardhi.github.io/bajo-cli/module-Applet.html|applet development}
35
+ * for more details on how to create an applet.
36
+ * @module Applet
37
+ */
38
+
39
+ /**
40
+ * # Hook
41
+ *
42
+ * Bajo has a hook system that allows you to run custom code before or after certain events in the framework.
43
+ * You can use hooks to modify the behavior of the framework or to add new functionality.
44
+ *
45
+ * Your hook should be put in:
46
+ * - your plugin's hook folder (also valid for app's `main` plugin), which is located in `{pluginRoot}/extend/bajo/hook`. In this case:
47
+ * - the file should be named as `{hookName}.js` for hook that listens for one name or `{hookName1}${hookName2}${hookName3}.js`
48
+ * for hook that listens for many names. It should be exported as default export
49
+ * - you can use the exact hook name or follow our convention to use kebab case for the file name, e.g. `bajo.override:after-read-config.js` for `bajo.override:afterReadConfig` hook
50
+ * - content should be a single {@link module:Hook.THook} object. If `name` property is there, it will be used as
51
+ * the hook name, otherwise it will be reconstructed from the file name. Hence the file name is important
52
+ * - or simply a function that will be used as the hook handler. In this case, all missing properties will be set to their default values
53
+ * - or as array of hook object in `{pluginRoot}/extend/bajo/hook.js` file that follows the {@link module:Hook.THook} structure
54
+ *
55
+ * > **Note**: Hook handlers can have `.` dot symbol in their name, but in documentation, the dot symbol will be replaced with `·`
56
+ * symbol because of JSDoc limitation. For example, a hook handler named `bajo.override:afterReadConfig` will be
57
+ * documented as `bajo·override:afterReadConfig`.
58
+ *
59
+ * > **Warning**: Even though hooks is a powerfull and convenient feature, it should be used with caution. Overusing hooks can lead to code
60
+ * that is difficult to understand and maintain. Use hooks only when necessary and avoid using them for simple tasks
61
+ * that can be accomplished with regular code.
62
+ * @module Hook
63
+ */
64
+
65
+ /**
66
+ * Hook structure definition. Your hook listener should be an object that follows this structure.
67
+ *
68
+ * @memberof module:Hook
69
+ * @typedef THook
70
+ * @type {Object}
71
+ * @property {string|string[]} name - Hook name or array of hook names
72
+ * @property {module:Hook.hookHandler} handler - Hook handler function
73
+ * @property {number} [level=999] - Hook level (lower number means higher priority)
74
+ * @property {string} src - Hook source (origin plugin name). Bajo will set this automatically, any value you set will be overriden.
75
+ * @property {boolean} [noWait=false] - If `true`, Bajo will not wait for this hook to complete before proceeding to the next hook. Default is `false`.
76
+ */
77
+
78
+ /**
79
+ * This is the hook handler function that will be called when the hook is triggered.
80
+ * This handler is scoped to the owning plugin, so you can use `this` to access the plugin instance and
81
+ * its properties.
82
+ * @async
83
+ * @method
84
+ * @callback hookHandler
85
+ * @memberof module:Hook
86
+ * @param {...any} args - Arguments passed to the hook handler
87
+ * @returns {Promise&lt;void>} The return value of the hook handler
88
+ */
89
+
90
+ /**
91
+ * Hook handler that runs before boot process. You can use this hook to do some pre-boot process.
92
+ *
93
+ * @name bajo:beforeBoot
94
+ * @async
95
+ * @method
96
+ * @memberof module:Hook
97
+ */
98
+
99
+ /**
100
+ * Hook handler that runs after boot process. You can use this hook to do some post-boot process.
101
+ *
102
+ * @name bajo:afterBoot
103
+ * @async
104
+ * @method
105
+ * @memberof module:Hook
106
+ */
107
+
108
+ /**
109
+ * Hook handler that runs after hooks are collected. You can use this hook to modify the collected hooks before
110
+ * they are recognized as application hooks.
111
+ *
112
+ * @async
113
+ * @method
114
+ * @name bajo:afterCollectHooks
115
+ * @memberof module:Hook
116
+ * @param {Array&lt;module:Hook~THook>} hooks - Array of hook objects
117
+ * @see module:Helper.collectHooks
118
+ */
119
+
120
+ /**
121
+ * Hook handler that runs before all plugins are initialized. You can use this hook to do some pre-initialization process.
122
+ *
123
+ * @async
124
+ * @method
125
+ * @name bajo:beforeAllInit
126
+ * @memberof module:Hook
127
+ * @see module:Helper.run
128
+ */
129
+
130
+ /**
131
+ * Hook handler that runs after all plugins are initialized. You can use this hook to do some post-initialization process.
132
+ *
133
+ * @async
134
+ * @method
135
+ * @memberof module:Hook
136
+ * @name bajo:afterAllInit
137
+ * @see module:Helper.run
138
+ */
139
+
140
+ /**
141
+ * Hook handler that runs before all plugins are started. You can use this hook to do some pre-start process.
142
+ *
143
+ * @async
144
+ * @method
145
+ * @name bajo:beforeAllStart
146
+ * @memberof module:Hook
147
+ * @see module:Helper.run
148
+ */
149
+
150
+ /**
151
+ * Hook handler that runs after all plugins are started. You can use this hook to do some post-start process.
152
+ *
153
+ * @async
154
+ * @method
155
+ * @name bajo:afterAllStart
156
+ * @memberof module:Hook
157
+ * @see module:Helper.run
158
+ */
159
+
160
+ /**
161
+ * Hook handler that runs before `{ns}` plugins are initialized. You can use this hook to do some pre-initialization process.
162
+ *
163
+ * @async
164
+ * @method
165
+ * @memberof module:Hook
166
+ * @name {ns}:beforeInit
167
+ * @see module:Helper.run
168
+ */
169
+
170
+ /**
171
+ * Hook handler that runs after `{ns}` plugins are initialized. You can use this hook to do some post-initialization process.
172
+ *
173
+ * @async
174
+ * @method
175
+ * @memberof module:Hook
176
+ * @name {ns}:afterInit
177
+ * @see module:Helper.run
178
+ */
179
+
180
+ /**
181
+ * Hook handler that runs before `{ns}` plugins are started. You can use this hook to do some pre-start process.
182
+ *
183
+ * @async
184
+ * @method
185
+ * @memberof module:Hook
186
+ * @name {ns}:beforeStart
187
+ * @see module:Helper.run
188
+ */
189
+
190
+ /**
191
+ * Hook handler that runs after `{ns}` plugins are started. You can use this hook to do some post-start process.
192
+ *
193
+ * @async
194
+ * @method
195
+ * @memberof module:Hook
196
+ * @name {ns}:afterStart
197
+ * @see module:Helper.run
198
+ */
199
+
200
+ /**
201
+ * Hook handler that runs before applet is run. `{ns}` is the applet's namespace
202
+ *
203
+ * @name {ns}:beforeAppletRun
204
+ * @async
205
+ * @method
206
+ * @memberof module:Hook
207
+ * @param {...any} args - Arguments passed to the applet
208
+ * @see module:Helper.runAsApplet
209
+ */
210
+
211
+ /**
212
+ * Hook handler that runs after applet is run. `{ns}` is the applet's namespace
213
+ *
214
+ * @name {ns}:afterAppletRun
215
+ * @async
216
+ * @method
217
+ * @memberof module:Hook
218
+ * @param {...any} args - Arguments passed to the applet
219
+ * @see module:Helper.runAsApplet
220
+ */
221
+
222
+ /**
223
+ * Hook handler that runs after a non override/extended configuration file is read.
224
+ *
225
+ * @async
226
+ * @method
227
+ * @name bajo·default:afterReadConfig
228
+ * @memberof module:Hook
229
+ * @param {string} file - Config file path
230
+ * @param {string} orgObj - Original config object before parsing
231
+ * @param {object} options - readConfig options
232
+ */
233
+
234
+ /**
235
+ * Hook handler that runs before a configuration file override is read.
236
+ *
237
+ * @async
238
+ * @method
239
+ * @name bajo·override:beforeReadConfig
240
+ * @memberof module:Hook
241
+ * @param {string} fileExt - Config file extension
242
+ * @param {object} options - readConfig options
243
+ */
244
+
245
+ /**
246
+ * Hook handler that runs after a configuration file override is read.
247
+ *
248
+ * @async
249
+ * @method
250
+ * @name bajo·override:afterReadConfig
251
+ * @memberof module:Hook
252
+ * @param {string} fileExt - Config file extension
253
+ * @param {object} result - Resulting config object after parsing
254
+ * @param {object} options - readConfig options
255
+ */
256
+
257
+ /**
258
+ * Hook handler that runs before a extended configuration file is read.
259
+ *
260
+ * @async
261
+ * @method
262
+ * @name bajo.extend:beforeReadConfig
263
+ * @memberof module:Hook
264
+ * @param {string} fileExt - Config file extension
265
+ * @param {object} options - readConfig options
266
+ */
267
+
268
+ /**
269
+ * Hook handler that runs after a extended configuration file is read.
270
+ *
271
+ * @async
272
+ * @method
273
+ * @name bajo.extend:afterReadConfig
274
+ * @memberof module:Hook
275
+ * @param {string} fileExt - Config file extension
276
+ * @param {object} result - Resulting config object after parsing
277
+ * @param {object} options - readConfig options
278
+ */
279
+
280
+ /**
281
+ * Hook handler that runs before a configuration file is read.
282
+ *
283
+ * @async
284
+ * @method
285
+ * @name bajo:beforeReadConfig
286
+ * @memberof module:Hook
287
+ * @param {string} file - Config file path
288
+ * @param {object} options - readConfig options
289
+ */
290
+
291
+ /**
292
+ * Hook handler that runs after all read processes of a configuration file are completed.
293
+ *
294
+ * @async
295
+ * @method
296
+ * @name bajo:afterReadConfig
297
+ * @memberof module:Hook
298
+ * @param {string} file - Config file path
299
+ * @param {object} result - Resulting config object after parsing
300
+ * @param {object} options - readConfig options
301
+ */
302
+
303
+ /**
304
+ * Hook handler that runs before a collection is built. `{ns}` is the collection's namespace. This hook is useful
305
+ * to modify the collection items before they are built.
306
+ *
307
+ * @async
308
+ * @method
309
+ * @name {ns}:beforeBuildCollection
310
+ * @memberof module:Hook
311
+ * @param {string} container - Collection container name
312
+ * @param {array&lt;object>} items - Collection items
313
+ * @see Bajo#buildCollections
314
+ */
315
+
316
+ /**
317
+ * Hook handler that runs after a collection is built. `{ns}` is the collection's namespace. This hook is useful
318
+ * to modify the collection items after they are built.
319
+ *
320
+ * @async
321
+ * @method
322
+ * @name {ns}:afterBuildCollection
323
+ * @memberof module:Hook
324
+ * @param {string} container - Collection container name
325
+ * @param {array&lt;object>} items - Collection items
326
+ * @see Bajo#buildCollections
327
+ */
328
+ </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-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-01_WELCOME.html">Welcome</a></div><div class="sidebar-section-children"><a href="tutorial-02_GETTING_STARTED.html">Getting Started</a></div><div class="sidebar-section-children"><a href="tutorial-03_USER_GUIDE.html">User Guide</a></div><div class="sidebar-section-children"><a href="tutorial-04_DEV_GUIDE.html">Developer Guide</a></div><div class="sidebar-section-children"><a href="tutorial-05_ECOSYSTEM.html">Ecosystem</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Cache.html">Cache</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Main.html">Main</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div><div class="sidebar-section-children"><a href="Tools.html">Tools</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Applet.html">Applet</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div><div class="sidebar-section-children"><a href="module-Hook.html">Hook</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div><div class="sidebar-section-children"><a href="global.html#package%25C2%25B7json">package·json</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
@@ -0,0 +1,167 @@
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: lib/config.js</title><!--[if lt IE 9]>
2
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">Bajo API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-01_WELCOME.html">Welcome</a></div><div class="sidebar-section-children"><a href="tutorial-02_GETTING_STARTED.html">Getting Started</a></div><div class="sidebar-section-children"><a href="tutorial-03_USER_GUIDE.html">User Guide</a></div><div class="sidebar-section-children"><a href="tutorial-04_DEV_GUIDE.html">Developer Guide</a></div><div class="sidebar-section-children"><a href="tutorial-05_ECOSYSTEM.html">Ecosystem</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Cache.html">Cache</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Main.html">Main</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div><div class="sidebar-section-children"><a href="Tools.html">Tools</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Applet.html">Applet</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div><div class="sidebar-section-children"><a href="module-Hook.html">Hook</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div><div class="sidebar-section-children"><a href="global.html#package%25C2%25B7json">package·json</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/bajo" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/bajo" target="">Github</a></div><div class="navbar-item"><a id="" href="https://bajo.app" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">lib_config.js</h1></header><article><pre class="prettyprint source lang-js"><code>/**
4
+ * This is the default configuration object for Bajo and its plugins (see note below). It contains various settings that control the behavior of the framework.
5
+ * You can override these settings by providing your own configuration object through the following methods in the order of priority:
6
+ * 1. **Environment variables**:
7
+ * You can set configuration options using environment variables too. `dotenv` is also supported.
8
+ * The environment variable names should be in uppercase. Use double underscores instead of dots and single underscores
9
+ * to form camel cased name. For example, `LOG__TIME_TAKEN=true` will set `log.timeTaken` to `true`
10
+ * 2. **Command-line arguments**:
11
+ * You can pass configuration options as command-line arguments when starting the application. For example, you can use `--env=prod` to set the environment to `prod`.
12
+ * For nested configuration options, use dash notation. For example, `--log-timeTaken` will set `log.timeTaken` to `true`.
13
+ * 3. **Configuration files**:
14
+ * Create/open `{dataDir}/config/bajo.{ext}` file, where `{ext}` is the file extension of your choice.
15
+ * This file is read during the boot process with app's {@link App#configHandlers} and merged with the default configuration object.
16
+ *
17
+ * By default, the supported file extensions are `.js`, `.json`, and `.yml/.yaml`. More extensions can be added by plugins.
18
+ * For example, the {@link https://ardhi.github.io/bajo-config bajo-config} plugin provides support for `.toml` format.
19
+ *
20
+ * If the same filename with different extension exists, the one with higher priority will be used. The priorities are as follows:
21
+ * 1. `.js` - use this if you want to use dynamic config file that can be generated programmatically.
22
+ * 2. `.json` - use this if you want to use static config file that can be easily edited by humans.
23
+ * 3. `.yml/.yaml` - use this if you want to use static config file that can be easily edited by humans and supports comments.
24
+ *
25
+ * To have an environment-specific configuration, create a file named `bajo-{env}.{ext}` where `{env}` is the environment name (e.g. `dev`, `prod`)
26
+ * in the same folder.
27
+ *
28
+ * > **Note**: all plugin's configuration files follow the same rules as above, but with the following differences:
29
+ * > - The configuration file should be named as `{pluginName}.{ext}` or `{pluginName}-{env}.{ext}` for environment-specific configuration, where `{pluginName}` is the name of the plugin.
30
+ * > - Command-line arguments should be prefixed with the plugin name followed by a colon. For example, `--{pluginName}:my-configKey` will set `my.configKey` to the value provided for the plugin's configuration.
31
+ * > - Environment variables should be prefixed with the plugin name followed by a dot. For example, `{PLUGINNAME}.MY__CONFIG_KEY` will set `my.configKey` to the value provided for the plugin's configuration.
32
+ * >
33
+ * > Plugin's configuration objects are mutable only during the boot process. After a plugin is started, they are frozen and cannot be modified.
34
+ * Your only options to do modifications is to use `{pluginName}:{before|after}{Init|Start}` hooks.
35
+ *
36
+ * @typedef TConfig
37
+ * @global
38
+ * @type {Object}
39
+ */
40
+
41
+ /**
42
+ * @typedef TConfig
43
+ * @memberof Bajo
44
+ * @type {Object}
45
+ * @property {string} env - Environment name (`dev` or `prod`)
46
+ * @property {Object} [runtime={}] - Runtime configuration
47
+ * @property {boolean} [runtime.noWarning=false] - If `true`, Bajo will not show any warning messages. Default is `false`
48
+ * @property {Object} [log={}] - Logging configuration
49
+ * @property {boolean} [log.timeTaken=false] - If `true`, Bajo will log the time taken for each operation. Default is `false`
50
+ * @property {string} [log.dateFormat='YYYY-MM-DDTHH:mm:ss.SSS'] - Date format for logging
51
+ * @property {boolean} [log.useUtc=false] - If `true`, Bajo will use UTC instead of local time for logging. Default is `false`
52
+ * @property {boolean} [log.pretty=false] - If `true`, Bajo will use pretty logging format. Default is `false`
53
+ * @property {boolean} [log.applet=false] - Whether to log when in applet mode or not. Default is `false`
54
+ * @property {boolean} [log.save=false] - Whether to save logs to file. Default is `false`
55
+ * @property {Object} [log.rotation={}] - Log rotation configuration, used only if `log.save` is `true`
56
+ * @property {string} [log.rotation.cycle='none'] - Rotation cycle (`none`, `daily`, `weekly`, `monthly`). Default is `none`
57
+ * @property {boolean} [log.rotation.compressOld=true] - Whether to compress old logs. Default is `true`
58
+ * @property {boolean} [log.rotation.byPlugin=false] - Whether to rotate logs by plugin. Default is `false`
59
+ * @property {number} [log.rotation.retain=5] - Number of old logs to retain. Default is `5`
60
+ * @property {Object} [dump={}] - Dump configuration
61
+ * @property {number} [dump.depth=2] - Depth of object to dump. Default is `2`
62
+ * @property {boolean} [dump.compact=false] - If `true`, Bajo will dump objects in compact format. Default is `false`
63
+ * @property {boolean} [dump.colors=true] - If `true`, Bajo will dump objects with colors. Default is `true`
64
+ * @property {number} [dump.breakLength=80] - Break length for dumping objects. Default is `80`
65
+ * @property {boolean} [dump.caller=true] - If `true`, Bajo will dump the caller of the dump function. Default is `true`
66
+ * @property {Object} [dump.frame={}] - Display frame configuration for dumping objects
67
+ * @property {string} [dump.frame.titleAlignment='center'] - Title alignment for dumping objects. Default is `center`
68
+ * @property {number} [dump.frame.padding=1] - Padding for dumping objects. Default is `1`
69
+ * @property {number} [dump.frame.margin=1] - Margin for dumping objects. Default is `1`
70
+ * @property {string} [dump.frame.borderStyle='round'] - Border style for dumping objects. Default is `round`
71
+ * @property {string} [lang] - Default language for internationalization. Default is the system language or `en-US` if not available
72
+ * @property {Object} [intl={}] - Internationalization configuration
73
+ * @property {string[]} [intl.supported=['en-US', 'id']] - Supported languages. Default is `en-US` and `id`. Add more if you want it
74
+ * @property {string} [intl.fallback='en-US'] - Fallback language if the requested language is not supported. Default is `en-US`
75
+ * @property {string[]} [intl.lookupOrder=[]] - Lookup order for languages. Default is empty array
76
+ * @property {Object} [intl.format={}] - Formatting configuration
77
+ * @property {string} [intl.format.emptyValue=''] - Value to use for empty values. Default is empty string
78
+ * @property {Object} [intl.format.datetime] - See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat|Intl.DateTimeFormat} for more information
79
+ * @property {Object} [intl.format.date] - See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat|Intl.DateTimeFormat} for more information
80
+ * @property {Object} [intl.format.time] - See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat|Intl.DateTimeFormat} for more information
81
+ * @property {Object} [intl.format.float] - See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat|Intl.NumberFormat} for more information
82
+ * @property {Object} [intl.format.double] - See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat|Intl.NumberFormat} for more information
83
+ * @property {Object} [intl.format.smallint] - See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat|Intl.NumberFormat} for more information
84
+ * @property {Object} [intl.format.integer] - See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat|Intl.NumberFormat} for more information
85
+ * @property {Object} [intl.unitSys={}] - Unit system configuration. Object with keys as language codes and values as unit systems. Supported values are `metric`, `imperial` and `nautical`
86
+ * @property {string} [intl.unitSys.en-US='imperial'] - Unit system for `en-US`. Default is `imperial`
87
+ * @property {string} [intl.unitSys.id='metric'] - Unit system for `id`. Default is `metric`
88
+ * @property {boolean} [exitHandler=true] - Whether to attach exit handlers for graceful shutdown. Default is `true`
89
+ * @property {Object} [cache={}] - Cache configuration
90
+ * @property {string[]} [cache.purge=[]] - List of cache names to purge on startup. Default is empty array
91
+ * @property {string|number} [cache.purgeIntvDur='5m'] - Interval duration for purging cache. Default is `5m`
92
+ */
93
+ const config = {
94
+ env: 'dev',
95
+ runtime: {
96
+ noWarning: false
97
+ },
98
+ log: {
99
+ timeTaken: false,
100
+ dateFormat: 'YYYY-MM-DDTHH:mm:ss.SSS',
101
+ useUtc: false,
102
+ pretty: false,
103
+ applet: false,
104
+ save: false,
105
+ rotation: {
106
+ cycle: 'none', // none, daily, weekly, monthly
107
+ compressOld: true,
108
+ byPlugin: false,
109
+ retain: 5
110
+ }
111
+ },
112
+ dump: {
113
+ depth: 2,
114
+ compact: false,
115
+ colors: true,
116
+ breakLength: 80,
117
+ caller: true,
118
+ frame: {
119
+ titleAlignment: 'center',
120
+ padding: 1,
121
+ margin: 1,
122
+ borderStyle: 'round'
123
+ }
124
+ },
125
+ lang: Intl.DateTimeFormat().resolvedOptions().lang ?? 'en-US',
126
+ intl: {
127
+ supported: ['en-US', 'id'],
128
+ fallback: 'en-US',
129
+ lookupOrder: [],
130
+ format: {
131
+ emptyValue: '',
132
+ datetime: {
133
+ dateStyle: 'medium',
134
+ timeStyle: 'short',
135
+ timeZone: 'UTC'
136
+ },
137
+ date: {
138
+ dateStyle: 'medium',
139
+ timeZone: 'UTC'
140
+ },
141
+ time: {
142
+ timeStyle: 'short',
143
+ timeZone: 'UTC'
144
+ },
145
+ float: {
146
+ maximumFractionDigits: 2
147
+ },
148
+ double: {
149
+ maximumFractionDigits: 5
150
+ },
151
+ smallint: {},
152
+ integer: {}
153
+ },
154
+ unitSys: {
155
+ 'en-US': 'imperial',
156
+ id: 'metric'
157
+ }
158
+ },
159
+ exitHandler: true,
160
+ cache: {
161
+ purge: [],
162
+ purgeIntvDur: '5m'
163
+ }
164
+ }
165
+
166
+ export default config
167
+ </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-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-01_WELCOME.html">Welcome</a></div><div class="sidebar-section-children"><a href="tutorial-02_GETTING_STARTED.html">Getting Started</a></div><div class="sidebar-section-children"><a href="tutorial-03_USER_GUIDE.html">User Guide</a></div><div class="sidebar-section-children"><a href="tutorial-04_DEV_GUIDE.html">Developer Guide</a></div><div class="sidebar-section-children"><a href="tutorial-05_ECOSYSTEM.html">Ecosystem</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="App.html">App</a></div><div class="sidebar-section-children"><a href="Bajo.html">Bajo</a></div><div class="sidebar-section-children"><a href="Base.html">Base</a></div><div class="sidebar-section-children"><a href="Cache.html">Cache</a></div><div class="sidebar-section-children"><a href="Err.html">Err</a></div><div class="sidebar-section-children"><a href="Log.html">Log</a></div><div class="sidebar-section-children"><a href="Main.html">Main</a></div><div class="sidebar-section-children"><a href="Plugin.html">Plugin</a></div><div class="sidebar-section-children"><a href="Print.html">Print</a></div><div class="sidebar-section-children"><a href="Tools.html">Tools</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-Applet.html">Applet</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div><div class="sidebar-section-children"><a href="module-Hook.html">Hook</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#boot">boot</a></div><div class="sidebar-section-children"><a href="global.html#package%25C2%25B7json">package·json</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>