UNPKG

chromogen

Version:

simple, interaction-driven Jest test generator for Recoil and React Hooks apps

41 lines (40 loc) 1.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.chromogenZustandMiddleware = void 0; const ledger_1 = require("../utils/ledger"); const chromogenImpl = (creatorFunction) => (set, get, api) => { const initialStateEntries = creatorFunction(api.setState, get, api); const initialRender = filterOutFuncs(initialStateEntries); ledger_1.ledger.initialRender = initialRender; api.setState = (partial, replace, action, ...args) => { const oldStore = filterOutFuncs(get()); const r = set(partial, replace); const newStore = filterOutFuncs(get()); const changedValues = diffStateObjects(oldStore, newStore); const newAction = { action: typeof action === 'string' ? action : 'UnknownAction', changedValues, arguments: args, }; ledger_1.ledger.transactions.push(newAction); return r; }; return creatorFunction(api.setState, get, api); }; exports.chromogenZustandMiddleware = chromogenImpl; const filterOutFuncs = (store) => { const result = {}; for (const [k, v] of Object.entries(store)) { if (typeof v !== 'function') result[k] = v; } return result; }; const diffStateObjects = (oldStore, newStore) => { const changedValues = {}; for (const [k, v] of Object.entries(newStore)) { if (JSON.stringify(oldStore[k]) !== JSON.stringify(v)) changedValues[k] = v; } return changedValues; };