// Sass.
@use 'sass:map';
// Functions.
@use 'map.get.function' as *;
// The `map.deep-merge-key()` function.
@function deep-merge-key($map, $keys...) {
@each $key in $keys {
$map: map.deep-remove(map.deep-merge($map, get($map, $key, ())), $key...);
}
@return $map;
}
// Use.
@use '@angular-package/sass/map';
// Examples.
$example: (
"name": first name,
"age": 25,
"Helvetica": (
"weights": (
"regular": 400,
"medium": 500,
"bold": 700
),
"size": (
"regular": small,
"medium": big,
"high": extra big
)
)
);
// key of string
@debug map.deep-merge-key((a: 1, b: 2, key: (c: 3, d: 5)), key); // (a: 1, b: 2, c: 3, d: 5)
// nested key
@debug map.deep-merge-key($example, ("Helvetica", "size")); // ("name": first name, "age": 25, "Helvetica": ("weights": ("regular": 400, "medium": 500, "bold": 700)), "regular": small, "medium": big, "high": extra big)
@debug map.deep-merge-key($example, ("Helvetica", "weights")); // ("name": first name, "age": 25, "Helvetica": ("size": ("regular": small, "medium": big, "high": extra big)), "regular": 400, "medium": 500, "bold": 700)
@debug map.deep-merge-key($example, ("Helvetica", "weights"), ("Helvetica", "size")); // ("name": first name, "age": 25, "Helvetica": (), "regular": small, "medium": big, "bold": 700, "high": extra big)
@debug map.deep-merge-key($example, ("Helvetica", "size"), ("Helvetica", "weights")); // ("name": first name, "age": 25, "Helvetica": (), "regular": 400, "medium": 500, "high": extra big, "bold": 700)
// key of comma separated list
@debug map.deep-merge-key((a: 1, b: 2, (key, key1): (c: 3, d: 5)), ((key, key1), )); // (a: 1, b: 2, c: 3, d: 5)
// key of space separated list
@debug map.deep-merge-key((a: 1, b: 2, key key1: (c: 3, d: 5)), (key key1, )); // (a: 1, b: 2, c: 3, d: 5)
// key
@debug map.deep-merge-key((a: 1, b: 2, key key1: (c: 3, d: 5)), (key key1, )); // (a: 1, b: 2, c: 3, d: 5)