JSON configuration three-way review with explicit decisions and guarded patch replay
git clone https://github.com/forey217/moonconfig.git
cd moonconfig
npm run build
npm run demonode scripts/moonconfig.mjs merge examples/base.json examples/ours.json examples/conflict.json
node scripts/moonconfig.mjs resolve examples/base.json examples/ours.json examples/conflict.json examples/decisions.json
node scripts/moonconfig.mjs resolve examples/base.json examples/ours.json examples/conflict.json examples/decisions.json --output value
node scripts/moonconfig.mjs resolve examples/base.json examples/ours.json examples/conflict.json examples/decisions.json --output patch[{"path":"/server/port","choice":"custom","value":9443}]node scripts/moonconfig.mjs diff examples/base.json examples/ours.json
node scripts/moonconfig.mjs apply examples/base.json examples/patch.json
node scripts/moonconfig.mjs get examples/base.json /server/portmoon add forey217/moonconfig@0.2.0import {
"forey217/moonconfig" @config,
"moonbitlang/core/json",
}let base = @json.parse("{\"port\":8080,\"level\":\"info\"}")
let ours = @json.parse("{\"port\":9090,\"level\":\"info\"}")
let theirs = @json.parse("{\"port\":3000,\"level\":\"debug\"}")
let reviewed = @config.resolve(base, ours, theirs, [
{ path: "/port", choice: @config.Choice::Set(@json.parse("9443")) },
])
let replay = @config.apply(base, reviewed.patch)cd examples/consumer
moon run cmd/main --target js
moon test --package forey217/config-gate-example --target js --deny-warnmoon fmt --check
moon check --target js --deny-warn
moon test --target js --deny-warn
moon test --target wasm-gc --deny-warn
moon info
npm run build
node --test tests/cli.test.mjs tests/workflow.test.mjspub(all) suberror ConfigError {
InvalidPointer(String)
InvalidIndex(String)
MissingPath(String)
InvalidPatch(String)
TestFailed(String)
InvalidMove(String)
LimitExceeded(String)
InvalidResolution(String)
} derive(Debug)fn resolve(base : Json, ours : Json, theirs : Json, decisions : Array[Decision]) -> ResolvedMerge raise ConfigErrorfn result_field_json(response : String, field : String) -> Stringfn result_json(response : String) -> Stringfn result_path_json(response : String, path : String) -> Stringfn run_json(request_text : String) -> StringInstall
Download zipJSON configuration three-way review with explicit decisions and guarded patch replay