Deep-merges configuration layers, EARLIEST first — later layers win per key.
Merge rules (per key):
null
undefined
null/undefined LAYERS are skipped entirely. The inputs are never mutated; the result is a fresh object graph.
The configuration layers, base first, most-specific last.
The merged configuration object (empty object when every layer is absent).
Deep-merges configuration layers, EARLIEST first — later layers win per key.
Merge rules (per key):
null) → the later value REPLACES;nullis a real JSON value and replaces like any primitive;undefinedvalues in a later layer are skipped (they cannot exist in parsed JSON anyway).null/undefinedLAYERS are skipped entirely. The inputs are never mutated; the result is a fresh object graph.