UNPKG

pragmatic-fp-ts

Version:

Opinionated functional programming library with easy use in mind

46 lines (45 loc) 1.52 kB
"use strict"; /* * A mutable value that behaves like a quantum particle: it can be formed until * the first time it's observed */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MutablePrimitive = exports.MutableObject = exports.MutableArray = exports.Mutable = void 0; const Mutable = (clone) => (initialValue) => { let value = clone(initialValue); let wasRead = false; const preventRaces = () => { if (wasRead) { throw new Error("Can not alter mutable value after it was consumed"); } }; return { set: (newValue) => { preventRaces(); value = newValue; }, update: (fn) => { preventRaces(); value = fn(value); }, change: (fn) => { preventRaces(); fn(value); }, value: () => { wasRead = true; return value; }, toString: () => `Mutable ${JSON.stringify(value)}`, }; }; exports.Mutable = Mutable; const cloneArray = (coll) => coll.concat(); const MutableArray = (coll) => (0, exports.Mutable)(cloneArray)(coll); exports.MutableArray = MutableArray; const cloneObject = (obj) => (Object.assign({}, obj)); const MutableObject = (obj) => (0, exports.Mutable)(cloneObject)(obj); exports.MutableObject = MutableObject; const clonePrimitive = (value) => value; const MutablePrimitive = (value) => (0, exports.Mutable)(clonePrimitive)(value); exports.MutablePrimitive = MutablePrimitive;