@tanstack/solid-store
Advanced tools
| "use strict"; | ||
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | ||
| const solidJs = require("solid-js"); | ||
| const store$1 = require("solid-js/store"); | ||
| const store = require("@tanstack/store"); | ||
| function useStore(store2, selector = (d) => d) { | ||
| const [slice, setSlice] = store$1.createStore({ | ||
| value: selector(store2.state) | ||
| }); | ||
| const unsub = store2.subscribe(() => { | ||
| const newValue = selector(store2.state); | ||
| setSlice("value", store$1.reconcile(newValue)); | ||
| }); | ||
| solidJs.onCleanup(() => { | ||
| unsub(); | ||
| }); | ||
| return () => slice.value; | ||
| } | ||
| 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 type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Accessor } from 'solid-js'\nimport { onCleanup } from 'solid-js'\nimport { createStore, reconcile } from 'solid-js/store'\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): Accessor<TSelected> {\n const [slice, setSlice] = createStore({\n value: selector(store.state),\n })\n\n const unsub = store.subscribe(() => {\n const newValue = selector(store.state)\n setSlice('value', reconcile(newValue))\n })\n\n onCleanup(() => {\n unsub()\n })\n\n return () => slice.value\n}\n"],"names":["store","createStore","reconcile","onCleanup"],"mappings":";;;;;AASO,SAAS,SAKdA,QACA,WAAkD,CAAC,MAAM,GACpC;AACrB,QAAM,CAAC,OAAO,QAAQ,IAAIC,oBAAY;AAAA,IACpC,OAAO,SAASD,OAAM,KAAK;AAAA,EAAA,CAC5B;AAEK,QAAA,QAAQA,OAAM,UAAU,MAAM;AAC5B,UAAA,WAAW,SAASA,OAAM,KAAK;AAC5B,aAAA,SAASE,kBAAU,QAAQ,CAAC;AAAA,EAAA,CACtC;AAEDC,UAAAA,UAAU,MAAM;AACR;EAAA,CACP;AAED,SAAO,MAAM,MAAM;AACrB;;;;;;;;;"} |
| import type { AnyUpdater, Store } from '@tanstack/store'; | ||
| import type { Accessor } from 'solid-js'; | ||
| export * from '@tanstack/store'; | ||
| export type NoInfer<T> = [T][T extends any ? 0 : never]; | ||
| export declare function useStore<TState, TSelected = NoInfer<TState>, TUpdater extends AnyUpdater = AnyUpdater>(store: Store<TState, TUpdater>, selector?: (state: NoInfer<TState>) => TSelected): Accessor<TSelected>; |
| import type { AnyUpdater, Store } from '@tanstack/store'; | ||
| import type { Accessor } from 'solid-js'; | ||
| export * from '@tanstack/store'; | ||
| export type NoInfer<T> = [T][T extends any ? 0 : never]; | ||
| export declare function useStore<TState, TSelected = NoInfer<TState>, TUpdater extends AnyUpdater = AnyUpdater>(store: Store<TState, TUpdater>, selector?: (state: NoInfer<TState>) => TSelected): Accessor<TSelected>; |
| import { onCleanup } from "solid-js"; | ||
| import { createStore, reconcile } from "solid-js/store"; | ||
| export * from "@tanstack/store"; | ||
| function useStore(store, selector = (d) => d) { | ||
| const [slice, setSlice] = createStore({ | ||
| value: selector(store.state) | ||
| }); | ||
| const unsub = store.subscribe(() => { | ||
| const newValue = selector(store.state); | ||
| setSlice("value", reconcile(newValue)); | ||
| }); | ||
| onCleanup(() => { | ||
| unsub(); | ||
| }); | ||
| return () => slice.value; | ||
| } | ||
| export { | ||
| useStore | ||
| }; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Accessor } from 'solid-js'\nimport { onCleanup } from 'solid-js'\nimport { createStore, reconcile } from 'solid-js/store'\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): Accessor<TSelected> {\n const [slice, setSlice] = createStore({\n value: selector(store.state),\n })\n\n const unsub = store.subscribe(() => {\n const newValue = selector(store.state)\n setSlice('value', reconcile(newValue))\n })\n\n onCleanup(() => {\n unsub()\n })\n\n return () => slice.value\n}\n"],"names":[],"mappings":";;;AASO,SAAS,SAKd,OACA,WAAkD,CAAC,MAAM,GACpC;AACrB,QAAM,CAAC,OAAO,QAAQ,IAAI,YAAY;AAAA,IACpC,OAAO,SAAS,MAAM,KAAK;AAAA,EAAA,CAC5B;AAEK,QAAA,QAAQ,MAAM,UAAU,MAAM;AAC5B,UAAA,WAAW,SAAS,MAAM,KAAK;AAC5B,aAAA,SAAS,UAAU,QAAQ,CAAC;AAAA,EAAA,CACtC;AAED,YAAU,MAAM;AACR;EAAA,CACP;AAED,SAAO,MAAM,MAAM;AACrB;"} |
| import { render, renderHook } from '@solidjs/testing-library' | ||
| import '@testing-library/jest-dom' | ||
| import { Store } from '@tanstack/store' | ||
| import { useStore } from '../index' | ||
| describe('useStore', () => { | ||
| it.todo('allows us to select state using a selector', async () => { | ||
| const store = new Store({ | ||
| select: 0, | ||
| ignored: 1, | ||
| }) | ||
| function Comp() { | ||
| const storeVal = useStore(store, (state) => state.select) | ||
| return <p>Store: {storeVal()}</p> | ||
| } | ||
| const { getByText } = render(() => <Comp />) | ||
| expect(getByText('Store: 0')).toBeInTheDocument() | ||
| }) | ||
| it('allows us to select state using a selector', () => { | ||
| const store = new Store({ | ||
| select: 0, | ||
| ignored: 1, | ||
| }) | ||
| const { result } = renderHook(() => | ||
| useStore(store, (state) => state.select), | ||
| ) | ||
| expect(result()).toBe(0) | ||
| }) | ||
| it('updates accessor value when state is updated', () => { | ||
| const store = new Store(0) | ||
| const { result } = renderHook(() => useStore(store)) | ||
| store.setState((prev) => prev + 1) | ||
| expect(result()).toBe(1) | ||
| }) | ||
| }) |
+22
-14
| { | ||
| "name": "@tanstack/solid-store", | ||
| "author": "Tanner Linsley", | ||
| "version": "0.2.1", | ||
| "version": "0.3.0", | ||
| "license": "MIT", | ||
@@ -22,18 +22,18 @@ "repository": "tanstack/solid-store", | ||
| "files": [ | ||
| "build", | ||
| "dist", | ||
| "src" | ||
| ], | ||
| "type": "module", | ||
| "types": "build/legacy/index.d.ts", | ||
| "main": "build/legacy/index.cjs", | ||
| "module": "build/legacy/index.js", | ||
| "types": "dist/esm/index.d.ts", | ||
| "main": "dist/cjs/index.cjs", | ||
| "module": "dist/esm/index.js", | ||
| "exports": { | ||
| ".": { | ||
| "import": { | ||
| "types": "./build/modern/index.d.ts", | ||
| "default": "./build/modern/index.js" | ||
| "types": "./dist/esm/index.d.ts", | ||
| "default": "./dist/esm/index.js" | ||
| }, | ||
| "require": { | ||
| "types": "./build/modern/index.d.cts", | ||
| "default": "./build/modern/index.cjs" | ||
| "types": "./dist/cjs/index.d.cts", | ||
| "default": "./dist/cjs/index.cjs" | ||
| } | ||
@@ -48,13 +48,21 @@ }, | ||
| "dependencies": { | ||
| "@tanstack/store": "0.1.3" | ||
| "@tanstack/store": "0.3.0" | ||
| }, | ||
| "devDependencies": { | ||
| "solid-js": "^1.7.8", | ||
| "vite-plugin-solid": "^2.8.0" | ||
| }, | ||
| "scripts": { | ||
| "clean": "rimraf ./build && rimraf ./coverage", | ||
| "clean": "rimraf ./dist && rimraf ./coverage", | ||
| "test:eslint": "eslint --ext .ts,.tsx ./src", | ||
| "test:types": "tsc", | ||
| "test:lib": "vitest run --coverage", | ||
| "test:types:versions49": "node ../../node_modules/typescript49/lib/tsc.js --project tsconfig.legacy.json", | ||
| "test:types:versions50": "node ../../node_modules/typescript50/lib/tsc.js", | ||
| "test:types:versions51": "node ../../node_modules/typescript51/lib/tsc.js", | ||
| "test:types:versions52": "tsc", | ||
| "test:types": "pnpm run \"/^test:types:versions.*/\"", | ||
| "test:lib": "vitest", | ||
| "test:lib:dev": "pnpm run test:lib --watch", | ||
| "test:build": "publint --strict", | ||
| "build": "tsup" | ||
| "build": "vite build" | ||
| } | ||
| } |
+2
-2
| import type { AnyUpdater, Store } from '@tanstack/store' | ||
| import type { Accessor} from 'solid-js'; | ||
| import type { Accessor } from 'solid-js' | ||
| import { onCleanup } from 'solid-js' | ||
@@ -19,3 +19,3 @@ import { createStore, reconcile } from 'solid-js/store' | ||
| const [slice, setSlice] = createStore({ | ||
| value: selector(store.state) | ||
| value: selector(store.state), | ||
| }) | ||
@@ -22,0 +22,0 @@ |
| "use strict"; | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __export = (target, all) => { | ||
| for (var name in all) | ||
| __defProp(target, name, { get: all[name], enumerable: true }); | ||
| }; | ||
| var __copyProps = (to, from, except, desc) => { | ||
| if (from && typeof from === "object" || typeof from === "function") { | ||
| for (let key of __getOwnPropNames(from)) | ||
| if (!__hasOwnProp.call(to, key) && key !== except) | ||
| __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
| } | ||
| return to; | ||
| }; | ||
| var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); | ||
| var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
| // src/index.ts | ||
| var src_exports = {}; | ||
| __export(src_exports, { | ||
| useStore: () => useStore | ||
| }); | ||
| module.exports = __toCommonJS(src_exports); | ||
| var import_solid_js = require("solid-js"); | ||
| var import_store = require("solid-js/store"); | ||
| __reExport(src_exports, require("@tanstack/store"), module.exports); | ||
| function useStore(store, selector = (d) => d) { | ||
| const [slice, setSlice] = (0, import_store.createStore)({ | ||
| value: selector(store.state) | ||
| }); | ||
| const unsub = store.subscribe(() => { | ||
| const newValue = selector(store.state); | ||
| setSlice("value", (0, import_store.reconcile)(newValue)); | ||
| }); | ||
| (0, import_solid_js.onCleanup)(() => { | ||
| unsub(); | ||
| }); | ||
| return () => slice.value; | ||
| } | ||
| // Annotate the CommonJS export names for ESM import in node: | ||
| 0 && (module.exports = { | ||
| useStore, | ||
| ...require("@tanstack/store") | ||
| }); | ||
| //# sourceMappingURL=index.cjs.map |
| {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Accessor} from 'solid-js';\nimport { onCleanup } from 'solid-js'\nimport { createStore, reconcile } from 'solid-js/store'\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): Accessor<TSelected> {\n const [slice, setSlice] = createStore({\n value: selector(store.state)\n })\n\n const unsub = store.subscribe(() => {\n const newValue = selector(store.state)\n setSlice('value', reconcile(newValue))\n })\n\n onCleanup(() => {\n unsub()\n })\n\n return () => slice.value\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAA0B;AAC1B,mBAAuC;AAEvC,wBAAc,4BALd;AASO,SAAS,SAKd,OACA,WAAkD,CAAC,MAAM,GACpC;AACrB,QAAM,CAAC,OAAO,QAAQ,QAAI,0BAAY;AAAA,IACpC,OAAO,SAAS,MAAM,KAAK;AAAA,EAC7B,CAAC;AAED,QAAM,QAAQ,MAAM,UAAU,MAAM;AAClC,UAAM,WAAW,SAAS,MAAM,KAAK;AACrC,aAAS,aAAS,wBAAU,QAAQ,CAAC;AAAA,EACvC,CAAC;AAED,iCAAU,MAAM;AACd,UAAM;AAAA,EACR,CAAC;AAED,SAAO,MAAM,MAAM;AACrB;","names":[]} |
| import { AnyUpdater, Store } from '@tanstack/store'; | ||
| export * from '@tanstack/store'; | ||
| import { Accessor } from 'solid-js'; | ||
| type NoInfer<T> = [T][T extends any ? 0 : never]; | ||
| declare function useStore<TState, TSelected = NoInfer<TState>, TUpdater extends AnyUpdater = AnyUpdater>(store: Store<TState, TUpdater>, selector?: (state: NoInfer<TState>) => TSelected): Accessor<TSelected>; | ||
| export { NoInfer, useStore }; |
| import { AnyUpdater, Store } from '@tanstack/store'; | ||
| export * from '@tanstack/store'; | ||
| import { Accessor } from 'solid-js'; | ||
| type NoInfer<T> = [T][T extends any ? 0 : never]; | ||
| declare function useStore<TState, TSelected = NoInfer<TState>, TUpdater extends AnyUpdater = AnyUpdater>(store: Store<TState, TUpdater>, selector?: (state: NoInfer<TState>) => TSelected): Accessor<TSelected>; | ||
| export { NoInfer, useStore }; |
| // src/index.ts | ||
| import { onCleanup } from "solid-js"; | ||
| import { createStore, reconcile } from "solid-js/store"; | ||
| export * from "@tanstack/store"; | ||
| function useStore(store, selector = (d) => d) { | ||
| const [slice, setSlice] = createStore({ | ||
| value: selector(store.state) | ||
| }); | ||
| const unsub = store.subscribe(() => { | ||
| const newValue = selector(store.state); | ||
| setSlice("value", reconcile(newValue)); | ||
| }); | ||
| onCleanup(() => { | ||
| unsub(); | ||
| }); | ||
| return () => slice.value; | ||
| } | ||
| export { | ||
| useStore | ||
| }; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Accessor} from 'solid-js';\nimport { onCleanup } from 'solid-js'\nimport { createStore, reconcile } from 'solid-js/store'\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): Accessor<TSelected> {\n const [slice, setSlice] = createStore({\n value: selector(store.state)\n })\n\n const unsub = store.subscribe(() => {\n const newValue = selector(store.state)\n setSlice('value', reconcile(newValue))\n })\n\n onCleanup(() => {\n unsub()\n })\n\n return () => slice.value\n}\n"],"mappings":";AAEA,SAAS,iBAAiB;AAC1B,SAAS,aAAa,iBAAiB;AAEvC,cAAc;AAIP,SAAS,SAKd,OACA,WAAkD,CAAC,MAAM,GACpC;AACrB,QAAM,CAAC,OAAO,QAAQ,IAAI,YAAY;AAAA,IACpC,OAAO,SAAS,MAAM,KAAK;AAAA,EAC7B,CAAC;AAED,QAAM,QAAQ,MAAM,UAAU,MAAM;AAClC,UAAM,WAAW,SAAS,MAAM,KAAK;AACrC,aAAS,SAAS,UAAU,QAAQ,CAAC;AAAA,EACvC,CAAC;AAED,YAAU,MAAM;AACd,UAAM;AAAA,EACR,CAAC;AAED,SAAO,MAAM,MAAM;AACrB;","names":[]} |
| "use strict"; | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __export = (target, all) => { | ||
| for (var name in all) | ||
| __defProp(target, name, { get: all[name], enumerable: true }); | ||
| }; | ||
| var __copyProps = (to, from, except, desc) => { | ||
| if (from && typeof from === "object" || typeof from === "function") { | ||
| for (let key of __getOwnPropNames(from)) | ||
| if (!__hasOwnProp.call(to, key) && key !== except) | ||
| __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
| } | ||
| return to; | ||
| }; | ||
| var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); | ||
| var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
| // src/index.ts | ||
| var src_exports = {}; | ||
| __export(src_exports, { | ||
| useStore: () => useStore | ||
| }); | ||
| module.exports = __toCommonJS(src_exports); | ||
| var import_solid_js = require("solid-js"); | ||
| var import_store = require("solid-js/store"); | ||
| __reExport(src_exports, require("@tanstack/store"), module.exports); | ||
| function useStore(store, selector = (d) => d) { | ||
| const [slice, setSlice] = (0, import_store.createStore)({ | ||
| value: selector(store.state) | ||
| }); | ||
| const unsub = store.subscribe(() => { | ||
| const newValue = selector(store.state); | ||
| setSlice("value", (0, import_store.reconcile)(newValue)); | ||
| }); | ||
| (0, import_solid_js.onCleanup)(() => { | ||
| unsub(); | ||
| }); | ||
| return () => slice.value; | ||
| } | ||
| // Annotate the CommonJS export names for ESM import in node: | ||
| 0 && (module.exports = { | ||
| useStore, | ||
| ...require("@tanstack/store") | ||
| }); | ||
| //# sourceMappingURL=index.cjs.map |
| {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Accessor} from 'solid-js';\nimport { onCleanup } from 'solid-js'\nimport { createStore, reconcile } from 'solid-js/store'\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): Accessor<TSelected> {\n const [slice, setSlice] = createStore({\n value: selector(store.state)\n })\n\n const unsub = store.subscribe(() => {\n const newValue = selector(store.state)\n setSlice('value', reconcile(newValue))\n })\n\n onCleanup(() => {\n unsub()\n })\n\n return () => slice.value\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAA0B;AAC1B,mBAAuC;AAEvC,wBAAc,4BALd;AASO,SAAS,SAKd,OACA,WAAkD,CAAC,MAAM,GACpC;AACrB,QAAM,CAAC,OAAO,QAAQ,QAAI,0BAAY;AAAA,IACpC,OAAO,SAAS,MAAM,KAAK;AAAA,EAC7B,CAAC;AAED,QAAM,QAAQ,MAAM,UAAU,MAAM;AAClC,UAAM,WAAW,SAAS,MAAM,KAAK;AACrC,aAAS,aAAS,wBAAU,QAAQ,CAAC;AAAA,EACvC,CAAC;AAED,iCAAU,MAAM;AACd,UAAM;AAAA,EACR,CAAC;AAED,SAAO,MAAM,MAAM;AACrB;","names":[]} |
| import { AnyUpdater, Store } from '@tanstack/store'; | ||
| export * from '@tanstack/store'; | ||
| import { Accessor } from 'solid-js'; | ||
| type NoInfer<T> = [T][T extends any ? 0 : never]; | ||
| declare function useStore<TState, TSelected = NoInfer<TState>, TUpdater extends AnyUpdater = AnyUpdater>(store: Store<TState, TUpdater>, selector?: (state: NoInfer<TState>) => TSelected): Accessor<TSelected>; | ||
| export { NoInfer, useStore }; |
| import { AnyUpdater, Store } from '@tanstack/store'; | ||
| export * from '@tanstack/store'; | ||
| import { Accessor } from 'solid-js'; | ||
| type NoInfer<T> = [T][T extends any ? 0 : never]; | ||
| declare function useStore<TState, TSelected = NoInfer<TState>, TUpdater extends AnyUpdater = AnyUpdater>(store: Store<TState, TUpdater>, selector?: (state: NoInfer<TState>) => TSelected): Accessor<TSelected>; | ||
| export { NoInfer, useStore }; |
| // src/index.ts | ||
| import { onCleanup } from "solid-js"; | ||
| import { createStore, reconcile } from "solid-js/store"; | ||
| export * from "@tanstack/store"; | ||
| function useStore(store, selector = (d) => d) { | ||
| const [slice, setSlice] = createStore({ | ||
| value: selector(store.state) | ||
| }); | ||
| const unsub = store.subscribe(() => { | ||
| const newValue = selector(store.state); | ||
| setSlice("value", reconcile(newValue)); | ||
| }); | ||
| onCleanup(() => { | ||
| unsub(); | ||
| }); | ||
| return () => slice.value; | ||
| } | ||
| export { | ||
| useStore | ||
| }; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import type { AnyUpdater, Store } from '@tanstack/store'\nimport type { Accessor} from 'solid-js';\nimport { onCleanup } from 'solid-js'\nimport { createStore, reconcile } from 'solid-js/store'\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): Accessor<TSelected> {\n const [slice, setSlice] = createStore({\n value: selector(store.state)\n })\n\n const unsub = store.subscribe(() => {\n const newValue = selector(store.state)\n setSlice('value', reconcile(newValue))\n })\n\n onCleanup(() => {\n unsub()\n })\n\n return () => slice.value\n}\n"],"mappings":";AAEA,SAAS,iBAAiB;AAC1B,SAAS,aAAa,iBAAiB;AAEvC,cAAc;AAIP,SAAS,SAKd,OACA,WAAkD,CAAC,MAAM,GACpC;AACrB,QAAM,CAAC,OAAO,QAAQ,IAAI,YAAY;AAAA,IACpC,OAAO,SAAS,MAAM,KAAK;AAAA,EAC7B,CAAC;AAED,QAAM,QAAQ,MAAM,UAAU,MAAM;AAClC,UAAM,WAAW,SAAS,MAAM,KAAK;AACrC,aAAS,SAAS,UAAU,QAAQ,CAAC;AAAA,EACvC,CAAC;AAED,YAAU,MAAM;AACd,UAAM;AAAA,EACR,CAAC;AAED,SAAO,MAAM,MAAM;AACrB;","names":[]} |
| import { render, renderHook } from '@solidjs/testing-library' | ||
| import '@testing-library/jest-dom' | ||
| import { Store } from '@tanstack/store' | ||
| import { useStore } from '../index' | ||
| describe('useStore', () => { | ||
| it.todo('allows us to select state using a selector', async () => { | ||
| const store = new Store({ | ||
| select: 0, | ||
| ignored: 1, | ||
| }) | ||
| function Comp() { | ||
| const storeVal = useStore(store, (state) => state.select) | ||
| return <p>Store: {storeVal()}</p> | ||
| } | ||
| const { getByText } = render(() => <Comp />) | ||
| expect(getByText('Store: 0')).toBeInTheDocument() | ||
| }) | ||
| it('allows us to select state using a selector', () => { | ||
| const store = new Store({ | ||
| select: 0, | ||
| ignored: 1, | ||
| }) | ||
| const { result } = renderHook(() => useStore(store, (state) => state.select)) | ||
| expect(result()).toBe(0) | ||
| }) | ||
| it('updates accessor value when state is updated', () => { | ||
| const store = new Store(0) | ||
| const { result } = renderHook(() => useStore(store)) | ||
| store.setState((prev) => prev + 1) | ||
| expect(result()).toBe(1) | ||
| }) | ||
| }) |
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.
Found 1 instance in 1 package
9430
-40.41%2
Infinity%10
-37.5%112
-44.55%1
Infinity%+ Added
- Removed
Updated