chromogen
Version:
simple, interaction-driven Jest test generator for Recoil and React Hooks apps
47 lines (46 loc) • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.wrapFamilySetter = exports.wrapFamilyGetter = void 0;
const ledger_1 = require("../utils/ledger");
const utils_1 = require("../utils/utils");
const store_1 = require("../utils/store");
const core_utils_1 = require("./core-utils");
const { transactions, selectorFamilies, initialRenderFamilies, setTransactions } = ledger_1.ledger;
const wrapFamilyGetter = (key, configGet) => {
let returnedPromise = false;
return (params) => (utils) => {
const { get } = utils;
const value = configGet(params)(utils);
if (get(store_1.recordingState)) {
if (transactions.length === 0) {
if (typeof value === 'object'
&& value !== null
&& Object.prototype.toString.call(value) === '[object Promise]') {
delete selectorFamilies[key];
returnedPromise = true;
}
else {
initialRenderFamilies.push({ key, params, value });
}
}
else if (!returnedPromise) {
if (!selectorFamilies[key].prevParams.has(params)) {
selectorFamilies[key].prevParams.add(params);
}
if (params !== utils_1.dummyParam)
(0, core_utils_1.debouncedAddToTransactions)(key, value, params);
}
}
return value;
};
};
exports.wrapFamilyGetter = wrapFamilyGetter;
const wrapFamilySetter = (key, set) => (params) => (utils, newValue) => {
if (utils.get(store_1.recordingState) && setTransactions.length > 0) {
setTimeout(() => {
setTransactions[setTransactions.length - 1].setter = { key, params, newValue };
}, 0);
}
return set(params)(utils, newValue);
};
exports.wrapFamilySetter = wrapFamilySetter;