UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

64 lines (55 loc) 1.65 kB
// // https://antfu.me/posts/watch-with-reactivity // import {computed, Ref, ref} from '@vue/reactivity'; import {watch} from '@vue-reactivity/watch'; // function traverse(value: any, seen: Set<any>) { // console.log(value); // if (seen.has(value)) { // return value; // } // if (!isObject(value)) { // return value; // } // seen.add(value); // prevent circular reference // if (isArray(value)) { // for (let i = 0; i < value.length; i++) traverse(value[i], seen); // } else { // for (const key of Object.keys(value)) traverse((value as any)[key], seen); // } // return value; // } // interface WatchOptions { // deep: boolean; // lazy?: boolean; // } // function watch(source: any, fn: EffectScheduler, options?: WatchOptions) { // options = options || {deep: false, lazy: false}; // const {deep, lazy} = options; // let getter = isRef(source) ? () => source.value : isReactive(source) ? () => source : source; // console.log({source, isRef: isRef(source), getter, fn}); // if (deep) { // const seen = new Set(); // const _getter = () => traverse(getter(), seen); // getter = _getter; // } // const runner = effect(getter, { // lazy, // scheduler: fn, // }); // console.log(runner); // return () => stop(runner); // } const MAX = Math.floor(Number.MAX_SAFE_INTEGER / 100); export function incrementRefSafely(_ref: Ref<number>) { if (_ref.value > MAX) { _ref.value = 0; } else { _ref.value += 1; } } export function dummyReadRefVal(value: number) { // we just need this method to force a call to .value // and ensure that we have a dependency with the ref() } export {computed, ref, watch};