Configuration Management
Configuration Management
The ConfigurationManager provides a single, unified entry-point for loading,
merging, and validating compiler configurations. It replaces the previous
pattern of manually chaining ConfigurationLoader, ConfigurationValidator,
and ad-hoc environment variable checks.
Quick Start
From a JSON file (CLI)
import { ConfigurationManager } from '../src/configuration/index.ts';
const cfg = await ConfigurationManager.fromFile('./blocklist.json').load();console.log(cfg.name); // "My Block List"From a plain object (programmatic / tests)
const cfg = await ConfigurationManager.fromObject({ name: 'Test List', sources: [{ source: 'https://example.com/hosts.txt', type: 'hosts' }],}, { applyEnvOverrides: false }).load();Multi-layer: file + inline override
import { ConfigurationManager, FileConfigurationSource, OverrideConfigurationSource,} from '../src/configuration/index.ts';
const cfg = await ConfigurationManager.fromSources([ new FileConfigurationSource('./base.json'), new OverrideConfigurationSource('{"name":"CI Build"}'),], { applyEnvOverrides: false }).load();Layered Precedence (lowest → highest)
| # | Layer | Description |
|---|---|---|
| 1 | Base sources | Supplied in constructor/factory order |
| 2 | Env overrides | ADBLOCK_CONFIG_* env vars (opt-out via applyEnvOverrides: false) |
| 3 | Inline override | --override '{"name":"..."}' / OverrideConfigurationSource |
Scalar values: last-defined wins.
Arrays (sources, transformations, exclusions, …): last-defined fully replaces (no append).
CLI Flags
The following flags control configuration management at the CLI level:
| Flag | Type | Description |
|---|---|---|
--config <path> | string | Path to JSON configuration file |
--no-env-overrides | boolean | Disable ADBLOCK_CONFIG_* environment variable overrides |
--override <json> | string | Inline JSON overlay applied at highest precedence |
--dump-config | boolean | Print fully resolved configuration as JSON and exit |
Examples
# Compile with a config file; disable env overridesbloqr-compiler --config ./blocklist.json --no-env-overrides
# Override a single field inlinebloqr-compiler --config ./base.json --override '{"name":"Nightly Build"}'
# Inspect the effective config without compilingbloqr-compiler --config ./base.json --dump-configAPI Endpoints
Three new REST endpoints are available on the Worker API:
GET /api/configuration/defaults
Returns system defaults and enforced limits. No authentication required.
curl https://your-worker.example.com/api/configuration/defaults{ "success": true, "defaults": { "compilation": { "... compilation defaults ..." }, "validation": { "MAX_SOURCES": 100, "MAX_EXCLUSIONS": 10000, "..." } }, "limits": { "maxSources": 100, "maxExclusions": 10000 }, "supportedSourceTypes": ["adblock", "hosts"]}POST /api/configuration/validate
Validates a configuration object against the schema. Returns field-level errors when invalid. Requires Free tier auth + Turnstile token.
curl -X POST https://your-worker.example.com/api/configuration/validate \ -H 'Content-Type: application/json' \ -d '{ "config": { "name": "Test", "sources": [{ "source": "https://example.com/hosts.txt", "type": "hosts" }] }, "turnstileToken": "..." }'On success: { "success": true, "valid": true }
On validation failure: { "success": true, "valid": false, "errors": [{ "path": "sources", "message": "Required", "code": "invalid_type" }] }
POST /api/configuration/resolve
Merges multiple configuration layers and returns the effective configuration. Requires Free tier auth + Turnstile token.
curl -X POST https://your-worker.example.com/api/configuration/resolve \ -H 'Content-Type: application/json' \ -d '{ "config": { "name": "Base", "sources": [{ "source": "https://example.com/hosts.txt", "type": "hosts" }] }, "override": { "name": "Final" }, "applyEnvOverrides": false, "turnstileToken": "..." }'override is an object (not a JSON string) and is applied as the highest-priority layer.
applyEnvOverrides defaults to true; pass false to skip ADBLOCK_CONFIG_* env vars.
On success: { "success": true, "config": { "name": "Final", "sources": [...], ... } }
Further Reading
- Config Builder — browser-based GUI for creating configurations without writing JSON/YAML
- Schema Reference — all configuration fields and constraints
- Environment Overrides —
ADBLOCK_CONFIG_*variable reference - Config Flow — ASCII diagram of the load pipeline
- Terraform Extensibility — notes for future IaC integration
Bloqr AI™ — The privacy you didn't know you needed.
© 2026 Bloqr AI™, a trademark of Bloqr Systems™. Created by Bloqr Systems™, founded by Jayson Knight.
Internet Hygiene (n.) — the ongoing practices that keep your digital life clean, private, and safe.
Our product repos live in the BloqrAI org, part of the Bloqr Systems GitHub Enterprise. Product repos are internal-visibility — enterprise membership is required to view them.