omdConfigManager

omdConfigManager

A module for managing the configuration of the OMD library. It handles loading settings from a JSON file, providing default values, and allowing runtime modifications.

Overview

The configuration is managed as a single JSON object. The system can be initialized with a path to a omdConfig.json file, or it will fall back to a default configuration. The manager supports both asynchronous and synchronous access to configuration values.

Default Configuration

If no omdConfig.json is found, the following default structure is used:

{
    "multiplication": {
        "symbol": "·",
        "forceImplicit": false,
        "implicitCombinations": {
            "constantVariable": true,
            "variableConstant": false,
            "parenthesisAfterVariable": true,
            "parenthesisAfterConstant": true,
            "variableParenthesis": true,
            "parenthesisParenthesis": true,
            "parenthesisVariable": true,
            "parenthesisConstant": true,
            "variableVariable": true
        }
    },
    "stepVisualizer": {
        "dotSizes": {
            "level0": 8,
            "level1": 6,
            "level2": 4
        },
        "fontWeights": {
            "level0": 400,
            "level1": 400,
            "level2": 400
        }
    }
}

Core Functions

async initializeConfig(configSource)

Loads the configuration from a file or object. It automatically detects the environment (browser or Node.js) to use the appropriate file loading mechanism (fetch or fs). This should be called once when your application starts.

  • configSource (string | object, optional): A path to a JSON configuration file or a configuration object to use directly.
  • Returns: Promise<void>

async getConfig()

Asynchronously gets the entire configuration object. If it hasn't been loaded yet, it will trigger the loading process with default settings.

  • Returns: Promise<object> - A promise that resolves to the configuration object.

getConfigSync()

Synchronously gets the configuration object.

Warning: If called before initializeConfig has completed, this will return the default configuration, not the loaded one.

  • Returns: object - The configuration object.

setConfig(config)

Sets the entire configuration directly, merging it with the default values.

  • config (object): The configuration object to set.

getConfigValue(path)

Gets a specific configuration value using a dot-separated path (e.g., 'multiplication.symbol').

  • Returns: The value at the specified path.

setConfigValue(path, value)

Sets a specific configuration value using a dot-separated path.

Utility Functions

  • getMultiplicationSymbol(): Returns the configured symbol for multiplication.
  • useImplicitMultiplication(combination): Checks if implicit multiplication should be used, either globally or for a specific combination of operand types.
  • getDotRadius(level): Gets the dot radius for a given step level in the omdStepVisualizer.
  • getFontWeight(level): Gets the font weight for a given step level.
  • getDefaultConfig(): Returns a copy of the default configuration object.
  • isEnabled(category, setting): Checks if a specific boolean setting is enabled.
  • updateConfig(category, setting, value): Updates a top-level configuration setting.
  • resetConfig(): Throws an error. Direct file editing is required to reset the configuration.
  • async reloadConfig(): Forces a reload of the configuration from the original file path.
  • async getConfigAsync(): An alias for getConfig().

Example

import { initializeConfig, getConfigValue, setConfigValue } from '@teachinglab/omd';

// Initialize at the start of your application
(async () => {
    await initializeConfig();

    // Get a specific value
    const multSymbol = getConfigValue('multiplication.symbol'); // -> '·'

    // Change a value at runtime
    setConfigValue('multiplication.symbol', '*');
    const newSymbol = getConfigValue('multiplication.symbol'); // -> '*'
})();