fix: return defaultVal when lhs is not attrset in selectWithDefault

This commit is contained in:
2026-01-24 16:44:28 +08:00
parent 296c0398a4
commit a6aded7bea

View File

@@ -242,17 +242,20 @@ export const selectWithDefault = (
}
};
function selectWithDefault_impl(obj: NixValue, attrpath: NixValue[], default_val: NixValue): NixValue {
let attrs = forceAttrs(obj);
function selectWithDefault_impl(obj: NixValue, attrpath: NixValue[], defaultVal: NixValue): NixValue {
let attrs = force(obj);
if (!isAttrs(attrs)) {
return defaultVal;
}
for (const attr of attrpath.slice(0, -1)) {
const key = forceStringValue(attr);
if (!(key in attrs)) {
return default_val;
return defaultVal;
}
const cur = force(attrs[key]);
if (!isAttrs(cur)) {
return default_val;
return defaultVal;
}
attrs = cur;
}
@@ -261,7 +264,7 @@ function selectWithDefault_impl(obj: NixValue, attrpath: NixValue[], default_val
if (last in attrs) {
return attrs[last];
}
return default_val;
return defaultVal;
}
export const hasAttr = (obj: NixValue, attrpath: NixValue[]): NixBool => {