@threlte/core
Version:
A 3D framework for the web, built on top of Svelte and Three.js
43 lines (42 loc) • 1.08 kB
JavaScript
import { writable } from 'svelte/store';
/**
* ### `currentWritable`
*
* A writable store that also has a `current` property that is updated synchronously.
* For use in non-reactive contexts e.g. loops where unwrapping a store every frame is expensive.
*
* ```ts
* const store = currentWritable(0)
*
* useTask(() => {
* console.log(store.current) // 0
* })
*
* @param value
* @returns
*/
export const currentWritable = (value) => {
const store = writable(value);
const extendedWritable = {
set: (value) => {
extendedWritable.current = value;
store.set(value);
},
subscribe: store.subscribe,
update: (fn) => {
const newValue = fn(extendedWritable.current);
extendedWritable.current = newValue;
store.set(newValue);
},
current: value
};
return extendedWritable;
};
export const toCurrentReadable = (store) => {
return {
subscribe: store.subscribe,
get current() {
return store.current;
}
};
};