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