chromogen
Version:
simple, interaction-driven Jest test generator for Recoil and React Hooks apps
115 lines (114 loc) • 4.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateFile = exports.generateTests = exports.styles = void 0;
const ledger_1 = require("../utils/ledger");
const utils_1 = require("../utils/utils");
const output_1 = require("../output/output");
const buttonStyle = {
display: 'inline-block',
margin: '8px',
marginLeft: '13px',
padding: '0px',
height: '25px',
width: '65px',
borderRadius: '4px',
justifyContent: 'space-evenly',
border: '1px',
cursor: 'pointer',
color: '#90d1f0',
fontSize: '10px',
};
const divStyle = {
display: 'flex',
position: 'absolute',
bottom: '100px',
left: '100px',
backgroundColor: '#aaa',
borderRadius: '4px',
margin: 0,
padding: 0,
zIndex: 999999,
};
const playStyle = {
boxSizing: 'border-box',
marginLeft: '25px',
borderStyle: 'solid',
borderWidth: '7px 0px 7px 14px',
};
const pauseStyle = {
width: '14px',
height: '14px',
borderWidth: '0px 0px 0px 10px',
borderStyle: 'double',
marginLeft: '27px',
};
exports.styles = { buttonStyle, divStyle, playStyle, pauseStyle };
const generateTests = (storeMap) => {
const { atoms, selectors, setters, atomFamilies, selectorFamilies, initialRender, initialRenderFamilies, transactions, setTransactions, } = ledger_1.ledger;
const finalLedger = storeMap.size > 0
? {
atoms: atoms.map(({ key }) => storeMap.get(key) || key),
selectors: selectors.map((key) => storeMap.get(key) || key),
atomFamilies: (0, utils_1.convertFamilyTrackerKeys)(atomFamilies, storeMap),
selectorFamilies: (0, utils_1.convertFamilyTrackerKeys)(selectorFamilies, storeMap),
setters: setters.map((key) => storeMap.get(key) || key),
initialRender: initialRender.map(({ key, value }) => {
const newKey = storeMap.get(key) || key;
return { key: newKey, value };
}),
initialRenderFamilies: initialRenderFamilies.map(({ key, value, params }) => {
const newKey = storeMap.get(key) || key;
return { key: newKey, value, params };
}),
transactions: transactions.map(({ state, updates, atomFamilyState, familyUpdates }) => {
const newState = state.map((eachAtom) => {
const key = storeMap.get(eachAtom.key) || eachAtom.key;
return Object.assign(Object.assign({}, eachAtom), { key });
});
const newUpdates = updates.map((eachSelector) => {
const key = storeMap.get(eachSelector.key) || eachSelector.key;
const { value } = eachSelector;
return { key, value };
});
const newAtomFamilyState = atomFamilyState.map((eachFamAtom) => {
const family = storeMap.get(eachFamAtom.family) || eachFamAtom.family;
const oldKey = eachFamAtom.key;
const keySuffix = oldKey.substring(eachFamAtom.family.length);
const key = family + keySuffix;
return Object.assign(Object.assign({}, eachFamAtom), { family, key });
});
const newFamilyUpdates = familyUpdates.map((eachFamSelector) => {
const key = storeMap.get(eachFamSelector.key) || eachFamSelector.key;
return Object.assign(Object.assign({}, eachFamSelector), { key });
});
return {
state: newState,
updates: newUpdates,
atomFamilyState: newAtomFamilyState,
familyUpdates: newFamilyUpdates,
};
}),
setTransactions: setTransactions.map(({ state, setter }) => {
const newState = state.map((eachAtom) => {
const key = storeMap.get(eachAtom.key) || eachAtom.key;
return Object.assign(Object.assign({}, eachAtom), { key });
});
const newSetter = setter;
if (newSetter) {
const { key } = newSetter;
newSetter.key = storeMap.get(key) || key;
}
return { state: newState, setter: newSetter };
}),
}
: Object.assign(Object.assign({}, ledger_1.ledger), { atoms: atoms.map(({ key }) => key) });
return [(0, output_1.output)(finalLedger)];
};
exports.generateTests = generateTests;
const generateFile = (setFile, storeMap) => {
const tests = (0, exports.generateTests)(storeMap);
const blob = new Blob(tests);
setFile(URL.createObjectURL(blob));
return tests;
};
exports.generateFile = generateFile;