{"_id":"@custardcream/very-simple-store","_rev":"3-37c104ad3ce96b31d7fb829a50efa350","name":"@custardcream/very-simple-store","dist-tags":{"latest":"1.3.0"},"versions":{"0.0.1":{"author":{"name":"shiwoo.park","email":"custardcream@kakao.com"},"name":"@custardcream/very-simple-store","version":"0.0.1","bugs":{"url":"https://github.com/custardcream98/custard-library/issues"},"description":"A Simple React State Manager","repository":{"type":"git","url":"git+https://github.com/custardcream98/custard-library.git"},"keywords":["react","state","manager"],"homepage":"https://shiwoo.dev","license":"MIT","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/index.d.ts","peerDependencies":{"react":">=18.2.0","react-dom":">=18.2.0"},"devDependencies":{"@types/react":"^18.2.0","@types/react-dom":"^18.2.0","react":"^18.2.0","react-dom":"^18.2.0","eslint-config-custom":"0.0.1"},"lint-staged":{"src/**/*.{ts,tsx,js,jsx}":"pnpm lint:fix"},"scripts":{"lint:base":"eslint --ext .ts,.tsx,.js,.jsx .","lint:fix":"pnpm lint:base --fix","lint:debug":"pnpm lint:base --debug","lint":"pnpm lint:base && pnpm lint:style","pre-commit":"lint-staged"},"_id":"@custardcream/very-simple-store@0.0.1","_integrity":"sha512-h7rqIuhnt/KbSq84/S3IjxmaTGHE0xwaWvJ4QZPVirfDLtN4SC1tgI19n8ls40S+YJYBeNPXsfV4bK+kVBRXCQ==","_resolved":"/private/var/folders/cr/4xpl1pgs2v50tjd24xz6ydxw0000gn/T/c610ba49f90da495aa795e1845a7c5d5/custardcream-very-simple-store-0.0.1.tgz","_from":"file:custardcream-very-simple-store-0.0.1.tgz","_nodeVersion":"18.12.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-h7rqIuhnt/KbSq84/S3IjxmaTGHE0xwaWvJ4QZPVirfDLtN4SC1tgI19n8ls40S+YJYBeNPXsfV4bK+kVBRXCQ==","shasum":"eb55be3d8a882df69ba441c110682218740100be","tarball":"https://registry.npmjs.org/@custardcream/very-simple-store/-/very-simple-store-0.0.1.tgz","fileCount":59,"unpackedSize":57767,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFSWh3dLQzNAl9vp1mDDgJ7NUD9i3d1v7+8UGSGLQMm1AiEA2KZRKSdNWIxdhSC+TEC4zB/IrVfdhDgAku31PWynN7Y="}]},"_npmUser":{"name":"custardcream98","email":"custardcream@kakao.com"},"directories":{},"maintainers":[{"name":"custardcream98","email":"custardcream@kakao.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/very-simple-store_0.0.1_1700240949769_0.42734765118172646"},"_hasShrinkwrap":false},"1.1.0":{"author":{"name":"shiwoo.park","email":"custardcream@kakao.com"},"name":"@custardcream/very-simple-store","version":"1.1.0","bugs":{"url":"https://github.com/custardcream98/custard-library/issues"},"description":"A Simple React State Manager","repository":{"type":"git","url":"git+https://github.com/custardcream98/custard-library.git"},"keywords":["react","state","manager"],"homepage":"https://shiwoo.dev","license":"MIT","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/index.d.ts","peerDependencies":{"react":">=18.2.0","react-dom":">=18.2.0"},"devDependencies":{"@types/react":"^18.2.0","@types/react-dom":"^18.2.0","react":"^18.2.0","react-dom":"^18.2.0","eslint-config-custom":"0.0.1"},"lint-staged":{"src/**/*.{ts,tsx,js,jsx}":"pnpm lint:fix"},"scripts":{"lint:base":"eslint --ext .ts,.tsx,.js,.jsx .","lint:fix":"pnpm lint:base --fix","lint:debug":"pnpm lint:base --debug","lint":"pnpm lint:base && pnpm lint:style","pre-commit":"lint-staged"},"_id":"@custardcream/very-simple-store@1.1.0","_integrity":"sha512-w97btGBqNQQzCnT5CtSyc+y0/aOrNn+Mmmh+WWyYm+Cn04pXDve2NoSlFGQwfMEMW471CWQNYmLiR99A/Q7MLg==","_resolved":"/private/var/folders/cr/4xpl1pgs2v50tjd24xz6ydxw0000gn/T/f0876089f36fafe901ab4b5398cdba95/custardcream-very-simple-store-1.1.0.tgz","_from":"file:custardcream-very-simple-store-1.1.0.tgz","_nodeVersion":"18.12.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-w97btGBqNQQzCnT5CtSyc+y0/aOrNn+Mmmh+WWyYm+Cn04pXDve2NoSlFGQwfMEMW471CWQNYmLiR99A/Q7MLg==","shasum":"97ab66ce6891c45861a659cc110f103bf3994ebc","tarball":"https://registry.npmjs.org/@custardcream/very-simple-store/-/very-simple-store-1.1.0.tgz","fileCount":63,"unpackedSize":69362,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsvRcwawiQYYVbExHZajC3kH4zWSshazKiQyVuX9vVvQIgQY10SxQc1U6Tm4Tp7Oqh+h+M3QdqSBk2o3bENm7MrIA="}]},"_npmUser":{"name":"custardcream98","email":"custardcream@kakao.com"},"directories":{},"maintainers":[{"name":"custardcream98","email":"custardcream@kakao.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/very-simple-store_1.1.0_1700318075409_0.6713669074324897"},"_hasShrinkwrap":false},"1.2.0":{"author":{"name":"shiwoo.park","email":"custardcream@kakao.com"},"name":"@custardcream/very-simple-store","version":"1.2.0","bugs":{"url":"https://github.com/custardcream98/custard-library/issues"},"description":"A Simple React State Manager","repository":{"type":"git","url":"git+https://github.com/custardcream98/custard-library.git"},"keywords":["react","state","manager"],"homepage":"https://shiwoo.dev","license":"MIT","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/index.d.ts","peerDependencies":{"react":">=18.2.0","react-dom":">=18.2.0"},"devDependencies":{"@types/react":"^18.2.0","@types/react-dom":"^18.2.0","react":"^18.2.0","react-dom":"^18.2.0","eslint-config-custom":"0.0.1"},"lint-staged":{"src/**/*.{ts,tsx,js,jsx}":"pnpm lint:fix"},"scripts":{"lint:base":"eslint --ext .ts,.tsx,.js,.jsx .","lint:fix":"pnpm lint:base --fix","lint:debug":"pnpm lint:base --debug","lint":"pnpm lint:base && pnpm lint:style","pre-commit":"lint-staged"},"_id":"@custardcream/very-simple-store@1.2.0","_integrity":"sha512-z6O5TgB/uQSh9l/ZxPpGs/C5amQq2H+PeQh0KCSFcz4/5SGeP8mGhbahqXWqBGNPAw8Z5Yd7NSTZOUotc6VWDw==","_resolved":"/private/var/folders/cr/4xpl1pgs2v50tjd24xz6ydxw0000gn/T/432ef515cd295b4abc7236140576819f/custardcream-very-simple-store-1.2.0.tgz","_from":"file:custardcream-very-simple-store-1.2.0.tgz","_nodeVersion":"18.12.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-z6O5TgB/uQSh9l/ZxPpGs/C5amQq2H+PeQh0KCSFcz4/5SGeP8mGhbahqXWqBGNPAw8Z5Yd7NSTZOUotc6VWDw==","shasum":"d015d9e1492e93c0d2a0ef0c97a9946d81e49376","tarball":"https://registry.npmjs.org/@custardcream/very-simple-store/-/very-simple-store-1.2.0.tgz","fileCount":63,"unpackedSize":71119,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB9UrZZE3BSfrlPFBm5psMnMKdGxxQ0l245RvQhf5BxfAiEAx4dvrB+wu0Rirx6m9k4ffkSujPv1O8x0Q45HH4OlZOM="}]},"_npmUser":{"name":"custardcream98","email":"custardcream@kakao.com"},"directories":{},"maintainers":[{"name":"custardcream98","email":"custardcream@kakao.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/very-simple-store_1.2.0_1700371473633_0.569356726640482"},"_hasShrinkwrap":false},"1.3.0":{"author":{"name":"shiwoo.park","email":"custardcream@kakao.com"},"name":"@custardcream/very-simple-store","version":"1.3.0","bugs":{"url":"https://github.com/custardcream98/custard-library/issues"},"description":"A Simple React State Manager","repository":{"type":"git","url":"git+https://github.com/custardcream98/custard-library.git"},"keywords":["react","state","manager"],"homepage":"https://shiwoo.dev","license":"MIT","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/index.d.ts","peerDependencies":{"react":">=18.2.0","react-dom":">=18.2.0"},"devDependencies":{"@types/react":"^18.2.0","@types/react-dom":"^18.2.0","react":"^18.2.0","react-dom":"^18.2.0","eslint-config-custom":"0.0.1"},"lint-staged":{"src/**/*.{ts,tsx,js,jsx}":"pnpm lint:fix"},"scripts":{"lint:base":"eslint --ext .ts,.tsx,.js,.jsx .","lint:fix":"pnpm lint:base --fix","lint:debug":"pnpm lint:base --debug","lint":"pnpm lint:base && pnpm lint:style","pre-commit":"lint-staged"},"_id":"@custardcream/very-simple-store@1.3.0","_integrity":"sha512-XKTi+Do98RV9PHM9fx3UBseHmJsD5Wavd/Hxf7oE4JiyknnFgDCL0iQfozgkmW/I6ajMESAlWf7nHYqUS4M1nw==","_resolved":"/private/var/folders/cr/4xpl1pgs2v50tjd24xz6ydxw0000gn/T/13ee8b82312b32b12a826c24e63584d3/custardcream-very-simple-store-1.3.0.tgz","_from":"file:custardcream-very-simple-store-1.3.0.tgz","_nodeVersion":"18.12.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-XKTi+Do98RV9PHM9fx3UBseHmJsD5Wavd/Hxf7oE4JiyknnFgDCL0iQfozgkmW/I6ajMESAlWf7nHYqUS4M1nw==","shasum":"615c748e589d120104696761beb5fea50c0133cb","tarball":"https://registry.npmjs.org/@custardcream/very-simple-store/-/very-simple-store-1.3.0.tgz","fileCount":67,"unpackedSize":76553,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGoKfaLw6m3M/lrKht8+aZg2inDMb2JQ+5jUedQm4z5wIhAI5oIYAduCw2hcHFKu3fm7ZvyFdgWWFAi06cRYP3fBc1"}]},"_npmUser":{"name":"custardcream98","email":"custardcream@kakao.com"},"directories":{},"maintainers":[{"name":"custardcream98","email":"custardcream@kakao.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/very-simple-store_1.3.0_1700486273628_0.38048813225023825"},"_hasShrinkwrap":false}},"time":{"created":"2023-11-17T17:09:09.698Z","0.0.1":"2023-11-17T17:09:09.979Z","modified":"2023-11-20T13:17:54.110Z","1.1.0":"2023-11-18T14:34:35.777Z","1.2.0":"2023-11-19T05:24:33.843Z","1.3.0":"2023-11-20T13:17:53.893Z"},"maintainers":[{"name":"custardcream98","email":"custardcream@kakao.com"}],"description":"A Simple React State Manager","homepage":"https://shiwoo.dev","keywords":["react","state","manager"],"repository":{"type":"git","url":"git+https://github.com/custardcream98/custard-library.git"},"author":{"name":"shiwoo.park","email":"custardcream@kakao.com"},"bugs":{"url":"https://github.com/custardcream98/custard-library/issues"},"license":"MIT","readme":"# @custardcream/very-simple-store\n\n간단한 방법으로 구현한 React 전역 상태 관리 라이브러리입니다.\n\n언제 어디에서나 전역 상태와 selector를 선언하고 사용할 수 있고, 비동기 selector 기능도 제공합니다.\n\n## 샘플 코드와 실행 예시\n\n[링크](https://library.shiwoo.dev/sample)\n\n## 설치\n\n```bash\nnpm install @custardcream/very-simple-store\n```\n\n## 사용법\n\n### StoreRoot로 루트 감싸기\n\n```tsx\nimport { StoreRoot } from \"@custardcream/very-simple-store\";\n\nconst App = () => {\n  return (\n    <StoreRoot>\n      <App />\n    </StoreRoot>\n  );\n};\n```\n\n### `StoreNode` 사용하기\n\n`StoreNode`는 가장 기본적인 전역 상태의 단위입니다. `addStoreNode` 함수를 사용해 전역 상태를 선언할 수 있습니다.\n\n```tsx\nimport { addStoreNode } from \"@custardcream/very-simple-store\";\n\nexport const storeNode = addStoreNode({\n  initialState: 0,\n  key: \"testValue\",\n});\n```\n\n이렇게 선언된 `storeNode`는 `useStoreNode` 훅을 통해 사용할 수 있습니다.\n\n```tsx\nimport { useStoreNode } from \"@custardcream/very-simple-store\";\nimport { storeNode } from \"./storeNode\";\n\nconst Component = () => {\n  const [value, setValue] = useStoreNode(storeNode);\n\n  return (\n    <div>\n      <p>{value}</p>\n      <button onClick={() => setValue((prev) => prev + 1)}>+</button>\n    </div>\n  );\n};\n```\n\n`storeNode`를 어디에서 선언하는지는 중요하지 않습니다. 어디서든 해당 전역 상태를 사용하고 싶다면 `useStoreNode` 훅으로 사용해주세요.\n\n### `StoreSelectorNode` 사용하기\n\n`StoreSelectorNode`는 `StoreNode`를 기반으로 계산되는 상태의 단위입니다. `addStoreSelectorNode` 함수를 사용해 선언할 수 있습니다.\n\n```tsx\nimport { addStoreSelectorNode } from \"@custardcream/very-simple-store\";\nimport { storeNode } from \"./storeNode\";\n\nexport const storeSelectorNode = addStoreSelectorNode({\n  key: \"testStoreNodePlusOne\",\n  selector: ({ get }) => get(storeNode) + 1,\n});\n```\n\n`addStoreSelectorNode`에서 `selector` 파라미터는 `get`이라는 getter 함수를 제공합니다. 이 함수에 `StoreNode`를 넣으면 해당 `StoreNode`의 값을 가져올 수 있습니다.\n\n이렇게 선언된 `storeSelectorNode`는 `useStoreSelectorNode` 훅을 통해 사용할 수 있습니다.\n\n```tsx\nimport { useStoreSelectorNode } from \"@custardcream/very-simple-store\";\nimport { storeSelectorNode } from \"./storeSelectorNode\";\n\nconst Component = () => {\n  const { value } = useStoreSelectorNode(storeSelectorNode);\n\n  return <p>{value}</p>;\n};\n```\n\n`selectorNode` 또한 어디서 선언하는지는 중요하지 않습니다. 어디서든 해당 selector를 사용하고 싶다면 `useStoreSelectorNode` 훅으로 사용해주세요.\n\n### async `StoreSelectorNode` 사용하기\n\n`StoreSelectorNode`는 비동기적으로 계산될 수 있습니다. `addStoreSelectorNode`에 비동기 `selector`를 넣으면 됩니다.\n\n```ts\nimport { addStoreSelectorNode } from \"@custardcream/very-simple-store\";\nimport { storeNode } from \"./storeNode\";\n\nexport const asyncStoreSelectorNode = addStoreSelectorNode({\n  key: \"asyncStoreSelectorNode\",\n  selector: async ({ get }) => {\n    const storeValue = get(storeNode);\n    const result = await fetchData();\n\n    return storeValue + result;\n  },\n});\n```\n\n이렇게 선언된 `asyncStoreSelectorNode`는 위와 동일하게 `useStoreSelectorNode` 훅을 통해 사용할 수 있습니다.\n\n```tsx\nimport { useStoreSelectorNode } from \"@custardcream/very-simple-store\";\nimport { asyncStoreSelectorNode } from \"./asyncStoreSelectorNode\";\n\nconst Component = () => {\n  const { value, isLoading, currentlyLoadingCount } = useStoreSelectorNode(asyncStoreSelectorNode);\n\n  if (isLoading) {\n    return <p>로딩 중...</p>;\n  }\n\n  return <p>{value}</p>;\n};\n```\n\n비동기 상태가 준비중인지 여부는 `isLoading`으로 확인할 수 있습니다.\n\n또한, 해당 selector 함수가 현재 비동기적으로 몇 개 호출되고 있는지도 `currentlyLoadingCount`로 알 수 있습니다.\n","readmeFilename":"README.md"}