🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@tanstack/vue-store

Package Overview
Dependencies
Maintainers
7
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tanstack/vue-store - npm Package Compare versions

Comparing version
0.9.3
to
0.10.0
+54
dist/index.cjs
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;"}