@tanstack/vue-store
Advanced tools
| Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); | ||
| let vue_demi = require("vue-demi"); | ||
| //#region src/index.ts | ||
| function useStore(store, selector = (d) => d, options = {}) { | ||
| const slice = (0, vue_demi.ref)(selector(store.get())); | ||
| const equal = options.equal ?? shallow; | ||
| (0, vue_demi.watch)(() => store, (value, _oldValue, onCleanup) => { | ||
| const unsub = value.subscribe((s) => { | ||
| const data = selector(s); | ||
| if (equal((0, vue_demi.toRaw)(slice.value), data)) return; | ||
| slice.value = data; | ||
| }).unsubscribe; | ||
| onCleanup(() => { | ||
| unsub(); | ||
| }); | ||
| }, { immediate: true }); | ||
| return (0, vue_demi.readonly)(slice); | ||
| } | ||
| function shallow(objA, objB) { | ||
| if (Object.is(objA, objB)) return true; | ||
| if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) return false; | ||
| if (objA instanceof Map && objB instanceof Map) { | ||
| if (objA.size !== objB.size) return false; | ||
| for (const [k, v] of objA) if (!objB.has(k) || !Object.is(v, objB.get(k))) return false; | ||
| return true; | ||
| } | ||
| if (objA instanceof Set && objB instanceof Set) { | ||
| if (objA.size !== objB.size) return false; | ||
| for (const v of objA) if (!objB.has(v)) return false; | ||
| return true; | ||
| } | ||
| if (objA instanceof Date && objB instanceof Date) { | ||
| if (objA.getTime() !== objB.getTime()) return false; | ||
| return true; | ||
| } | ||
| const keysA = Object.keys(objA); | ||
| if (keysA.length !== Object.keys(objB).length) return false; | ||
| for (let i = 0; i < keysA.length; i++) if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) return false; | ||
| return true; | ||
| } | ||
| //#endregion | ||
| exports.shallow = shallow; | ||
| exports.useStore = useStore; | ||
| var _tanstack_store = require("@tanstack/store"); | ||
| Object.keys(_tanstack_store).forEach(function (k) { | ||
| if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, { | ||
| enumerable: true, | ||
| get: function () { return _tanstack_store[k]; } | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=index.cjs.map |
| {"version":3,"file":"index.cjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { readonly, ref, toRaw, watch } from 'vue-demi'\nimport type { Atom, ReadonlyAtom } from '@tanstack/store'\nimport type { Ref } from 'vue-demi'\n\nexport * from '@tanstack/store'\n\ntype EqualityFn<T> = (objA: T, objB: T) => boolean\ninterface UseStoreOptions<T> {\n equal?: EqualityFn<T>\n}\n\nexport function useStore<TState, TSelected = NoInfer<TState>>(\n store: Atom<TState> | ReadonlyAtom<TState>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n options: UseStoreOptions<TSelected> = {},\n): Readonly<Ref<TSelected>> {\n const slice = ref(selector(store.get())) as Ref<TSelected>\n const equal = options.equal ?? shallow\n\n watch(\n () => store,\n (value, _oldValue, onCleanup) => {\n const unsub = value.subscribe((s) => {\n const data = selector(s)\n if (equal(toRaw(slice.value), data)) {\n return\n }\n slice.value = data\n }).unsubscribe\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 if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false\n for (const [k, v] of objA) {\n if (!objB.has(k) || !Object.is(v, objB.get(k))) return false\n }\n return true\n }\n\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false\n for (const v of objA) {\n if (!objB.has(v)) return false\n }\n return true\n }\n\n if (objA instanceof Date && objB instanceof Date) {\n if (objA.getTime() !== objB.getTime()) return false\n return true\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"],"mappings":";;;;AAWA,SAAgB,SACd,OACA,YAAmD,MAAM,GACzD,UAAsC,EAAE,EACd;CAC1B,MAAM,0BAAY,SAAS,MAAM,KAAK,CAAC,CAAC;CACxC,MAAM,QAAQ,QAAQ,SAAS;AAE/B,2BACQ,QACL,OAAO,WAAW,cAAc;EAC/B,MAAM,QAAQ,MAAM,WAAW,MAAM;GACnC,MAAM,OAAO,SAAS,EAAE;AACxB,OAAI,0BAAY,MAAM,MAAM,EAAE,KAAK,CACjC;AAEF,SAAM,QAAQ;IACd,CAAC;AAEH,kBAAgB;AACd,UAAO;IACP;IAEJ,EAAE,WAAW,MAAM,CACpB;AAED,+BAAgB,MAAM;;AAGxB,SAAgB,QAAW,MAAS,MAAS;AAC3C,KAAI,OAAO,GAAG,MAAM,KAAK,CACvB,QAAO;AAGT,KACE,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,KAET,QAAO;AAGT,KAAI,gBAAgB,OAAO,gBAAgB,KAAK;AAC9C,MAAI,KAAK,SAAS,KAAK,KAAM,QAAO;AACpC,OAAK,MAAM,CAAC,GAAG,MAAM,KACnB,KAAI,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC,CAAE,QAAO;AAEzD,SAAO;;AAGT,KAAI,gBAAgB,OAAO,gBAAgB,KAAK;AAC9C,MAAI,KAAK,SAAS,KAAK,KAAM,QAAO;AACpC,OAAK,MAAM,KAAK,KACd,KAAI,CAAC,KAAK,IAAI,EAAE,CAAE,QAAO;AAE3B,SAAO;;AAGT,KAAI,gBAAgB,QAAQ,gBAAgB,MAAM;AAChD,MAAI,KAAK,SAAS,KAAK,KAAK,SAAS,CAAE,QAAO;AAC9C,SAAO;;CAGT,MAAM,QAAQ,OAAO,KAAK,KAAK;AAC/B,KAAI,MAAM,WAAW,OAAO,KAAK,KAAK,CAAC,OACrC,QAAO;AAGT,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAChC,KACE,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,GAAa,IAC/D,CAAC,OAAO,GAAG,KAAK,MAAM,KAAgB,KAAK,MAAM,IAAe,CAEhE,QAAO;AAGX,QAAO"} |
| import { Atom, ReadonlyAtom } from "@tanstack/store"; | ||
| import { Ref } from "vue-demi"; | ||
| export * from "@tanstack/store"; | ||
| //#region src/index.d.ts | ||
| type EqualityFn<T> = (objA: T, objB: T) => boolean; | ||
| interface UseStoreOptions<T> { | ||
| equal?: EqualityFn<T>; | ||
| } | ||
| declare function useStore<TState, TSelected = NoInfer<TState>>(store: Atom<TState> | ReadonlyAtom<TState>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Readonly<Ref<TSelected>>; | ||
| declare function shallow<T>(objA: T, objB: T): boolean; | ||
| //#endregion | ||
| export { shallow, useStore }; | ||
| //# sourceMappingURL=index.d.cts.map |
| import { Ref } from "vue-demi"; | ||
| import { Atom, ReadonlyAtom } from "@tanstack/store"; | ||
| export * from "@tanstack/store"; | ||
| //#region src/index.d.ts | ||
| type EqualityFn<T> = (objA: T, objB: T) => boolean; | ||
| interface UseStoreOptions<T> { | ||
| equal?: EqualityFn<T>; | ||
| } | ||
| declare function useStore<TState, TSelected = NoInfer<TState>>(store: Atom<TState> | ReadonlyAtom<TState>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Readonly<Ref<TSelected>>; | ||
| declare function shallow<T>(objA: T, objB: T): boolean; | ||
| //#endregion | ||
| export { shallow, useStore }; | ||
| //# sourceMappingURL=index.d.ts.map |
| import { readonly, ref, toRaw, watch } from "vue-demi"; | ||
| export * from "@tanstack/store" | ||
| //#region src/index.ts | ||
| function useStore(store, selector = (d) => d, options = {}) { | ||
| const slice = ref(selector(store.get())); | ||
| const equal = options.equal ?? shallow; | ||
| watch(() => store, (value, _oldValue, onCleanup) => { | ||
| const unsub = value.subscribe((s) => { | ||
| const data = selector(s); | ||
| if (equal(toRaw(slice.value), data)) return; | ||
| slice.value = data; | ||
| }).unsubscribe; | ||
| onCleanup(() => { | ||
| unsub(); | ||
| }); | ||
| }, { immediate: true }); | ||
| return readonly(slice); | ||
| } | ||
| function shallow(objA, objB) { | ||
| if (Object.is(objA, objB)) return true; | ||
| if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) return false; | ||
| if (objA instanceof Map && objB instanceof Map) { | ||
| if (objA.size !== objB.size) return false; | ||
| for (const [k, v] of objA) if (!objB.has(k) || !Object.is(v, objB.get(k))) return false; | ||
| return true; | ||
| } | ||
| if (objA instanceof Set && objB instanceof Set) { | ||
| if (objA.size !== objB.size) return false; | ||
| for (const v of objA) if (!objB.has(v)) return false; | ||
| return true; | ||
| } | ||
| if (objA instanceof Date && objB instanceof Date) { | ||
| if (objA.getTime() !== objB.getTime()) return false; | ||
| return true; | ||
| } | ||
| const keysA = Object.keys(objA); | ||
| if (keysA.length !== Object.keys(objB).length) return false; | ||
| for (let i = 0; i < keysA.length; i++) if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) return false; | ||
| return true; | ||
| } | ||
| //#endregion | ||
| export { shallow, useStore }; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { readonly, ref, toRaw, watch } from 'vue-demi'\nimport type { Atom, ReadonlyAtom } from '@tanstack/store'\nimport type { Ref } from 'vue-demi'\n\nexport * from '@tanstack/store'\n\ntype EqualityFn<T> = (objA: T, objB: T) => boolean\ninterface UseStoreOptions<T> {\n equal?: EqualityFn<T>\n}\n\nexport function useStore<TState, TSelected = NoInfer<TState>>(\n store: Atom<TState> | ReadonlyAtom<TState>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n options: UseStoreOptions<TSelected> = {},\n): Readonly<Ref<TSelected>> {\n const slice = ref(selector(store.get())) as Ref<TSelected>\n const equal = options.equal ?? shallow\n\n watch(\n () => store,\n (value, _oldValue, onCleanup) => {\n const unsub = value.subscribe((s) => {\n const data = selector(s)\n if (equal(toRaw(slice.value), data)) {\n return\n }\n slice.value = data\n }).unsubscribe\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 if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false\n for (const [k, v] of objA) {\n if (!objB.has(k) || !Object.is(v, objB.get(k))) return false\n }\n return true\n }\n\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false\n for (const v of objA) {\n if (!objB.has(v)) return false\n }\n return true\n }\n\n if (objA instanceof Date && objB instanceof Date) {\n if (objA.getTime() !== objB.getTime()) return false\n return true\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"],"mappings":";;;;;AAWA,SAAgB,SACd,OACA,YAAmD,MAAM,GACzD,UAAsC,EAAE,EACd;CAC1B,MAAM,QAAQ,IAAI,SAAS,MAAM,KAAK,CAAC,CAAC;CACxC,MAAM,QAAQ,QAAQ,SAAS;AAE/B,aACQ,QACL,OAAO,WAAW,cAAc;EAC/B,MAAM,QAAQ,MAAM,WAAW,MAAM;GACnC,MAAM,OAAO,SAAS,EAAE;AACxB,OAAI,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,CACjC;AAEF,SAAM,QAAQ;IACd,CAAC;AAEH,kBAAgB;AACd,UAAO;IACP;IAEJ,EAAE,WAAW,MAAM,CACpB;AAED,QAAO,SAAS,MAAM;;AAGxB,SAAgB,QAAW,MAAS,MAAS;AAC3C,KAAI,OAAO,GAAG,MAAM,KAAK,CACvB,QAAO;AAGT,KACE,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,KAET,QAAO;AAGT,KAAI,gBAAgB,OAAO,gBAAgB,KAAK;AAC9C,MAAI,KAAK,SAAS,KAAK,KAAM,QAAO;AACpC,OAAK,MAAM,CAAC,GAAG,MAAM,KACnB,KAAI,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC,CAAE,QAAO;AAEzD,SAAO;;AAGT,KAAI,gBAAgB,OAAO,gBAAgB,KAAK;AAC9C,MAAI,KAAK,SAAS,KAAK,KAAM,QAAO;AACpC,OAAK,MAAM,KAAK,KACd,KAAI,CAAC,KAAK,IAAI,EAAE,CAAE,QAAO;AAE3B,SAAO;;AAGT,KAAI,gBAAgB,QAAQ,gBAAgB,MAAM;AAChD,MAAI,KAAK,SAAS,KAAK,KAAK,SAAS,CAAE,QAAO;AAC9C,SAAO;;CAGT,MAAM,QAAQ,OAAO,KAAK,KAAK;AAC/B,KAAI,MAAM,WAAW,OAAO,KAAK,KAAK,CAAC,OACrC,QAAO;AAGT,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAChC,KACE,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,GAAa,IAC/D,CAAC,OAAO,GAAG,KAAK,MAAM,KAAgB,KAAK,MAAM,IAAe,CAEhE,QAAO;AAGX,QAAO"} |
+10
-16
| { | ||
| "name": "@tanstack/vue-store", | ||
| "version": "0.9.3", | ||
| "version": "0.10.0", | ||
| "description": "Framework agnostic type-safe store w/ reactive framework adapters", | ||
@@ -23,15 +23,9 @@ "author": "Tanner Linsley", | ||
| "type": "module", | ||
| "types": "dist/esm/index.d.ts", | ||
| "main": "dist/cjs/index.cjs", | ||
| "module": "dist/esm/index.js", | ||
| "types": "./dist/index.d.cts", | ||
| "main": "./dist/index.cjs", | ||
| "module": "./dist/index.js", | ||
| "exports": { | ||
| ".": { | ||
| "import": { | ||
| "types": "./dist/esm/index.d.ts", | ||
| "default": "./dist/esm/index.js" | ||
| }, | ||
| "require": { | ||
| "types": "./dist/cjs/index.d.cts", | ||
| "default": "./dist/cjs/index.cjs" | ||
| } | ||
| "import": "./dist/index.js", | ||
| "require": "./dist/index.cjs" | ||
| }, | ||
@@ -47,9 +41,9 @@ "./package.json": "./package.json" | ||
| "vue-demi": "^0.14.10", | ||
| "@tanstack/store": "0.9.3" | ||
| "@tanstack/store": "0.10.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@testing-library/vue": "^8.1.0", | ||
| "@vitejs/plugin-vue": "^6.0.3", | ||
| "@vitejs/plugin-vue": "^6.0.5", | ||
| "@vue/composition-api": "^1.7.2", | ||
| "vue": "^3.5.22", | ||
| "vue": "^3.5.32", | ||
| "vue2": "npm:vue@2.6", | ||
@@ -82,4 +76,4 @@ "vue2.7": "npm:vue@2.7" | ||
| "test:build": "publint --strict", | ||
| "build": "vite build" | ||
| "build": "tsdown --tsconfig tsconfig.build.json" | ||
| } | ||
| } |
| "use strict"; | ||
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | ||
| const vueDemi = require("vue-demi"); | ||
| const store = require("@tanstack/store"); | ||
| function useStore(store2, selector = (d) => d, options = {}) { | ||
| const slice = vueDemi.ref(selector(store2.get())); | ||
| const equal = options.equal ?? shallow; | ||
| vueDemi.watch( | ||
| () => store2, | ||
| (value, _oldValue, onCleanup) => { | ||
| const unsub = value.subscribe((s) => { | ||
| const data = selector(s); | ||
| if (equal(vueDemi.toRaw(slice.value), data)) { | ||
| return; | ||
| } | ||
| slice.value = data; | ||
| }).unsubscribe; | ||
| onCleanup(() => { | ||
| unsub(); | ||
| }); | ||
| }, | ||
| { immediate: true } | ||
| ); | ||
| return vueDemi.readonly(slice); | ||
| } | ||
| function shallow(objA, objB) { | ||
| if (Object.is(objA, objB)) { | ||
| return true; | ||
| } | ||
| if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) { | ||
| return false; | ||
| } | ||
| if (objA instanceof Map && objB instanceof Map) { | ||
| if (objA.size !== objB.size) return false; | ||
| for (const [k, v] of objA) { | ||
| if (!objB.has(k) || !Object.is(v, objB.get(k))) return false; | ||
| } | ||
| return true; | ||
| } | ||
| if (objA instanceof Set && objB instanceof Set) { | ||
| if (objA.size !== objB.size) return false; | ||
| for (const v of objA) { | ||
| if (!objB.has(v)) return false; | ||
| } | ||
| return true; | ||
| } | ||
| if (objA instanceof Date && objB instanceof Date) { | ||
| if (objA.getTime() !== objB.getTime()) return false; | ||
| return true; | ||
| } | ||
| const keysA = Object.keys(objA); | ||
| if (keysA.length !== Object.keys(objB).length) { | ||
| return false; | ||
| } | ||
| for (let i = 0; i < keysA.length; i++) { | ||
| if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) { | ||
| return false; | ||
| } | ||
| } | ||
| return true; | ||
| } | ||
| exports.shallow = shallow; | ||
| exports.useStore = useStore; | ||
| Object.keys(store).forEach((k) => { | ||
| if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, { | ||
| enumerable: true, | ||
| get: () => store[k] | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=index.cjs.map |
| {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import { readonly, ref, toRaw, watch } from 'vue-demi'\nimport type { Atom, ReadonlyAtom } from '@tanstack/store'\nimport type { Ref } from 'vue-demi'\n\nexport * from '@tanstack/store'\n\ntype EqualityFn<T> = (objA: T, objB: T) => boolean\ninterface UseStoreOptions<T> {\n equal?: EqualityFn<T>\n}\n\nexport function useStore<TState, TSelected = NoInfer<TState>>(\n store: Atom<TState> | ReadonlyAtom<TState>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n options: UseStoreOptions<TSelected> = {},\n): Readonly<Ref<TSelected>> {\n const slice = ref(selector(store.get())) as Ref<TSelected>\n const equal = options.equal ?? shallow\n\n watch(\n () => store,\n (value, _oldValue, onCleanup) => {\n const unsub = value.subscribe((s) => {\n const data = selector(s)\n if (equal(toRaw(slice.value), data)) {\n return\n }\n slice.value = data\n }).unsubscribe\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 if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false\n for (const [k, v] of objA) {\n if (!objB.has(k) || !Object.is(v, objB.get(k))) return false\n }\n return true\n }\n\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false\n for (const v of objA) {\n if (!objB.has(v)) return false\n }\n return true\n }\n\n if (objA instanceof Date && objB instanceof Date) {\n if (objA.getTime() !== objB.getTime()) return false\n return true\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":";;;;AAWO,SAAS,SACdA,QACA,WAAkD,CAAC,MAAM,GACzD,UAAsC,IACZ;AAC1B,QAAM,QAAQC,QAAAA,IAAI,SAASD,OAAM,IAAA,CAAK,CAAC;AACvC,QAAM,QAAQ,QAAQ,SAAS;AAE/BE,UAAAA;AAAAA,IACE,MAAMF;AAAA,IACN,CAAC,OAAO,WAAW,cAAc;AAC/B,YAAM,QAAQ,MAAM,UAAU,CAAC,MAAM;AACnC,cAAM,OAAO,SAAS,CAAC;AACvB,YAAI,MAAMG,QAAAA,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG;AACnC;AAAA,QACF;AACA,cAAM,QAAQ;AAAA,MAChB,CAAC,EAAE;AAEH,gBAAU,MAAM;AACd,cAAA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,EAAE,WAAW,KAAA;AAAA,EAAK;AAGpB,SAAOC,QAAAA,SAAS,KAAK;AACvB;AAEO,SAAS,QAAW,MAAS,MAAS;AAC3C,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,MACE,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACA,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,OAAO,gBAAgB,KAAK;AAC9C,QAAI,KAAK,SAAS,KAAK,KAAM,QAAO;AACpC,eAAW,CAAC,GAAG,CAAC,KAAK,MAAM;AACzB,UAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,EAAG,QAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,OAAO,gBAAgB,KAAK;AAC9C,QAAI,KAAK,SAAS,KAAK,KAAM,QAAO;AACpC,eAAW,KAAK,MAAM;AACpB,UAAI,CAAC,KAAK,IAAI,CAAC,EAAG,QAAO;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,QAAQ,gBAAgB,MAAM;AAChD,QAAI,KAAK,QAAA,MAAc,KAAK,QAAA,EAAW,QAAO;AAC9C,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AAC7C,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QACE,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;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;;;;;;;"} |
| import { Atom, ReadonlyAtom } from '@tanstack/store'; | ||
| import { Ref } from 'vue-demi'; | ||
| export * from '@tanstack/store'; | ||
| type EqualityFn<T> = (objA: T, objB: T) => boolean; | ||
| interface UseStoreOptions<T> { | ||
| equal?: EqualityFn<T>; | ||
| } | ||
| export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Atom<TState> | ReadonlyAtom<TState>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Readonly<Ref<TSelected>>; | ||
| export declare function shallow<T>(objA: T, objB: T): boolean; |
| import { Atom, ReadonlyAtom } from '@tanstack/store'; | ||
| import { Ref } from 'vue-demi'; | ||
| export * from '@tanstack/store'; | ||
| type EqualityFn<T> = (objA: T, objB: T) => boolean; | ||
| interface UseStoreOptions<T> { | ||
| equal?: EqualityFn<T>; | ||
| } | ||
| export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Atom<TState> | ReadonlyAtom<TState>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Readonly<Ref<TSelected>>; | ||
| export declare function shallow<T>(objA: T, objB: T): boolean; |
| import { ref, watch, toRaw, readonly } from "vue-demi"; | ||
| export * from "@tanstack/store"; | ||
| function useStore(store, selector = (d) => d, options = {}) { | ||
| const slice = ref(selector(store.get())); | ||
| const equal = options.equal ?? shallow; | ||
| watch( | ||
| () => store, | ||
| (value, _oldValue, onCleanup) => { | ||
| const unsub = value.subscribe((s) => { | ||
| const data = selector(s); | ||
| if (equal(toRaw(slice.value), data)) { | ||
| return; | ||
| } | ||
| slice.value = data; | ||
| }).unsubscribe; | ||
| onCleanup(() => { | ||
| unsub(); | ||
| }); | ||
| }, | ||
| { immediate: true } | ||
| ); | ||
| return readonly(slice); | ||
| } | ||
| function shallow(objA, objB) { | ||
| if (Object.is(objA, objB)) { | ||
| return true; | ||
| } | ||
| if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) { | ||
| return false; | ||
| } | ||
| if (objA instanceof Map && objB instanceof Map) { | ||
| if (objA.size !== objB.size) return false; | ||
| for (const [k, v] of objA) { | ||
| if (!objB.has(k) || !Object.is(v, objB.get(k))) return false; | ||
| } | ||
| return true; | ||
| } | ||
| if (objA instanceof Set && objB instanceof Set) { | ||
| if (objA.size !== objB.size) return false; | ||
| for (const v of objA) { | ||
| if (!objB.has(v)) return false; | ||
| } | ||
| return true; | ||
| } | ||
| if (objA instanceof Date && objB instanceof Date) { | ||
| if (objA.getTime() !== objB.getTime()) return false; | ||
| return true; | ||
| } | ||
| const keysA = Object.keys(objA); | ||
| if (keysA.length !== Object.keys(objB).length) { | ||
| return false; | ||
| } | ||
| for (let i = 0; i < keysA.length; i++) { | ||
| if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) { | ||
| return false; | ||
| } | ||
| } | ||
| return true; | ||
| } | ||
| export { | ||
| shallow, | ||
| useStore | ||
| }; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { readonly, ref, toRaw, watch } from 'vue-demi'\nimport type { Atom, ReadonlyAtom } from '@tanstack/store'\nimport type { Ref } from 'vue-demi'\n\nexport * from '@tanstack/store'\n\ntype EqualityFn<T> = (objA: T, objB: T) => boolean\ninterface UseStoreOptions<T> {\n equal?: EqualityFn<T>\n}\n\nexport function useStore<TState, TSelected = NoInfer<TState>>(\n store: Atom<TState> | ReadonlyAtom<TState>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n options: UseStoreOptions<TSelected> = {},\n): Readonly<Ref<TSelected>> {\n const slice = ref(selector(store.get())) as Ref<TSelected>\n const equal = options.equal ?? shallow\n\n watch(\n () => store,\n (value, _oldValue, onCleanup) => {\n const unsub = value.subscribe((s) => {\n const data = selector(s)\n if (equal(toRaw(slice.value), data)) {\n return\n }\n slice.value = data\n }).unsubscribe\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 if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false\n for (const [k, v] of objA) {\n if (!objB.has(k) || !Object.is(v, objB.get(k))) return false\n }\n return true\n }\n\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false\n for (const v of objA) {\n if (!objB.has(v)) return false\n }\n return true\n }\n\n if (objA instanceof Date && objB instanceof Date) {\n if (objA.getTime() !== objB.getTime()) return false\n return true\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":";;AAWO,SAAS,SACd,OACA,WAAkD,CAAC,MAAM,GACzD,UAAsC,IACZ;AAC1B,QAAM,QAAQ,IAAI,SAAS,MAAM,IAAA,CAAK,CAAC;AACvC,QAAM,QAAQ,QAAQ,SAAS;AAE/B;AAAA,IACE,MAAM;AAAA,IACN,CAAC,OAAO,WAAW,cAAc;AAC/B,YAAM,QAAQ,MAAM,UAAU,CAAC,MAAM;AACnC,cAAM,OAAO,SAAS,CAAC;AACvB,YAAI,MAAM,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG;AACnC;AAAA,QACF;AACA,cAAM,QAAQ;AAAA,MAChB,CAAC,EAAE;AAEH,gBAAU,MAAM;AACd,cAAA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,EAAE,WAAW,KAAA;AAAA,EAAK;AAGpB,SAAO,SAAS,KAAK;AACvB;AAEO,SAAS,QAAW,MAAS,MAAS;AAC3C,MAAI,OAAO,GAAG,MAAM,IAAI,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,MACE,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACA,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,OAAO,gBAAgB,KAAK;AAC9C,QAAI,KAAK,SAAS,KAAK,KAAM,QAAO;AACpC,eAAW,CAAC,GAAG,CAAC,KAAK,MAAM;AACzB,UAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,EAAG,QAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,OAAO,gBAAgB,KAAK;AAC9C,QAAI,KAAK,SAAS,KAAK,KAAM,QAAO;AACpC,eAAW,KAAK,MAAM;AACpB,UAAI,CAAC,KAAK,IAAI,CAAC,EAAG,QAAO;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,QAAQ,gBAAgB,MAAM;AAChD,QAAI,KAAK,QAAA,MAAc,KAAK,QAAA,EAAW,QAAO;AAC9C,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,MAAI,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,QAAQ;AAC7C,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QACE,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;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;"} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
17349
-4.28%181
-17.73%1
Infinity%+ Added
- Removed
Updated