Skip to content

Getting Started ​

This guide will help you install and set up Config File Merger for your project.

Prerequisites ​

  • Node.js 18 or later - Config File Merger uses modern ES module syntax and Node.js built-ins
  • TypeScript 5.3+ (optional) - For library usage with full type safety

Installation ​

Clone the Repository ​

bash
git clone https://github.com/tuulbelt/config-file-merger.git
cd config-file-merger

Install Dependencies ​

bash
npm install

This installs TypeScript and development dependencies only. There are zero runtime dependencies.

Enable Global CLI ​

bash
npm link

This enables the cfgmerge command globally (or use the longer config-file-merger).

Verify Installation ​

bash
cfgmerge --version
# cfgmerge 0.1.0

cfgmerge --help

Quick Configuration Example ​

1. Create a Config File ​

bash
echo '{"host": "localhost", "port": 8080, "debug": false}' > config.json

2. Merge with CLI Overrides ​

bash
cfgmerge --file config.json --args "port=3000,debug=true"

Output:

json
{
  "host": "localhost",
  "port": 3000,
  "debug": true
}

3. Add Environment Variables ​

bash
export APP_HOST=production.example.com
cfgmerge --file config.json --env --prefix APP_ --args "port=443"

Output:

json
{
  "host": "production.example.com",
  "port": 443,
  "debug": false
}

4. Track Sources ​

bash
cfgmerge --file config.json --env --prefix APP_ --args "port=443" --track-sources

Output:

json
{
  "host": { "value": "production.example.com", "source": "env" },
  "port": { "value": 443, "source": "cli" },
  "debug": { "value": false, "source": "file" }
}

Library Usage ​

For programmatic usage in TypeScript/JavaScript:

typescript
import { mergeConfig, getValue } from './src/index.js';

const result = mergeConfig({
  defaults: { port: 8080, host: 'localhost' },
  file: { port: 3000 },
  env: process.env,
  envPrefix: 'APP_',
  cli: { debug: true },
  trackSources: false,
});

if (result.ok) {
  const port = getValue<number>(result.config, 'port', 8080);
  console.log(`Starting on port ${port}`);
}

Project Structure ​

config-file-merger/
├── src/
│   └── index.ts      # Main implementation
├── test/
│   └── index.test.ts # 135 comprehensive tests
├── examples/
│   ├── basic.ts      # Basic usage examples
│   └── advanced.ts   # Advanced patterns
├── package.json      # Zero runtime dependencies
├── tsconfig.json     # TypeScript configuration
└── README.md         # Documentation

Next Steps ​

Troubleshooting ​

Command Not Found ​

If cfgmerge isn't found after npm link:

bash
# Check npm prefix
npm prefix -g

# Ensure it's in your PATH
export PATH="$(npm prefix -g)/bin:$PATH"

TypeScript Compilation Errors ​

Ensure you have TypeScript 5.3+ and @types/node:

bash
npm install
npx tsc --noEmit

File Not Found Errors ​

Config File Merger requires absolute or valid relative paths:

bash
# Good
cfgmerge --file ./config.json
cfgmerge --file /home/user/config.json

# Bad (missing file)
cfgmerge --file missing.json
# Error loading config: File not found: missing.json

Released under the MIT License.