# Config Sets
This Node.js module manages configuration settings by reading from and writing to a `config-sets.json` file.
It handles command-line arguments and watches for changes to the configuration file.
It allows you to create applications that can be configured in real time.
This manual is also available in [HTML5](https://manuel-lohmus.github.io/config-sets/README.html).
[](https://www.npmjs.com/package/config-sets)
> Please note, this version is not backward compatible with version 2.x
> Please note that JSON string is not 100% compatible.
> It has been extended to allow for incremental updates of JSON files.
> Added the ability to include metadata and comments.
> Parsing of JSON files is enabled.
## Installation
To install the module, use npm:
`npm install config-sets`
## Usage
### Basic Usage
To use the module, require it in your script and call the `configSets` function:
```javascript
const configSets = require('config-sets');
const config = configSets({
'-metadata-key1': ' key1 comment ',
key1: 'value1',
'-metadata-key2': ' key2 comment ',
key2: 'value2'
});
const moduleConfig = configSets('moduleName', { key1: 'value1', key2: 'value2' });
console.log(config);
config.on('key1', function (ev) { console.log(ev); return true; });
```
file: `config-sets.json`
```javascript
{
"isProduction": true,
"production": {
/* key1 comment */
"key1": "value1",
/* key2 comment */
"key2": "value2",
"moduleName": {
"key1": "value1",
"key2": "value2"
}
},
"development": {}
}
```
### Command-Line Arguments
You can pass configuration settings via command-line arguments:
`node index.js --key1=value1 --key2=value2`
`node index.js --help`
### Watching for Changes
The module watches the `config-sets.json` file for changes and updates the configuration settings accordingly.
This uses the ['data-context'](https://www.npmjs.com/package/data-context) module. Read more about how to use it.
```javascript
config.on('key1', function (ev) { console.log(ev); return true; });
```
## Testing
You can test `config-sets` on your system using this command:
`node ./node_modules/config-sets/index.test`
or in the `config-sets` project directory:
`npm test`
## API
### Main Function
#### `configSets(configModuleName, defaultConfigSettings)`
- `configModuleName` (optional): The name of the module to set or update configuration settings for.
- `defaultConfigSettings`: The default configuration settings.
Returns the current configuration settings.
### Static Properties
- **`configSets.isProduction`**: Indicates if the environment is production.
- **`configSets.production`**: Contains production-specific configuration settings.
- **`configSets.development`**: Contains development-specific configuration settings.
- **`configSets.isSaveChanges`** (default: true): Determines if changes to the configuration should be saved automatically.
### Helper Functions
#### `assign(target, source, overwriteChanges)`
- `target`: The target object to merge properties into.
- `source`: The source object containing properties to merge.
- `overwriteChanges` (optional): A boolean indicating whether to overwrite existing properties in the target object.
Merges source objects into a target object.
#### `arg_options()`
Parses command-line arguments into an object.
Returns an object containing the parsed command-line arguments.
#### `print_help()`
Prints the help message.
## License
This project is licensed under the MIT License.
Copyright © 2025 Manuel Lõhmus
[](https://www.paypal.com/donate?hosted_button_id=ESBQQHBB9LVWC)
Donations are welcome and will go towards further development of this project.