Config¶
The Obsidian framework provides a centralized configuration. You can set this configuration from various place in your application and access it from everywhere.
Configuration Topology¶
Obsidian configuration is splitted in 3 categories:
obsidian: this is the framework configuration itself,app: this is your application global configuration,modules: module-specific configuration.
When you export the obsidian configuration, you will obtain an object that contains those 3 categories:
{
"obsidian": {},
"app": {},
"modules": {
"module1": {},
"module2": {}
}
}
Setting Application Base Configuration¶
You can set the base configuration of the application by passing it to the start method:
const obsidian = require("@obsidian/obsidian");
const app = obsidian("my-application");
// ... load modules ...
app.start({
obsidian: {
debug: true,
},
app: {
lang: "en_US",
},
});
Defining Module’s Default Configuration¶
When you declare an Obsidian module, you can define its default configuration:
module.exports = {
name: "my-module",
requires: [],
config: {}, // Module's default config
load(app) {},
unload(app) {}
};
Overriding Module’s Configuration¶
It is possible to override a module’s configuration when you declare it in your application:
const obsidian = require("@obsidian/obsidian");
const hello = require("my-hello-module");
const app = obsidian("my-application");
app.use(hello, {
config: { // <- module specific configuration
foo: "bar",
}
});
app.start();
Accessing Configuration¶
You can access the configuration from everywhere in you application via
app.config.
For example, to access the debug key in the obsidian part of the
configuration, you can use the following code:
app.config.get("@obsidian.debug");
The parameter we gave to the get() method is the path of the configuration.
The path can be absolute (when starting with @) or relative.
Absolute Paths¶
Absolute paths always starts with @ followed with the category of
configuration or a module name:
@obsidian.to access the framework configuration,@app.to access the application global configuration,@myModule.to access to the configuration of themy-modulemodule.
E.g:
app.config.get("@obsidian.debug");
app.config.get("@app.lang");
app.config.get("@dataStore.foo");
Relative Paths¶
Relative path can be used inside modules to access to the module’s own
configuration. For example, if you are in the my-module module, you can
access any configuration of the module like this:
app.config.get("foo");
This is equivalent to:
app.config.get("@myModule.foo");
API Reference¶
Note
“Base config” is the configuration as it is passed at module initialization-time. “Custom config” represent user-defined configuration (set at runtime).
-
class
Config(rootConfig)¶ Handle Obsidian application and modules configuration.
-
Config.get(path="\"\"", default_)¶ Get config located at given path.
Arguments: - path (string) – The path of the wanted config (default
"") - default_ – The default value returned if the path does not exists (default:
undefined)
Returns: the requested config
- path (string) – The path of the wanted config (default
-
Config.set(path, value)¶ Set config located at given path.
Arguments: - path (string) – The path of the wanted config
- value – The value to set
-
Config.dump(onlyCustom=false)¶ Dump the config.
Arguments: - onlyCustom (boolean) – Set it to
trueto only dump custom configuration (configuration setted manualy using theset()method, default =false)
Returns: Object – The dumped config
- onlyCustom (boolean) – Set it to
-
Config.load(config, custom=false)¶ Load the config from the given object.
Arguments: - config (Object) – The config to load
- custom (boolean) – Mark loaded configuration as custom (default =
false)
-
Config.setApp(app)¶ Define the (sub)application this module will work with.
Arguments: - app (Application) – The application or sub-application.
-