@layerc/core
v0.1.1
Published
[](https://github.com/lszio/layerc/actions/workflows/ci.yml) [](https://www.npmjs.com/package/layerc) [, YAML, TOML, and INI via optional adapters.
- Conflict Detection: Automatically detects and reports value overrides and type changes.
Installation
npm install layerc
# Or with adapters
npm install @layerc/loadersQuick Start
import { layerc, file, env, load, yamlParser } from 'layerc';
interface AppConfig {
port: number;
db: {
url: string;
};
}
const { data } = await load(
layerc<AppConfig>({ cwd: './config' },
// 1. Add YAML support via adapter
use(yamlParser),
// 2. Load base files
file('default.json'),
file('production.yaml', { optional: true }),
// 3. Override with env variables (APP_PORT -> port)
env('APP_'),
// 4. Map prefixed env vars to nested paths (DB_URL -> db.url)
env('DB_', 'db')
)
);
console.log(`Server starting on port ${data.port}...`);Core Middlewares
| Middleware | Description |
|------------|-------------|
| file(path, options) | Loads a configuration file (auto-detects format). |
| env(prefix, targetPath, options) | Loads environment variables with optional mapping. |
| object(data, options) | Injects a plain JavaScript object. |
| use(...extensions) | Registers parsers (YAML/TOML/etc) or loaders. |
| strategy(path, strategy) | Sets custom merge logic for a specific path. |
Advanced Usage
Custom Merge Strategies
import { strategy, builtInStrategies } from 'layerc';
layerc()
.use(strategy('tags', builtInStrategies.append)) // Append to arrays instead of overriding
.file('config.json')
.load();Structured Calling (Destructuring)
The resolution result is designed for easy access:
const { data, get, traceOf, diagnostics } = await layerc('config.json').load();
const port = get('server.port');
const trace = traceOf('server.port'); // { current: { sourceId: 'env:1', ... }, history: [...] }Documentation
Development
CI/CD
This project uses GitHub Actions for CI/CD.
CI: Runs on every push tomainand on pull requests. It performs building, linting, typechecking, and testing.Release: Runs when a new tag starting withv(e.g.,v0.1.0) is pushed. It builds and publishes all packages to npm.
Note for maintainers: Ensure you have an NPM_TOKEN secret configured in your GitHub repository settings to enable automated publishing.
License
MIT
