155
export function derivedDisposable<T extends IDisposable | undefined>(owner: DebugOwner, computeFn: (reader: IReader) => T): IObservable<T>;
156
export function derivedDisposable<T extends IDisposable | undefined>(computeFnOrOwner: ((reader: IReader) => T) | DebugOwner, computeFnOrUndefined?: ((reader: IReader) => T), debugLocation = DebugLocation.ofCaller()): IObservable<T> {
157
>
let computeFn: (reader: IReader) => T;
derived.ts
158
>
let owner: DebugOwner;
159
>
if (computeFnOrUndefined === undefined) {
160
>
// eslint-disable-next-line local/code-no-any-casts
161
>
computeFn = computeFnOrOwner as any;
162
>
owner = undefined;
163
>
} else {
164
owner = computeFnOrOwner;
165
// eslint-disable-next-line local/code-no-any-casts
166
computeFn = computeFnOrUndefined as any;
167
}
169
>
let store: DisposableStore | undefined = undefined;
170
>
return new Derived(
171
>
new DebugNameData(owner, undefined, computeFn),
172
>
r => {
173
>
if (!store) {
174
>
store = new DisposableStore();
175
>
} else {
176
store.clear();
177
}
179
>
if (result) {
180
>
store.add(result);
181
>
}
182
>
return result;
183
>
},
184
>
undefined,
185
>
() => {
186
>
if (store) {
187
>
store.dispose();
188
>
store = undefined;
189
>
}
190
>
},
191
>
strictEquals,
192
>
debugLocation
193
>
);
194
>
}