@tanstack/vue-store
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import { readonly, ref, toRaw, watch } from 'vue-demi'\nimport type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Ref } from 'vue-demi'\n\nexport * from '@tanstack/store'\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport function useStore<\n TState,\n TSelected = NoInfer<TState>,\n TUpdater extends AnyUpdater = AnyUpdater,\n>(\n store: Store<TState, TUpdater>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n): Readonly<Ref<TSelected>> {\n const slice = ref(selector(store.state)) as Ref<TSelected>\n\n watch(\n () => store,\n (value, _oldValue, onCleanup) => {\n const unsub = value.subscribe(() => {\n const data = selector(value.state)\n if (shallow(toRaw(slice.value), data)) {\n return\n }\n slice.value = data\n })\n\n onCleanup(() => {\n unsub()\n })\n },\n { immediate: true },\n )\n\n return readonly(slice) as never\n}\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":["store","ref","watch","toRaw","readonly"],"mappings":";;;;AAQO,SAAS,SAKdA,QACA,WAAkD,CAAC,MAAM,GAC/B;AAC1B,QAAM,QAAQC,QAAAA,IAAI,SAASD,OAAM,KAAK,CAAC;AAEvCE,UAAA;AAAA,IACE,MAAMF;AAAA,IACN,CAAC,OAAO,WAAW,cAAc;AACzB,YAAA,QAAQ,MAAM,UAAU,MAAM;AAC5B,cAAA,OAAO,SAAS,MAAM,KAAK;AACjC,YAAI,QAAQG,QAAAA,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG;AACrC;AAAA,QACF;AACA,cAAM,QAAQ;AAAA,MAAA,CACf;AAED,gBAAU,MAAM;AACR;MAAA,CACP;AAAA,IACH;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EAAA;AAGpB,SAAOC,QAAAA,SAAS,KAAK;AACvB;AAEgB,SAAA,QAAW,MAAS,MAAS;AAC3C,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AAClB,WAAA;AAAA,EACT;AAGE,MAAA,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACO,WAAA;AAAA,EACT;AAEM,QAAA,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AACtC,WAAA;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAEnC,QAAA,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAW,KAC9D,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAY,GAAG,KAAK,MAAM,CAAC,CAAY,CAAC,GAC/D;AACO,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;;;;;;;;;"} | ||
| {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import { readonly, ref, toRaw, watch } from 'vue-demi'\nimport type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Ref } from 'vue-demi'\n\nexport * from '@tanstack/store'\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport function useStore<\n TState,\n TSelected = NoInfer<TState>,\n TUpdater extends AnyUpdater = AnyUpdater,\n>(\n store: Store<TState, TUpdater>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n): Readonly<Ref<TSelected>> {\n const slice = ref(selector(store.state)) as Ref<TSelected>\n\n watch(\n () => store,\n (value, _oldValue, onCleanup) => {\n const unsub = value.subscribe(() => {\n const data = selector(value.state)\n if (shallow(toRaw(slice.value), data)) {\n return\n }\n slice.value = data\n })\n\n onCleanup(() => {\n unsub()\n })\n },\n { immediate: true },\n )\n\n return readonly(slice) as never\n}\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":["store","ref","watch","toRaw","readonly"],"mappings":";;;;AAQO,SAAS,SAKdA,QACA,WAAkD,CAAC,MAAM,GAC/B;AAC1B,QAAM,QAAQC,QAAA,IAAI,SAASD,OAAM,KAAK,CAAC;AAEvCE,UAAA;AAAA,IACE,MAAMF;AAAA,IACN,CAAC,OAAO,WAAW,cAAc;AACzB,YAAA,QAAQ,MAAM,UAAU,MAAM;AAC5B,cAAA,OAAO,SAAS,MAAM,KAAK;AACjC,YAAI,QAAQG,QAAAA,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG;AACrC;AAAA,QAAA;AAEF,cAAM,QAAQ;AAAA,MAAA,CACf;AAED,gBAAU,MAAM;AACR,cAAA;AAAA,MAAA,CACP;AAAA,IACH;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EACpB;AAEA,SAAOC,QAAAA,SAAS,KAAK;AACvB;AAEgB,SAAA,QAAW,MAAS,MAAS;AAC3C,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AAClB,WAAA;AAAA,EAAA;AAIP,MAAA,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACO,WAAA;AAAA,EAAA;AAGH,QAAA,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AACtC,WAAA;AAAA,EAAA;AAGT,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAEnC,QAAA,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAW,KAC9D,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAY,GAAG,KAAK,MAAM,CAAC,CAAY,CAAC,GAC/D;AACO,aAAA;AAAA,IAAA;AAAA,EACT;AAEK,SAAA;AACT;;;;;;;;;"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { readonly, ref, toRaw, watch } from 'vue-demi'\nimport type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Ref } from 'vue-demi'\n\nexport * from '@tanstack/store'\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport function useStore<\n TState,\n TSelected = NoInfer<TState>,\n TUpdater extends AnyUpdater = AnyUpdater,\n>(\n store: Store<TState, TUpdater>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n): Readonly<Ref<TSelected>> {\n const slice = ref(selector(store.state)) as Ref<TSelected>\n\n watch(\n () => store,\n (value, _oldValue, onCleanup) => {\n const unsub = value.subscribe(() => {\n const data = selector(value.state)\n if (shallow(toRaw(slice.value), data)) {\n return\n }\n slice.value = data\n })\n\n onCleanup(() => {\n unsub()\n })\n },\n { immediate: true },\n )\n\n return readonly(slice) as never\n}\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":[],"mappings":";;AAQO,SAAS,SAKd,OACA,WAAkD,CAAC,MAAM,GAC/B;AAC1B,QAAM,QAAQ,IAAI,SAAS,MAAM,KAAK,CAAC;AAEvC;AAAA,IACE,MAAM;AAAA,IACN,CAAC,OAAO,WAAW,cAAc;AACzB,YAAA,QAAQ,MAAM,UAAU,MAAM;AAC5B,cAAA,OAAO,SAAS,MAAM,KAAK;AACjC,YAAI,QAAQ,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG;AACrC;AAAA,QACF;AACA,cAAM,QAAQ;AAAA,MAAA,CACf;AAED,gBAAU,MAAM;AACR;MAAA,CACP;AAAA,IACH;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EAAA;AAGpB,SAAO,SAAS,KAAK;AACvB;AAEgB,SAAA,QAAW,MAAS,MAAS;AAC3C,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AAClB,WAAA;AAAA,EACT;AAGE,MAAA,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACO,WAAA;AAAA,EACT;AAEM,QAAA,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AACtC,WAAA;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAEnC,QAAA,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAW,KAC9D,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAY,GAAG,KAAK,MAAM,CAAC,CAAY,CAAC,GAC/D;AACO,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;"} | ||
| {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { readonly, ref, toRaw, watch } from 'vue-demi'\nimport type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Ref } from 'vue-demi'\n\nexport * from '@tanstack/store'\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport function useStore<\n TState,\n TSelected = NoInfer<TState>,\n TUpdater extends AnyUpdater = AnyUpdater,\n>(\n store: Store<TState, TUpdater>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n): Readonly<Ref<TSelected>> {\n const slice = ref(selector(store.state)) as Ref<TSelected>\n\n watch(\n () => store,\n (value, _oldValue, onCleanup) => {\n const unsub = value.subscribe(() => {\n const data = selector(value.state)\n if (shallow(toRaw(slice.value), data)) {\n return\n }\n slice.value = data\n })\n\n onCleanup(() => {\n unsub()\n })\n },\n { immediate: true },\n )\n\n return readonly(slice) as never\n}\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":[],"mappings":";;AAQO,SAAS,SAKd,OACA,WAAkD,CAAC,MAAM,GAC/B;AAC1B,QAAM,QAAQ,IAAI,SAAS,MAAM,KAAK,CAAC;AAEvC;AAAA,IACE,MAAM;AAAA,IACN,CAAC,OAAO,WAAW,cAAc;AACzB,YAAA,QAAQ,MAAM,UAAU,MAAM;AAC5B,cAAA,OAAO,SAAS,MAAM,KAAK;AACjC,YAAI,QAAQ,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG;AACrC;AAAA,QAAA;AAEF,cAAM,QAAQ;AAAA,MAAA,CACf;AAED,gBAAU,MAAM;AACR,cAAA;AAAA,MAAA,CACP;AAAA,IACH;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,EACpB;AAEA,SAAO,SAAS,KAAK;AACvB;AAEgB,SAAA,QAAW,MAAS,MAAS;AAC3C,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AAClB,WAAA;AAAA,EAAA;AAIP,MAAA,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACO,WAAA;AAAA,EAAA;AAGH,QAAA,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AACtC,WAAA;AAAA,EAAA;AAGT,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAEnC,QAAA,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAW,KAC9D,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAY,GAAG,KAAK,MAAM,CAAC,CAAY,CAAC,GAC/D;AACO,aAAA;AAAA,IAAA;AAAA,EACT;AAEK,SAAA;AACT;"} |
+2
-2
| { | ||
| "name": "@tanstack/vue-store", | ||
| "version": "0.5.6", | ||
| "version": "0.5.7", | ||
| "description": "Framework agnostic type-safe store w/ reactive framework adapters", | ||
@@ -49,3 +49,3 @@ "author": "Tanner Linsley", | ||
| "devDependencies": { | ||
| "@vitejs/plugin-vue": "^5.1.4", | ||
| "@vitejs/plugin-vue": "^5.1.5", | ||
| "@vue/composition-api": "^1.7.2", | ||
@@ -52,0 +52,0 @@ "vue": "^3.5.12", |
12882
0.15%