Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@tanstack/solid-store

Package Overview
Dependencies
Maintainers
6
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tanstack/solid-store - npm Package Compare versions

Comparing version
0.8.1
to
0.9.0
+4
-4
dist/cjs/index.cjs

@@ -6,6 +6,6 @@ "use strict";

function useStore(store2, selector = (d) => d, options = {}) {
const [signal, setSignal] = solidJs.createSignal(selector(store2.state));
const [signal, setSignal] = solidJs.createSignal(selector(store2.get()));
const equal = options.equal ?? shallow;
const unsub = store2.subscribe(() => {
const data = selector(store2.state);
const unsub = store2.subscribe((s) => {
const data = selector(s);
if (equal(signal(), data)) {

@@ -15,3 +15,3 @@ return;

setSignal(() => data);
});
}).unsubscribe;
solidJs.onCleanup(() => {

@@ -18,0 +18,0 @@ unsub();

@@ -1,1 +0,1 @@

{"version":3,"file":"index.cjs","sources":["../../src/index.tsx"],"sourcesContent":["import { createSignal, onCleanup } from 'solid-js'\nimport type { Derived, Store } from '@tanstack/store'\nimport type { Accessor } from 'solid-js'\n\nexport * from '@tanstack/store'\n\n/**\n * @private\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\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: Store<TState, any>,\n selector?: (state: NoInfer<TState>) => TSelected,\n options?: UseStoreOptions<TSelected>,\n): Accessor<TSelected>\nexport function useStore<TState, TSelected = NoInfer<TState>>(\n store: Derived<TState, any>,\n selector?: (state: NoInfer<TState>) => TSelected,\n options?: UseStoreOptions<TSelected>,\n): Accessor<TSelected>\nexport function useStore<TState, TSelected = NoInfer<TState>>(\n store: Store<TState, any> | Derived<TState, any>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n options: UseStoreOptions<TSelected> = {},\n): Accessor<TSelected> {\n const [signal, setSignal] = createSignal(selector(store.state))\n const equal = options.equal ?? shallow\n\n const unsub = store.subscribe(() => {\n const data = selector(store.state)\n if (equal(signal(), data)) {\n return\n }\n setSignal(() => data)\n })\n\n onCleanup(() => {\n unsub()\n })\n\n return signal\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":["useStore","store","selector","d","options","signal","setSignal","createSignal","state","equal","shallow","unsub","subscribe","data","onCleanup","objA","objB","Object","is","Map","size","k","v","has","get","Set","Date","getTime","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":";;;;AAyBO,SAASA,SACdC,QACAC,WAAmDC,OAAMA,GACzDC,UAAsC,IACjB;AACrB,QAAM,CAACC,QAAQC,SAAS,IAAIC,QAAAA,aAAaL,SAASD,OAAMO,KAAK,CAAC;AAC9D,QAAMC,QAAQL,QAAQK,SAASC;AAE/B,QAAMC,QAAQV,OAAMW,UAAU,MAAM;AAClC,UAAMC,OAAOX,SAASD,OAAMO,KAAK;AACjC,QAAIC,MAAMJ,UAAUQ,IAAI,GAAG;AACzB;AAAA,IACF;AACAP,cAAU,MAAMO,IAAI;AAAA,EACtB,CAAC;AAEDC,UAAAA,UAAU,MAAM;AACdH,UAAAA;AAAAA,EACF,CAAC;AAED,SAAON;AACT;AAEO,SAASK,QAAWK,MAASC,MAAS;AAC3C,MAAIC,OAAOC,GAAGH,MAAMC,IAAI,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,MACE,OAAOD,SAAS,YAChBA,SAAS,QACT,OAAOC,SAAS,YAChBA,SAAS,MACT;AACA,WAAO;AAAA,EACT;AAEA,MAAID,gBAAgBI,OAAOH,gBAAgBG,KAAK;AAC9C,QAAIJ,KAAKK,SAASJ,KAAKI,KAAM,QAAO;AACpC,eAAW,CAACC,GAAGC,CAAC,KAAKP,MAAM;AACzB,UAAI,CAACC,KAAKO,IAAIF,CAAC,KAAK,CAACJ,OAAOC,GAAGI,GAAGN,KAAKQ,IAAIH,CAAC,CAAC,EAAG,QAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAEA,MAAIN,gBAAgBU,OAAOT,gBAAgBS,KAAK;AAC9C,QAAIV,KAAKK,SAASJ,KAAKI,KAAM,QAAO;AACpC,eAAWE,KAAKP,MAAM;AACpB,UAAI,CAACC,KAAKO,IAAID,CAAC,EAAG,QAAO;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AAEA,MAAIP,gBAAgBW,QAAQV,gBAAgBU,MAAM;AAChD,QAAIX,KAAKY,QAAAA,MAAcX,KAAKW,QAAAA,EAAW,QAAO;AAC9C,WAAO;AAAA,EACT;AAEA,QAAMC,QAAQX,OAAOY,KAAKd,IAAI;AAC9B,MAAIa,MAAME,WAAWb,OAAOY,KAAKb,IAAI,EAAEc,QAAQ;AAC7C,WAAO;AAAA,EACT;AAEA,WAASC,IAAI,GAAGA,IAAIH,MAAME,QAAQC,KAAK;AACrC,QACE,CAACd,OAAOe,UAAUC,eAAeC,KAAKlB,MAAMY,MAAMG,CAAC,CAAW,KAC9D,CAACd,OAAOC,GAAGH,KAAKa,MAAMG,CAAC,CAAY,GAAGf,KAAKY,MAAMG,CAAC,CAAY,CAAC,GAC/D;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;;;;;;;"}
{"version":3,"file":"index.cjs","sources":["../../src/index.tsx"],"sourcesContent":["import { createSignal, onCleanup } from 'solid-js'\nimport type { Accessor } from 'solid-js'\nimport type { Atom, ReadonlyAtom } from '@tanstack/store'\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): Accessor<TSelected> {\n const [signal, setSignal] = createSignal(selector(store.get()))\n const equal = options.equal ?? shallow\n\n const unsub = store.subscribe((s) => {\n const data = selector(s)\n if (equal(signal(), data)) {\n return\n }\n setSignal(() => data)\n }).unsubscribe\n\n onCleanup(() => {\n unsub()\n })\n\n return signal\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":["useStore","store","selector","d","options","signal","setSignal","createSignal","get","equal","shallow","unsub","subscribe","s","data","unsubscribe","onCleanup","objA","objB","Object","is","Map","size","k","v","has","Set","Date","getTime","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":";;;;AAWO,SAASA,SACdC,QACAC,WAAmDC,OAAMA,GACzDC,UAAsC,IACjB;AACrB,QAAM,CAACC,QAAQC,SAAS,IAAIC,QAAAA,aAAaL,SAASD,OAAMO,IAAAA,CAAK,CAAC;AAC9D,QAAMC,QAAQL,QAAQK,SAASC;AAE/B,QAAMC,QAAQV,OAAMW,UAAWC,CAAAA,MAAM;AACnC,UAAMC,OAAOZ,SAASW,CAAC;AACvB,QAAIJ,MAAMJ,UAAUS,IAAI,GAAG;AACzB;AAAA,IACF;AACAR,cAAU,MAAMQ,IAAI;AAAA,EACtB,CAAC,EAAEC;AAEHC,UAAAA,UAAU,MAAM;AACdL,UAAAA;AAAAA,EACF,CAAC;AAED,SAAON;AACT;AAEO,SAASK,QAAWO,MAASC,MAAS;AAC3C,MAAIC,OAAOC,GAAGH,MAAMC,IAAI,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,MACE,OAAOD,SAAS,YAChBA,SAAS,QACT,OAAOC,SAAS,YAChBA,SAAS,MACT;AACA,WAAO;AAAA,EACT;AAEA,MAAID,gBAAgBI,OAAOH,gBAAgBG,KAAK;AAC9C,QAAIJ,KAAKK,SAASJ,KAAKI,KAAM,QAAO;AACpC,eAAW,CAACC,GAAGC,CAAC,KAAKP,MAAM;AACzB,UAAI,CAACC,KAAKO,IAAIF,CAAC,KAAK,CAACJ,OAAOC,GAAGI,GAAGN,KAAKV,IAAIe,CAAC,CAAC,EAAG,QAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAEA,MAAIN,gBAAgBS,OAAOR,gBAAgBQ,KAAK;AAC9C,QAAIT,KAAKK,SAASJ,KAAKI,KAAM,QAAO;AACpC,eAAWE,KAAKP,MAAM;AACpB,UAAI,CAACC,KAAKO,IAAID,CAAC,EAAG,QAAO;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AAEA,MAAIP,gBAAgBU,QAAQT,gBAAgBS,MAAM;AAChD,QAAIV,KAAKW,QAAAA,MAAcV,KAAKU,QAAAA,EAAW,QAAO;AAC9C,WAAO;AAAA,EACT;AAEA,QAAMC,QAAQV,OAAOW,KAAKb,IAAI;AAC9B,MAAIY,MAAME,WAAWZ,OAAOW,KAAKZ,IAAI,EAAEa,QAAQ;AAC7C,WAAO;AAAA,EACT;AAEA,WAASC,IAAI,GAAGA,IAAIH,MAAME,QAAQC,KAAK;AACrC,QACE,CAACb,OAAOc,UAAUC,eAAeC,KAAKjB,MAAMW,MAAMG,CAAC,CAAW,KAC9D,CAACb,OAAOC,GAAGH,KAAKY,MAAMG,CAAC,CAAY,GAAGd,KAAKW,MAAMG,CAAC,CAAY,CAAC,GAC/D;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;;;;;;;"}

@@ -1,8 +0,4 @@

import { Derived, Store } from '@tanstack/store';
import { Accessor } from 'solid-js';
import { Atom, ReadonlyAtom } from '@tanstack/store';
export * from '@tanstack/store';
/**
* @private
*/
export type NoInfer<T> = [T][T extends any ? 0 : never];
type EqualityFn<T> = (objA: T, objB: T) => boolean;

@@ -12,4 +8,3 @@ interface UseStoreOptions<T> {

}
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Store<TState, any>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Derived<TState, any>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Atom<TState> | ReadonlyAtom<TState>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function shallow<T>(objA: T, objB: T): boolean;

@@ -1,8 +0,4 @@

import { Derived, Store } from '@tanstack/store';
import { Accessor } from 'solid-js';
import { Atom, ReadonlyAtom } from '@tanstack/store';
export * from '@tanstack/store';
/**
* @private
*/
export type NoInfer<T> = [T][T extends any ? 0 : never];
type EqualityFn<T> = (objA: T, objB: T) => boolean;

@@ -12,4 +8,3 @@ interface UseStoreOptions<T> {

}
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Store<TState, any>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Derived<TState, any>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Atom<TState> | ReadonlyAtom<TState>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function shallow<T>(objA: T, objB: T): boolean;
import { createSignal, onCleanup } from "solid-js";
export * from "@tanstack/store";
function useStore(store, selector = (d) => d, options = {}) {
const [signal, setSignal] = createSignal(selector(store.state));
const [signal, setSignal] = createSignal(selector(store.get()));
const equal = options.equal ?? shallow;
const unsub = store.subscribe(() => {
const data = selector(store.state);
const unsub = store.subscribe((s) => {
const data = selector(s);
if (equal(signal(), data)) {

@@ -12,3 +12,3 @@ return;

setSignal(() => data);
});
}).unsubscribe;
onCleanup(() => {

@@ -15,0 +15,0 @@ unsub();

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":["../../src/index.tsx"],"sourcesContent":["import { createSignal, onCleanup } from 'solid-js'\nimport type { Derived, Store } from '@tanstack/store'\nimport type { Accessor } from 'solid-js'\n\nexport * from '@tanstack/store'\n\n/**\n * @private\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\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: Store<TState, any>,\n selector?: (state: NoInfer<TState>) => TSelected,\n options?: UseStoreOptions<TSelected>,\n): Accessor<TSelected>\nexport function useStore<TState, TSelected = NoInfer<TState>>(\n store: Derived<TState, any>,\n selector?: (state: NoInfer<TState>) => TSelected,\n options?: UseStoreOptions<TSelected>,\n): Accessor<TSelected>\nexport function useStore<TState, TSelected = NoInfer<TState>>(\n store: Store<TState, any> | Derived<TState, any>,\n selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,\n options: UseStoreOptions<TSelected> = {},\n): Accessor<TSelected> {\n const [signal, setSignal] = createSignal(selector(store.state))\n const equal = options.equal ?? shallow\n\n const unsub = store.subscribe(() => {\n const data = selector(store.state)\n if (equal(signal(), data)) {\n return\n }\n setSignal(() => data)\n })\n\n onCleanup(() => {\n unsub()\n })\n\n return signal\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":["useStore","store","selector","d","options","signal","setSignal","createSignal","state","equal","shallow","unsub","subscribe","data","onCleanup","objA","objB","Object","is","Map","size","k","v","has","get","Set","Date","getTime","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":";;AAyBO,SAASA,SACdC,OACAC,WAAmDC,OAAMA,GACzDC,UAAsC,IACjB;AACrB,QAAM,CAACC,QAAQC,SAAS,IAAIC,aAAaL,SAASD,MAAMO,KAAK,CAAC;AAC9D,QAAMC,QAAQL,QAAQK,SAASC;AAE/B,QAAMC,QAAQV,MAAMW,UAAU,MAAM;AAClC,UAAMC,OAAOX,SAASD,MAAMO,KAAK;AACjC,QAAIC,MAAMJ,UAAUQ,IAAI,GAAG;AACzB;AAAA,IACF;AACAP,cAAU,MAAMO,IAAI;AAAA,EACtB,CAAC;AAEDC,YAAU,MAAM;AACdH,UAAAA;AAAAA,EACF,CAAC;AAED,SAAON;AACT;AAEO,SAASK,QAAWK,MAASC,MAAS;AAC3C,MAAIC,OAAOC,GAAGH,MAAMC,IAAI,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,MACE,OAAOD,SAAS,YAChBA,SAAS,QACT,OAAOC,SAAS,YAChBA,SAAS,MACT;AACA,WAAO;AAAA,EACT;AAEA,MAAID,gBAAgBI,OAAOH,gBAAgBG,KAAK;AAC9C,QAAIJ,KAAKK,SAASJ,KAAKI,KAAM,QAAO;AACpC,eAAW,CAACC,GAAGC,CAAC,KAAKP,MAAM;AACzB,UAAI,CAACC,KAAKO,IAAIF,CAAC,KAAK,CAACJ,OAAOC,GAAGI,GAAGN,KAAKQ,IAAIH,CAAC,CAAC,EAAG,QAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAEA,MAAIN,gBAAgBU,OAAOT,gBAAgBS,KAAK;AAC9C,QAAIV,KAAKK,SAASJ,KAAKI,KAAM,QAAO;AACpC,eAAWE,KAAKP,MAAM;AACpB,UAAI,CAACC,KAAKO,IAAID,CAAC,EAAG,QAAO;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AAEA,MAAIP,gBAAgBW,QAAQV,gBAAgBU,MAAM;AAChD,QAAIX,KAAKY,QAAAA,MAAcX,KAAKW,QAAAA,EAAW,QAAO;AAC9C,WAAO;AAAA,EACT;AAEA,QAAMC,QAAQX,OAAOY,KAAKd,IAAI;AAC9B,MAAIa,MAAME,WAAWb,OAAOY,KAAKb,IAAI,EAAEc,QAAQ;AAC7C,WAAO;AAAA,EACT;AAEA,WAASC,IAAI,GAAGA,IAAIH,MAAME,QAAQC,KAAK;AACrC,QACE,CAACd,OAAOe,UAAUC,eAAeC,KAAKlB,MAAMY,MAAMG,CAAC,CAAW,KAC9D,CAACd,OAAOC,GAAGH,KAAKa,MAAMG,CAAC,CAAY,GAAGf,KAAKY,MAAMG,CAAC,CAAY,CAAC,GAC/D;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;"}
{"version":3,"file":"index.js","sources":["../../src/index.tsx"],"sourcesContent":["import { createSignal, onCleanup } from 'solid-js'\nimport type { Accessor } from 'solid-js'\nimport type { Atom, ReadonlyAtom } from '@tanstack/store'\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): Accessor<TSelected> {\n const [signal, setSignal] = createSignal(selector(store.get()))\n const equal = options.equal ?? shallow\n\n const unsub = store.subscribe((s) => {\n const data = selector(s)\n if (equal(signal(), data)) {\n return\n }\n setSignal(() => data)\n }).unsubscribe\n\n onCleanup(() => {\n unsub()\n })\n\n return signal\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":["useStore","store","selector","d","options","signal","setSignal","createSignal","get","equal","shallow","unsub","subscribe","s","data","unsubscribe","onCleanup","objA","objB","Object","is","Map","size","k","v","has","Set","Date","getTime","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":";;AAWO,SAASA,SACdC,OACAC,WAAmDC,OAAMA,GACzDC,UAAsC,IACjB;AACrB,QAAM,CAACC,QAAQC,SAAS,IAAIC,aAAaL,SAASD,MAAMO,IAAAA,CAAK,CAAC;AAC9D,QAAMC,QAAQL,QAAQK,SAASC;AAE/B,QAAMC,QAAQV,MAAMW,UAAWC,CAAAA,MAAM;AACnC,UAAMC,OAAOZ,SAASW,CAAC;AACvB,QAAIJ,MAAMJ,UAAUS,IAAI,GAAG;AACzB;AAAA,IACF;AACAR,cAAU,MAAMQ,IAAI;AAAA,EACtB,CAAC,EAAEC;AAEHC,YAAU,MAAM;AACdL,UAAAA;AAAAA,EACF,CAAC;AAED,SAAON;AACT;AAEO,SAASK,QAAWO,MAASC,MAAS;AAC3C,MAAIC,OAAOC,GAAGH,MAAMC,IAAI,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,MACE,OAAOD,SAAS,YAChBA,SAAS,QACT,OAAOC,SAAS,YAChBA,SAAS,MACT;AACA,WAAO;AAAA,EACT;AAEA,MAAID,gBAAgBI,OAAOH,gBAAgBG,KAAK;AAC9C,QAAIJ,KAAKK,SAASJ,KAAKI,KAAM,QAAO;AACpC,eAAW,CAACC,GAAGC,CAAC,KAAKP,MAAM;AACzB,UAAI,CAACC,KAAKO,IAAIF,CAAC,KAAK,CAACJ,OAAOC,GAAGI,GAAGN,KAAKV,IAAIe,CAAC,CAAC,EAAG,QAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAEA,MAAIN,gBAAgBS,OAAOR,gBAAgBQ,KAAK;AAC9C,QAAIT,KAAKK,SAASJ,KAAKI,KAAM,QAAO;AACpC,eAAWE,KAAKP,MAAM;AACpB,UAAI,CAACC,KAAKO,IAAID,CAAC,EAAG,QAAO;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AAEA,MAAIP,gBAAgBU,QAAQT,gBAAgBS,MAAM;AAChD,QAAIV,KAAKW,QAAAA,MAAcV,KAAKU,QAAAA,EAAW,QAAO;AAC9C,WAAO;AAAA,EACT;AAEA,QAAMC,QAAQV,OAAOW,KAAKb,IAAI;AAC9B,MAAIY,MAAME,WAAWZ,OAAOW,KAAKZ,IAAI,EAAEa,QAAQ;AAC7C,WAAO;AAAA,EACT;AAEA,WAASC,IAAI,GAAGA,IAAIH,MAAME,QAAQC,KAAK;AACrC,QACE,CAACb,OAAOc,UAAUC,eAAeC,KAAKjB,MAAMW,MAAMG,CAAC,CAAW,KAC9D,CAACb,OAAOC,GAAGH,KAAKY,MAAMG,CAAC,CAAY,GAAGd,KAAKW,MAAMG,CAAC,CAAY,CAAC,GAC/D;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;"}

@@ -1,8 +0,4 @@

import type { Derived, Store } from '@tanstack/store';
import type { Accessor } from 'solid-js';
import type { Atom, ReadonlyAtom } from '@tanstack/store';
export * from '@tanstack/store';
/**
* @private
*/
export type NoInfer<T> = [T][T extends any ? 0 : never];
type EqualityFn<T> = (objA: T, objB: T) => boolean;

@@ -12,4 +8,3 @@ interface UseStoreOptions<T> {

}
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Store<TState, any>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Derived<TState, any>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function useStore<TState, TSelected = NoInfer<TState>>(store: Atom<TState> | ReadonlyAtom<TState>, selector?: (state: NoInfer<TState>) => TSelected, options?: UseStoreOptions<TSelected>): Accessor<TSelected>;
export declare function shallow<T>(objA: T, objB: T): boolean;
import { createSignal, onCleanup } from 'solid-js';
export * from '@tanstack/store';
export function useStore(store, selector = (d) => d, options = {}) {
const [signal, setSignal] = createSignal(selector(store.state));
const [signal, setSignal] = createSignal(selector(store.get()));
const equal = options.equal ?? shallow;
const unsub = store.subscribe(() => {
const data = selector(store.state);
const unsub = store.subscribe((s) => {
const data = selector(s);
if (equal(signal(), data)) {

@@ -12,3 +12,3 @@ return;

setSignal(() => data);
});
}).unsubscribe;
onCleanup(() => {

@@ -15,0 +15,0 @@ unsub();

@@ -1,1 +0,1 @@

{"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
{"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
{
"name": "@tanstack/solid-store",
"version": "0.8.1",
"version": "0.9.0",
"description": "Framework agnostic type-safe store w/ reactive framework adapters",

@@ -49,3 +49,3 @@ "author": "Tanner Linsley",

"dependencies": {
"@tanstack/store": "0.8.1"
"@tanstack/store": "0.9.0"
},

@@ -64,7 +64,6 @@ "devDependencies": {

"test:types": "pnpm run \"/^test:types:ts[0-9]{2}$/\"",
"test:types:ts50": "node ../../node_modules/typescript50/lib/tsc.js",
"test:types:ts51": "node ../../node_modules/typescript51/lib/tsc.js",
"test:types:ts52": "node ../../node_modules/typescript52/lib/tsc.js",
"test:types:ts53": "node ../../node_modules/typescript53/lib/tsc.js",
"test:types:ts54": "tsc",
"test:types:ts56": "node ../../node_modules/typescript56/lib/tsc.js",
"test:types:ts57": "node ../../node_modules/typescript57/lib/tsc.js",
"test:types:ts58": "node ../../node_modules/typescript58/lib/tsc.js",
"test:types:ts59": "tsc",
"test:lib": "vitest",

@@ -71,0 +70,0 @@ "test:lib:dev": "pnpm run test:lib --watch",

import { createSignal, onCleanup } from 'solid-js'
import type { Derived, Store } from '@tanstack/store'
import type { Accessor } from 'solid-js'
import type { Atom, ReadonlyAtom } from '@tanstack/store'
export * from '@tanstack/store'
/**
* @private
*/
export type NoInfer<T> = [T][T extends any ? 0 : never]
type EqualityFn<T> = (objA: T, objB: T) => boolean

@@ -17,21 +13,11 @@ interface UseStoreOptions<T> {

export function useStore<TState, TSelected = NoInfer<TState>>(
store: Store<TState, any>,
selector?: (state: NoInfer<TState>) => TSelected,
options?: UseStoreOptions<TSelected>,
): Accessor<TSelected>
export function useStore<TState, TSelected = NoInfer<TState>>(
store: Derived<TState, any>,
selector?: (state: NoInfer<TState>) => TSelected,
options?: UseStoreOptions<TSelected>,
): Accessor<TSelected>
export function useStore<TState, TSelected = NoInfer<TState>>(
store: Store<TState, any> | Derived<TState, any>,
store: Atom<TState> | ReadonlyAtom<TState>,
selector: (state: NoInfer<TState>) => TSelected = (d) => d as any,
options: UseStoreOptions<TSelected> = {},
): Accessor<TSelected> {
const [signal, setSignal] = createSignal(selector(store.state))
const [signal, setSignal] = createSignal(selector(store.get()))
const equal = options.equal ?? shallow
const unsub = store.subscribe(() => {
const data = selector(store.state)
const unsub = store.subscribe((s) => {
const data = selector(s)
if (equal(signal(), data)) {

@@ -41,3 +27,3 @@ return

setSignal(() => data)
})
}).unsubscribe

@@ -44,0 +30,0 @@ onCleanup(() => {