1/* 2state.mjs - <short description TODO> 3Copyright (C) 2022 Strudel contributors - see <https://codeberg.org/uzu/strudel/src/branch/main/packages/core/state.mjs> 4This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. 5*/ 6 7export class State { 8 constructor(span, controls = {}) { 9 this.span = span; 10 this.controls = controls; 11 } 12 13 // Returns new State with different span 14 setSpan(span) { 15 return new State(span, this.controls); 16 } 17 18 withSpan(func) { 19 return this.setSpan(func(this.span)); 20 } 21 22 // Returns new State with added controls. 23 setControls(controls) { 24 return new State(this.span, { ...this.controls, ...controls }); 25 } 26} 27 28export default State;