diff --git a/package.json b/package.json
index 7770650..fa8fa8f 100644
--- a/package.json
+++ b/package.json
@@ -39,12 +39,13 @@
}
},
"devDependencies": {
- "@commitlint/parse": "^16.2.1",
+ "@commitlint/parse": "^17.6.5",
"@nrwl/nx-cloud": "latest",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^14.0.0",
"@testing-library/react-hooks": "^8.0.1",
"@testing-library/user-event": "^14.4.3",
+ "@testing-library/vue": "^7.0.0",
"@tsconfig/svelte": "^3.0.0",
"@types/eslint": "^8.44.2",
"@types/luxon": "^3.3.0",
diff --git a/packages/react-store/src/tests/index.test.tsx b/packages/react-store/src/__tests__/index.test.tsx
similarity index 100%
rename from packages/react-store/src/tests/index.test.tsx
rename to packages/react-store/src/__tests__/index.test.tsx
diff --git a/packages/vue-store/.eslintrc.cjs b/packages/vue-store/.eslintrc.cjs
new file mode 100644
index 0000000..6fd90e4
--- /dev/null
+++ b/packages/vue-store/.eslintrc.cjs
@@ -0,0 +1,14 @@
+// @ts-check
+
+/** @type {import('eslint').Linter.Config} */
+const config = {
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: './tsconfig.json',
+ },
+ rules: {
+ 'no-unused-vars': 'off',
+ },
+}
+
+module.exports = config
diff --git a/packages/vue-store/package.json b/packages/vue-store/package.json
new file mode 100644
index 0000000..cef00dd
--- /dev/null
+++ b/packages/vue-store/package.json
@@ -0,0 +1,78 @@
+{
+ "name": "@tanstack/vue-store",
+ "version": "0.0.1",
+ "author": "Tanner Linsley",
+ "license": "MIT",
+ "repository": "tanstack/react-store",
+ "homepage": "https://tanstack.com/",
+ "description": "",
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "type": "module",
+ "types": "build/legacy/index.d.ts",
+ "main": "build/legacy/index.cjs",
+ "module": "build/legacy/index.js",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./build/modern/index.d.ts",
+ "default": "./build/modern/index.js"
+ },
+ "require": {
+ "types": "./build/modern/index.d.cts",
+ "default": "./build/modern/index.cjs"
+ }
+ },
+ "./package.json": "./package.json"
+ },
+ "sideEffects": false,
+ "scripts": {
+ "clean": "rimraf ./build && rimraf ./coverage",
+ "test:eslint": "eslint --ext .ts,.tsx ./src",
+ "test:types": "tsc",
+ "test:lib": "pnpm run test:2 && pnpm run test:2.7 && pnpm run test:3",
+ "test:2": "vue-demi-switch 2 vue2 && vitest",
+ "test:2.7": "vue-demi-switch 2.7 vue2.7 && vitest",
+ "test:3": "vue-demi-switch 3 && vitest",
+ "test:lib:dev": "pnpm run test:lib --watch",
+ "test:build": "publint --strict",
+ "build": "tsup"
+ },
+ "nx": {
+ "targets": {
+ "test:lib": {
+ "dependsOn": [
+ "test:types"
+ ]
+ }
+ }
+ },
+ "files": [
+ "build",
+ "src"
+ ],
+ "dependencies": {
+ "@tanstack/store": "workspace:*",
+ "vue-demi": "^0.14.6"
+ },
+ "devDependencies": {
+ "@vue/composition-api": "^1.7.2",
+ "vue": "^3.3.4",
+ "vue2": "npm:vue@2.6",
+ "vue2.7": "npm:vue@2.7"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.2.1",
+ "vue": "^2.5.0 || ^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+}
diff --git a/packages/vue-store/src/__tests__/index.test.tsx b/packages/vue-store/src/__tests__/index.test.tsx
new file mode 100644
index 0000000..ad96674
--- /dev/null
+++ b/packages/vue-store/src/__tests__/index.test.tsx
@@ -0,0 +1,81 @@
+import { h, defineComponent } from 'vue'
+import { render, waitFor } from '@testing-library/vue'
+import '@testing-library/jest-dom'
+import { Store } from '@tanstack/store'
+import { useStore } from '../index'
+import userEvent from '@testing-library/user-event'
+
+const user = userEvent.setup()
+
+describe('useStore', () => {
+ it('allows us to select state using a selector', async () => {
+ const store = new Store({
+ select: 0,
+ ignored: 1,
+ })
+
+ const Comp = defineComponent(() => {
+ const storeVal = useStore(store, (state) => state.select)
+
+ return () =>
Store: {storeVal.value}
+ })
+
+ const { getByText } = render()
+ expect(getByText('Store: 0')).toBeInTheDocument()
+ })
+
+ it('only triggers a re-render when selector state is updated', async () => {
+ const store = new Store({
+ select: 0,
+ ignored: 1,
+ })
+
+ const Comp = defineComponent(() => {
+ const storeVal = useStore(store, (state) => state.select)
+
+ const fn = vi.fn()
+
+ return () => {
+ fn()
+ return (
+
+
Number rendered: {fn.mock.calls.length}
+
Store: {storeVal.value}
+
+
+
+ )
+ }
+ })
+
+ const { getByText } = render()
+ expect(getByText('Store: 0')).toBeInTheDocument()
+ expect(getByText('Number rendered: 1')).toBeInTheDocument()
+
+ await user.click(getByText('Update select'))
+
+ await waitFor(() => expect(getByText('Store: 10')).toBeInTheDocument())
+ expect(getByText('Number rendered: 2')).toBeInTheDocument()
+
+ await user.click(getByText('Update ignored'))
+ expect(getByText('Number rendered: 2')).toBeInTheDocument()
+ })
+})
diff --git a/packages/vue-store/src/index.ts b/packages/vue-store/src/index.ts
new file mode 100644
index 0000000..2040248
--- /dev/null
+++ b/packages/vue-store/src/index.ts
@@ -0,0 +1,67 @@
+import type { AnyUpdater, Store } from '@tanstack/store'
+import { readonly, type Ref, ref, toRaw, toValue, watch } from 'vue-demi'
+
+export * from '@tanstack/store'
+
+export type NoInfer = [T][T extends any ? 0 : never]
+
+export function useStore<
+ TState,
+ TSelected = NoInfer,
+ TUpdater extends AnyUpdater = AnyUpdater,
+>(
+ store: Store,
+ selector: (state: NoInfer) => TSelected = (d) => d as any,
+) {
+ const slice = ref(selector(store.state)) as Ref
+
+ watch(
+ () => toValue(store),
+ (value, _oldValue, onCleanup) => {
+ const unsub = value.subscribe(() => {
+ const data = selector(store.state)
+ if (shallow(toRaw(slice.value), data)) {
+ return
+ }
+ slice.value = data
+ })
+
+ onCleanup(() => {
+ unsub()
+ })
+ },
+ { immediate: true },
+ )
+
+ return readonly(slice)
+}
+
+export function shallow(objA: T, objB: T) {
+ if (Object.is(objA, objB)) {
+ return true
+ }
+
+ if (
+ typeof objA !== 'object' ||
+ objA === null ||
+ typeof objB !== 'object' ||
+ objB === null
+ ) {
+ return false
+ }
+
+ 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] as string) ||
+ !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])
+ ) {
+ return false
+ }
+ }
+ return true
+}
diff --git a/packages/vue-store/tsconfig.json b/packages/vue-store/tsconfig.json
new file mode 100644
index 0000000..0b13050
--- /dev/null
+++ b/packages/vue-store/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "jsx": "preserve",
+ "types": ["vitest/globals"],
+ "noUnusedLocals": false
+ },
+ "include": ["src/**/*.ts", "src/**/*.tsx", ".eslintrc.cjs", "tsup.config.js"]
+}
diff --git a/packages/vue-store/tsup.config.js b/packages/vue-store/tsup.config.js
new file mode 100644
index 0000000..5159fbe
--- /dev/null
+++ b/packages/vue-store/tsup.config.js
@@ -0,0 +1,9 @@
+// @ts-check
+
+import { defineConfig } from 'tsup'
+import { legacyConfig, modernConfig } from '../../scripts/getTsupConfig.js'
+
+export default defineConfig([
+ modernConfig({ entry: ['src/*.ts'] }),
+ legacyConfig({ entry: ['src/*.ts'] }),
+])
diff --git a/packages/vue-store/vitest.config.ts b/packages/vue-store/vitest.config.ts
new file mode 100644
index 0000000..f20a9c5
--- /dev/null
+++ b/packages/vue-store/vitest.config.ts
@@ -0,0 +1,16 @@
+import { defineConfig } from 'vitest/config'
+
+export default defineConfig({
+ test: {
+ name: 'vue-store',
+ dir: './src',
+ watch: false,
+ environment: 'jsdom',
+ globals: true,
+ coverage: { provider: 'istanbul' },
+ },
+ esbuild: {
+ jsxFactory: 'h',
+ jsxFragment: 'Fragment',
+ },
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 312f7fe..6c27c9d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -18,8 +18,8 @@ importers:
.:
devDependencies:
'@commitlint/parse':
- specifier: ^16.2.1
- version: 16.2.1
+ specifier: ^17.6.5
+ version: 17.7.0
'@nrwl/nx-cloud':
specifier: latest
version: 16.3.0
@@ -35,6 +35,9 @@ importers:
'@testing-library/user-event':
specifier: ^14.4.3
version: 14.4.3(@testing-library/dom@9.3.1)
+ '@testing-library/vue':
+ specifier: ^7.0.0
+ version: 7.0.0(@vue/compiler-sfc@3.3.4)(vue@3.3.4)
'@tsconfig/svelte':
specifier: ^3.0.0
version: 3.0.0
@@ -198,6 +201,28 @@ importers:
packages/store: {}
+ packages/vue-store:
+ dependencies:
+ '@tanstack/store':
+ specifier: workspace:*
+ version: link:../store
+ vue-demi:
+ specifier: ^0.14.6
+ version: 0.14.6(@vue/composition-api@1.7.2)(vue@3.3.4)
+ devDependencies:
+ '@vue/composition-api':
+ specifier: ^1.7.2
+ version: 1.7.2(vue@3.3.4)
+ vue:
+ specifier: ^3.3.4
+ version: 3.3.4
+ vue2:
+ specifier: npm:vue@2.6
+ version: /vue@2.6.14
+ vue2.7:
+ specifier: npm:vue@2.7
+ version: /vue@2.7.14
+
packages:
/@aashutoshrathi/word-wrap@1.2.6:
@@ -344,12 +369,10 @@ packages:
/@babel/helper-string-parser@7.22.5:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-validator-identifier@7.22.5:
resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-validator-option@7.22.5:
resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==}
@@ -382,7 +405,6 @@ packages:
hasBin: true
dependencies:
'@babel/types': 7.22.11
- dev: true
/@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.22.11):
resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
@@ -435,20 +457,19 @@ packages:
'@babel/helper-string-parser': 7.22.5
'@babel/helper-validator-identifier': 7.22.5
to-fast-properties: 2.0.0
- dev: true
- /@commitlint/parse@16.2.1:
- resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==}
- engines: {node: '>=v12'}
+ /@commitlint/parse@17.7.0:
+ resolution: {integrity: sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==}
+ engines: {node: '>=v14'}
dependencies:
- '@commitlint/types': 16.2.1
- conventional-changelog-angular: 5.0.13
- conventional-commits-parser: 3.2.4
+ '@commitlint/types': 17.4.4
+ conventional-changelog-angular: 6.0.0
+ conventional-commits-parser: 4.0.0
dev: true
- /@commitlint/types@16.2.1:
- resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==}
- engines: {node: '>=v12'}
+ /@commitlint/types@17.4.4:
+ resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==}
+ engines: {node: '>=v14'}
dependencies:
chalk: 4.1.2
dev: true
@@ -787,7 +808,6 @@ packages:
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
/@jridgewell/trace-mapping@0.3.19:
resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
@@ -938,6 +958,10 @@ packages:
dev: true
optional: true
+ /@one-ini/wasm@0.1.1:
+ resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
+ dev: true
+
/@parcel/watcher@2.0.4:
resolution: {integrity: sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==}
engines: {node: '>= 10.0.0'}
@@ -1033,6 +1057,22 @@ packages:
'@testing-library/dom': 9.3.1
dev: true
+ /@testing-library/vue@7.0.0(@vue/compiler-sfc@3.3.4)(vue@3.3.4):
+ resolution: {integrity: sha512-JU/q93HGo2qdm1dCgWymkeQlfpC0/0/DBZ2nAHgEAsVZxX11xVIxT7gbXdI7HACQpUbsUWt1zABGU075Fzt9XQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@vue/compiler-sfc': '>= 3'
+ vue: '>= 3'
+ dependencies:
+ '@babel/runtime': 7.21.0
+ '@testing-library/dom': 9.3.1
+ '@vue/compiler-sfc': 3.3.4
+ '@vue/test-utils': 2.4.1(vue@3.3.4)
+ vue: 3.3.4
+ transitivePeerDependencies:
+ - '@vue/server-renderer'
+ dev: true
+
/@tootallnate/once@2.0.0:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
@@ -1381,13 +1421,19 @@ packages:
'@vue/shared': 3.3.4
estree-walker: 2.0.2
source-map-js: 1.0.2
- dev: true
/@vue/compiler-dom@3.3.4:
resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
dependencies:
'@vue/compiler-core': 3.3.4
'@vue/shared': 3.3.4
+
+ /@vue/compiler-sfc@2.7.14:
+ resolution: {integrity: sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==}
+ dependencies:
+ '@babel/parser': 7.22.11
+ postcss: 8.4.28
+ source-map: 0.6.1
dev: true
/@vue/compiler-sfc@3.3.4:
@@ -1403,14 +1449,19 @@ packages:
magic-string: 0.30.3
postcss: 8.4.28
source-map-js: 1.0.2
- dev: true
/@vue/compiler-ssr@3.3.4:
resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
dependencies:
'@vue/compiler-dom': 3.3.4
'@vue/shared': 3.3.4
- dev: true
+
+ /@vue/composition-api@1.7.2(vue@3.3.4):
+ resolution: {integrity: sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==}
+ peerDependencies:
+ vue: '>= 2.5 < 2.7'
+ dependencies:
+ vue: 3.3.4
/@vue/reactivity-transform@3.3.4:
resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
@@ -1420,20 +1471,17 @@ packages:
'@vue/shared': 3.3.4
estree-walker: 2.0.2
magic-string: 0.30.3
- dev: true
/@vue/reactivity@3.3.4:
resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
dependencies:
'@vue/shared': 3.3.4
- dev: true
/@vue/runtime-core@3.3.4:
resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
dependencies:
'@vue/reactivity': 3.3.4
'@vue/shared': 3.3.4
- dev: true
/@vue/runtime-dom@3.3.4:
resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
@@ -1441,7 +1489,6 @@ packages:
'@vue/runtime-core': 3.3.4
'@vue/shared': 3.3.4
csstype: 3.1.2
- dev: true
/@vue/server-renderer@3.3.4(vue@3.3.4):
resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
@@ -1451,10 +1498,22 @@ packages:
'@vue/compiler-ssr': 3.3.4
'@vue/shared': 3.3.4
vue: 3.3.4
- dev: true
/@vue/shared@3.3.4:
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
+
+ /@vue/test-utils@2.4.1(vue@3.3.4):
+ resolution: {integrity: sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==}
+ peerDependencies:
+ '@vue/server-renderer': ^3.0.1
+ vue: ^3.0.1
+ peerDependenciesMeta:
+ '@vue/server-renderer':
+ optional: true
+ dependencies:
+ js-beautify: 1.14.9
+ vue: 3.3.4
+ vue-component-type-helpers: 1.8.4
dev: true
/@yarnpkg/lockfile@1.1.0:
@@ -1488,6 +1547,10 @@ packages:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
dev: true
+ /abbrev@1.1.1:
+ resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
+ dev: true
+
/acorn-jsx@5.3.2(acorn@8.10.0):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -2026,6 +2089,11 @@ packages:
delayed-stream: 1.0.0
dev: true
+ /commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+ dev: true
+
/commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
@@ -2058,25 +2126,29 @@ packages:
yargs: 17.7.2
dev: true
- /conventional-changelog-angular@5.0.13:
- resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
- engines: {node: '>=10'}
+ /config-chain@1.1.13:
+ resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+ dependencies:
+ ini: 1.3.8
+ proto-list: 1.2.4
+ dev: true
+
+ /conventional-changelog-angular@6.0.0:
+ resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==}
+ engines: {node: '>=14'}
dependencies:
compare-func: 2.0.0
- q: 1.5.1
dev: true
- /conventional-commits-parser@3.2.4:
- resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==}
- engines: {node: '>=10'}
+ /conventional-commits-parser@4.0.0:
+ resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==}
+ engines: {node: '>=14'}
hasBin: true
dependencies:
JSONStream: 1.3.5
is-text-path: 1.0.1
- lodash: 4.17.21
meow: 8.1.2
split2: 3.2.2
- through2: 4.0.2
dev: true
/convert-source-map@1.9.0:
@@ -2121,7 +2193,6 @@ packages:
/csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
- dev: true
/current-git-branch@1.1.0:
resolution: {integrity: sha512-n5mwGZllLsFzxDPtTmadqGe4IIBPfqPbiIRX4xgFR9VK/Bx47U+94KiVkxSKAKN6/s43TlkztS2GZpgMKzwQ8A==}
@@ -2325,6 +2396,17 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true
+ /editorconfig@1.0.4:
+ resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dependencies:
+ '@one-ini/wasm': 0.1.1
+ commander: 10.0.1
+ minimatch: 9.0.1
+ semver: 7.5.4
+ dev: true
+
/electron-to-chromium@1.4.502:
resolution: {integrity: sha512-xqeGw3Gr6o3uyHy/yKjdnDQHY2RQvXcGC2cfHjccK1IGkH6cX1WQBN8EeC/YpwPhGkBaikDTecJ8+ssxSVRQlw==}
dev: true
@@ -2813,7 +2895,6 @@ packages:
/estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- dev: true
/esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
@@ -3369,6 +3450,10 @@ packages:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: true
+ /ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: true
+
/internal-slot@1.0.3:
resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==}
engines: {node: '>= 0.4'}
@@ -3753,6 +3838,17 @@ packages:
engines: {node: '>=10'}
dev: true
+ /js-beautify@1.14.9:
+ resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ dependencies:
+ config-chain: 1.1.13
+ editorconfig: 1.0.4
+ glob: 8.1.0
+ nopt: 6.0.0
+ dev: true
+
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -3996,7 +4092,6 @@ packages:
engines: {node: '>=12'}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
- dev: true
/make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
@@ -4094,6 +4189,13 @@ packages:
brace-expansion: 2.0.1
dev: true
+ /minimatch@9.0.1:
+ resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
/minimatch@9.0.3:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -4170,7 +4272,6 @@ packages:
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- dev: true
/natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -4193,6 +4294,14 @@ packages:
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
dev: true
+ /nopt@6.0.0:
+ resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ abbrev: 1.1.1
+ dev: true
+
/normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
@@ -4563,7 +4672,6 @@ packages:
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- dev: true
/picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
@@ -4607,7 +4715,6 @@ packages:
nanoid: 3.3.6
picocolors: 1.0.0
source-map-js: 1.0.2
- dev: true
/prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
@@ -4650,6 +4757,10 @@ packages:
react-is: 16.13.1
dev: true
+ /proto-list@1.2.4:
+ resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+ dev: true
+
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
dev: true
@@ -4677,11 +4788,6 @@ packages:
engines: {node: '>=6'}
dev: true
- /q@1.5.1:
- resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
- engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
- dev: true
-
/querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
dev: true
@@ -5046,7 +5152,6 @@ packages:
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
- dev: true
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
@@ -5377,12 +5482,6 @@ packages:
xtend: 4.0.2
dev: true
- /through2@4.0.2:
- resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
- dependencies:
- readable-stream: 3.6.2
- dev: true
-
/through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
dev: true
@@ -5411,7 +5510,6 @@ packages:
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
- dev: true
/to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@@ -5842,6 +5940,37 @@ packages:
- terser
dev: true
+ /vue-component-type-helpers@1.8.4:
+ resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==}
+ dev: true
+
+ /vue-demi@0.14.6(@vue/composition-api@1.7.2)(vue@3.3.4):
+ resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ '@vue/composition-api': 1.7.2(vue@3.3.4)
+ vue: 3.3.4
+ dev: false
+
+ /vue@2.6.14:
+ resolution: {integrity: sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==}
+ dev: true
+
+ /vue@2.7.14:
+ resolution: {integrity: sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==}
+ dependencies:
+ '@vue/compiler-sfc': 2.7.14
+ csstype: 3.1.2
+ dev: true
+
/vue@3.3.4:
resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==}
dependencies:
@@ -5850,7 +5979,6 @@ packages:
'@vue/runtime-dom': 3.3.4
'@vue/server-renderer': 3.3.4(vue@3.3.4)
'@vue/shared': 3.3.4
- dev: true
/w3c-xmlserializer@4.0.0:
resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
diff --git a/scripts/config.js b/scripts/config.js
index 8a46baa..2aec6dd 100644
--- a/scripts/config.js
+++ b/scripts/config.js
@@ -18,6 +18,11 @@ export const packages = [
packageDir: 'packages/react-store',
entries: ['main', 'module', 'types'],
},
+ {
+ name: '@tanstack/vue-store',
+ packageDir: 'packages/vue-store',
+ entries: ['main', 'module', 'types'],
+ },
// {
// name: '@tanstack/solid-store',
// packageDir: 'packages/solid-store',
@@ -28,11 +33,6 @@ export const packages = [
// packageDir: 'packages/svelte-store',
// entries: ['main', 'module', 'types'],
// },
- // {
- // name: '@tanstack/vue-store',
- // packageDir: 'packages/vue-store',
- // entries: ['main', 'module', 'types'],
- // },
]
/**