@testplane/storybook
Version:
Testplane plugin that enables runtime screenshot storybook tests autogeneration
45 lines • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractInheritedValue = exports.inheritValue = void 0;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const isFunc = (obj) => typeof obj === "function";
// Acts like "Object.assign", but:
// - Does not mutate arguments
// - Supports functions (previousValue) => nextValue
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function inheritValue(...values) {
let resultValue = values[0];
for (let i = 1; i < values.length; i++) {
const prevValue = resultValue;
const curValue = values[i];
if (!curValue) {
continue;
}
if (!resultValue) {
resultValue = curValue;
}
if (!isFunc(prevValue) && !isFunc(curValue)) {
resultValue = Object.assign({}, prevValue, curValue);
}
else if (isFunc(prevValue) && isFunc(curValue)) {
resultValue = (baseValue) => curValue(prevValue(structuredClone(baseValue)));
}
else if (isFunc(prevValue) && !isFunc(curValue)) {
resultValue = (baseValue) => Object.assign({}, prevValue(structuredClone(baseValue)), curValue);
}
else if (!isFunc(prevValue) && isFunc(curValue)) {
resultValue = (baseValue) => curValue(structuredClone(Object.assign({}, baseValue, prevValue)));
}
}
return resultValue;
}
exports.inheritValue = inheritValue;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function extractInheritedValue(value, baseValue) {
if (!value) {
return baseValue;
}
return typeof value === "function" ? value(baseValue) : structuredClone(Object.assign({}, baseValue, value));
}
exports.extractInheritedValue = extractInheritedValue;
//# sourceMappingURL=inheritable-values.js.map