|
|
|
@ -47,11 +47,14 @@ export function source(v) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @param {() => any} get_value
|
|
|
|
* @template V
|
|
|
|
|
|
|
|
* @param {() => V} get_value
|
|
|
|
|
|
|
|
* @returns {(value?: V) => V}
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
export function source_link(get_value) {
|
|
|
|
export function source_link(get_value) {
|
|
|
|
var was_local = false;
|
|
|
|
var was_local = false;
|
|
|
|
var local_source = source(undefined);
|
|
|
|
var local_source = source(undefined);
|
|
|
|
|
|
|
|
|
|
|
|
var linked_derived = derived(() => {
|
|
|
|
var linked_derived = derived(() => {
|
|
|
|
var local_value = get(local_source);
|
|
|
|
var local_value = get(local_source);
|
|
|
|
var linked_value = get_value();
|
|
|
|
var linked_value = get_value();
|
|
|
|
@ -65,14 +68,14 @@ export function source_link(get_value) {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
return function (/** @type {any} */ value) {
|
|
|
|
return function (/** @type {any} */ value) {
|
|
|
|
var linked_value = get(linked_derived);
|
|
|
|
|
|
|
|
if (arguments.length > 0) {
|
|
|
|
if (arguments.length > 0) {
|
|
|
|
was_local = true;
|
|
|
|
was_local = true;
|
|
|
|
set(local_source, value);
|
|
|
|
set(local_source, value);
|
|
|
|
get(linked_derived);
|
|
|
|
get(linked_derived);
|
|
|
|
return value;
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return linked_value;
|
|
|
|
|
|
|
|
|
|
|
|
return get(linked_derived);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|