export default class ContextRef { constructor() { this.value = {}; } get() { return this.value; } set(newValue) { this.value = newValue; } copy() { return new LateBinding(this); } } class LateBinding extends ContextRef { constructor(ref) { super(); this.ref = ref; this.bound = false; } get() { if (!this.bound) { const value = this.ref.get(); this.set(value !== null && typeof value === 'object' ? {...value} : value); } return super.get(); } set(newValue) { this.bound = true; super.set(newValue); } }