MCPcopy Index your code
hub / github.com/DeepNotesApp/DeepNotes / createSmartComputed

Function createSmartComputed

packages/@stdlib/vue/src/smart-computed.ts:5–65  ·  view source on GitHub ↗
(params: {
  get: () => T | Promise<T>;
  set?: (value: T, valueRef: Ref<T>) => void;
  initialValue?: T;
  defaultValue?: T;
})

Source from the content-addressed store, hash-verified

3import { computed, ref } from 'vue';
4
5export function createSmartComputed<T>(params: {
6 get: () => T | Promise<T>;
7 set?: (value: T, valueRef: Ref<T>) => void;
8 initialValue?: T;
9 defaultValue?: T;
10}) {
11 const valueRef = ref(params.initialValue) as Ref<T>;
12
13 let counter = 0;
14
15 let currentPromise: Promise<T> | undefined;
16
17 const asyncComputed = computed(async () => {
18 const counterAtBeginning = ++counter;
19
20 if ('defaultValue' in params) {
21 valueRef.value = params.defaultValue!;
22 }
23
24 const result = params.get();
25
26 if (!isPromiseLike(result)) {
27 valueRef.value = result;
28
29 return result;
30 }
31
32 currentPromise = result;
33
34 let promiseResult = await currentPromise;
35
36 if (counterAtBeginning === counter) {
37 valueRef.value = promiseResult;
38
39 currentPromise = undefined;
40 }
41
42 while (currentPromise != null) {
43 promiseResult = await currentPromise;
44 }
45
46 return promiseResult;
47 });
48
49 return {
50 getAsync: () => asyncComputed.value,
51
52 get: (): T => {
53 void asyncComputed.value;
54
55 return valueRef.value;
56 },
57 set: (value: T) => {
58 if (params.set != null) {
59 return params.set?.(value, valueRef);
60 } else {
61 return (valueRef.value = value);
62 }

Callers 3

createSmartComputedDictFunction · 0.90
self-user-name.tsFile · 0.90

Calls 3

isPromiseLikeFunction · 0.90
getMethod · 0.65
setMethod · 0.65

Tested by

no test coverage detected