]> git.ipfire.org Git - thirdparty/vuejs/pinia.git/commitdiff
feat: make setup stores context aware
authorEduardo San Martin Morote <posva13@gmail.com>
Tue, 18 Apr 2023 12:58:50 +0000 (14:58 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Tue, 18 Apr 2023 12:58:50 +0000 (14:58 +0200)
package.json
packages/pinia/__tests__/appContext.spec.ts [new file with mode: 0644]
packages/pinia/__tests__/storeSetup.spec.ts
packages/pinia/src/createPinia.ts
packages/pinia/src/rootStore.ts
pnpm-lock.yaml

index 8bb9eb47326b96c351acc6332c42beccbf4f5d92..6a69acc2ff6cbe49bc72e4671474b49f624e8461 100644 (file)
@@ -29,8 +29,8 @@
     "@types/lodash.kebabcase": "^4.1.7",
     "@types/node": "^18.15.11",
     "@vitest/coverage-c8": "^0.30.1",
-    "@vue/compiler-sfc": "^3.2.47",
-    "@vue/server-renderer": "^3.2.47",
+    "@vue/compiler-sfc": "alpha",
+    "@vue/server-renderer": "alpha",
     "c8": "^7.13.0",
     "chalk": "^5.2.0",
     "conventional-changelog-cli": "^2.2.2",
     "typedoc-plugin-markdown": "^3.14.0",
     "typescript": "^4.9.4",
     "vitest": "^0.30.1",
-    "vue": "^3.2.47",
+    "vue": "alpha",
     "yorkie": "^2.0.0"
   },
+  "pnpm": {
+    "overrides": {
+      "vue": "alpha",
+      "@vue/compiler-sfc": "alpha",
+      "@vue/runtime-core": "alpha",
+      "@vue/runtime-dom": "alpha",
+      "@vue/server-renderer": "alpha"
+    }
+  },
   "gitHooks": {
     "pre-commit": "lint-staged",
     "commit-msg": "node scripts/verifyCommit.mjs"
diff --git a/packages/pinia/__tests__/appContext.spec.ts b/packages/pinia/__tests__/appContext.spec.ts
new file mode 100644 (file)
index 0000000..035be07
--- /dev/null
@@ -0,0 +1,68 @@
+import { beforeEach, describe, it, expect } from 'vitest'
+import { createPinia, defineStore, setActivePinia } from '../src'
+import { createApp, h, inject, provide } from 'vue'
+import { mount } from '@vue/test-utils'
+import { mockWarn } from './vitest-mock-warn'
+
+describe('app context injections', () => {
+  mockWarn()
+
+  beforeEach(() => {
+    setActivePinia(createPinia())
+  })
+
+  const useStore = defineStore('main', () => {
+    const injected = inject<string>('injected')
+    return { injected }
+  })
+
+  it('injects app provides', () => {
+    // use it before mounting to ensure out of app context
+    const wrapper = mount(
+      {
+        setup() {
+          const store = useStore()
+          return { store }
+        },
+        template: `<p>{{ store.injected }}</p>`,
+      },
+      {
+        global: {
+          provide: {
+            injected: 'app injected',
+          },
+        },
+      }
+    )
+
+    expect(wrapper.text()).toBe('app injected')
+
+    const store = useStore()
+    expect(store.injected).toBe('app injected')
+  })
+
+  it('can be used in older versions', () => {
+    const pinia = createPinia()
+    setActivePinia(pinia)
+    useStore(pinia)
+    expect('inject() can only be used').toHaveBeenWarned()
+  })
+
+  it('can use getCurrentInstance', () => {
+    const pinia = createPinia()
+    setActivePinia(pinia)
+    const app = createApp({
+      setup() {
+        provide('injected', 'should not appear')
+        const store = useStore()
+        return () => h('p', `${store.injected}`)
+      },
+    })
+    app.use(pinia)
+    app.provide('injected', 'test 2')
+
+    expect(app.mount(document.createElement('div')).$el.innerText).toBe(
+      'test 2'
+    )
+  })
+})
index b7709c3eca08ff4504c59fc1b1527ec0635e60ad..767fffd7dd9bfb459504b6c184f4a261157a6e81 100644 (file)
@@ -1,6 +1,6 @@
 import { beforeEach, describe, it, expect, vi } from 'vitest'
 import { createPinia, defineStore, setActivePinia } from '../src'
-import { computed, nextTick, ref, watch } from 'vue'
+import { computed, inject, nextTick, ref, watch } from 'vue'
 
 function expectType<T>(_value: T): void {}
 
index f71497fd31a865c6bbfe2eb124d4b38bcaf5d0ba..1f13555d666aa5f18a27b5420d05869801e48a80 100644 (file)
@@ -46,6 +46,14 @@ export function createPinia(): Pinia {
       return this
     },
 
+    _run(fn) {
+      // in some scenarios, the pinia is not installed yet but people might still try to instantiate stores. In those
+      // scenarios we want to avoid a undefined is not a function (_a will be null until available)
+      return pinia._a && typeof pinia._a.runWithContext === 'function'
+        ? this._a.runWithContext(fn)
+        : fn()
+    },
+
     _p,
     // it's actually undefined here
     // @ts-expect-error
index 0509a5c8eb4e5f4f1f49f7292c69f4b4e2463855..2df59b060c15bb73040d9549617ce04c50067c5c 100644 (file)
@@ -71,6 +71,15 @@ export interface Pinia {
    */
   _a: App
 
+  /**
+   * Runs a function using the app context if available.
+   *
+   * @internal
+   *
+   * @param fn - function to run in the scope of the pinia
+   */
+  _run<T>(fn: () => T): T
+
   /**
    * Effect scope the pinia is attached to
    *
index c56914291c15ca02c99d703e3b3d1b06af9ea1d9..d3b1087dbb2bacbec98a16b96e26e16efd63ef71 100644 (file)
@@ -1,5 +1,12 @@
 lockfileVersion: '6.0'
 
+overrides:
+  vue: alpha
+  '@vue/compiler-sfc': alpha
+  '@vue/runtime-core': alpha
+  '@vue/runtime-dom': alpha
+  '@vue/server-renderer': alpha
+
 importers:
 
   .:
@@ -29,11 +36,11 @@ importers:
         specifier: ^0.30.1
         version: 0.30.1(vitest@0.30.1)
       '@vue/compiler-sfc':
-        specifier: ^3.2.47
-        version: 3.2.47
+        specifier: alpha
+        version: 3.3.0-alpha.11
       '@vue/server-renderer':
-        specifier: ^3.2.47
-        version: 3.2.47(vue@3.2.47)
+        specifier: alpha
+        version: 3.3.0-alpha.11(vue@3.3.0-alpha.11)
       c8:
         specifier: ^7.13.0
         version: 7.13.0
@@ -98,8 +105,8 @@ importers:
         specifier: ^0.30.1
         version: 0.30.1(happy-dom@9.8.1)
       vue:
-        specifier: ^3.2.47
-        version: 3.2.47
+        specifier: alpha
+        version: 3.3.0-alpha.11
       yorkie:
         specifier: ^2.0.0
         version: 2.0.0
@@ -366,7 +373,7 @@ packages:
       '@babel/helper-compilation-targets': 7.20.0(@babel/core@7.20.2)
       '@babel/helper-module-transforms': 7.20.2
       '@babel/helpers': 7.20.1
-      '@babel/parser': 7.20.13
+      '@babel/parser': 7.21.4
       '@babel/template': 7.18.10
       '@babel/traverse': 7.20.1
       '@babel/types': 7.20.7
@@ -535,8 +542,8 @@ packages:
       chalk: 2.4.2
       js-tokens: 4.0.0
 
-  /@babel/parser@7.20.13:
-    resolution: {integrity: sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==}
+  /@babel/parser@7.21.4:
+    resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==}
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
@@ -585,7 +592,7 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/code-frame': 7.21.4
-      '@babel/parser': 7.20.13
+      '@babel/parser': 7.21.4
       '@babel/types': 7.20.7
 
   /@babel/traverse@7.20.1:
@@ -598,7 +605,7 @@ packages:
       '@babel/helper-function-name': 7.19.0
       '@babel/helper-hoist-variables': 7.18.6
       '@babel/helper-split-export-declaration': 7.18.6
-      '@babel/parser': 7.20.13
+      '@babel/parser': 7.21.4
       '@babel/types': 7.20.7
       debug: 4.3.4
       globals: 11.12.0
@@ -908,14 +915,14 @@ packages:
     engines: {node: '>=6.0.0'}
     dependencies:
       '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.14
+      '@jridgewell/sourcemap-codec': 1.4.15
 
   /@jridgewell/gen-mapping@0.3.2:
     resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
     engines: {node: '>=6.0.0'}
     dependencies:
       '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.14
+      '@jridgewell/sourcemap-codec': 1.4.15
       '@jridgewell/trace-mapping': 0.3.17
 
   /@jridgewell/gen-mapping@0.3.3:
@@ -954,7 +961,6 @@ packages:
 
   /@jridgewell/sourcemap-codec@1.4.15:
     resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
-    dev: true
 
   /@jridgewell/trace-mapping@0.3.16:
     resolution: {integrity: sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==}
@@ -1179,7 +1185,7 @@ packages:
     resolution: {integrity: sha512-jfpVHxi1AHfNO3D6iD1RJE6fx/7cAzekvG90poIzVawp/L+I4DNdy8pCgqBScJW4bfWOpHeLYbtQQlL/hPmkjw==}
     dev: true
 
-  /@nuxt/vite-builder@3.0.0(@types/node@18.15.11)(typescript@4.8.4)(vue@3.2.45):
+  /@nuxt/vite-builder@3.0.0(@types/node@18.15.11)(typescript@4.8.4)(vue@3.3.0-alpha.11):
     resolution: {integrity: sha512-eMnpPpjHU8rGZcsJUksCuSX+6dpId03q8LOSStsm6rXzrNJtZIcwt0nBRTUaigckXIozX8ZNl5u2OPGUfUbMrw==}
     engines: {node: ^14.16.0 || ^16.10.0 || ^17.0.0 || ^18.0.0 || ^19.0.0}
     peerDependencies:
@@ -1187,8 +1193,8 @@ packages:
     dependencies:
       '@nuxt/kit': 3.0.0(rollup@2.79.1)
       '@rollup/plugin-replace': 5.0.1(rollup@2.79.1)
-      '@vitejs/plugin-vue': 3.2.0(vite@3.2.5)(vue@3.2.45)
-      '@vitejs/plugin-vue-jsx': 2.1.1(vite@3.2.5)(vue@3.2.45)
+      '@vitejs/plugin-vue': 3.2.0(vite@3.2.5)(vue@3.3.0-alpha.11)
+      '@vitejs/plugin-vue-jsx': 2.1.1(vite@3.2.5)(vue@3.3.0-alpha.11)
       autoprefixer: 10.4.13(postcss@8.4.21)
       chokidar: 3.5.3
       cssnano: 5.1.14(postcss@8.4.21)
@@ -1217,7 +1223,7 @@ packages:
       vite: 3.2.5(@types/node@18.15.11)
       vite-node: 0.25.2(@types/node@18.15.11)
       vite-plugin-checker: 0.5.1(typescript@4.8.4)(vite@3.2.5)
-      vue: 3.2.45
+      vue: 3.3.0-alpha.11
       vue-bundle-renderer: 1.0.0
     transitivePeerDependencies:
       - '@types/node'
@@ -1670,14 +1676,14 @@ packages:
       '@unhead/schema': 1.0.0
     dev: true
 
-  /@unhead/vue@1.0.0(vue@3.2.45):
+  /@unhead/vue@1.0.0(vue@3.3.0-alpha.11):
     resolution: {integrity: sha512-t1DBboJsYN+Mr8zjbJkgk9EEhKd+bcRTMSuTbK1nDJg4aM0uJ/sq1nEgReSq92MjVVLunljnpHqBbiiek0CXQg==}
     peerDependencies:
       vue: '>=2.7 || >=3'
     dependencies:
       '@unhead/schema': 1.0.0
       hookable: 5.4.2
-      vue: 3.2.45
+      vue: 3.3.0-alpha.11
     dev: true
 
   /@vercel/nft@0.22.1:
@@ -1700,7 +1706,7 @@ packages:
       - supports-color
     dev: true
 
-  /@vitejs/plugin-vue-jsx@2.1.1(vite@3.2.5)(vue@3.2.45):
+  /@vitejs/plugin-vue-jsx@2.1.1(vite@3.2.5)(vue@3.3.0-alpha.11):
     resolution: {integrity: sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
@@ -1711,12 +1717,12 @@ packages:
       '@babel/plugin-transform-typescript': 7.20.2(@babel/core@7.20.2)
       '@vue/babel-plugin-jsx': 1.1.1(@babel/core@7.20.2)
       vite: 3.2.5(@types/node@18.15.11)
-      vue: 3.2.45
+      vue: 3.3.0-alpha.11
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@vitejs/plugin-vue@3.2.0(vite@3.2.5)(vue@3.2.45):
+  /@vitejs/plugin-vue@3.2.0(vite@3.2.5)(vue@3.3.0-alpha.11):
     resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
@@ -1724,7 +1730,7 @@ packages:
       vue: ^3.2.25
     dependencies:
       vite: 3.2.5(@types/node@18.15.11)
-      vue: 3.2.45
+      vue: 3.3.0-alpha.11
     dev: true
 
   /@vitejs/plugin-vue@4.1.0(vite@4.2.1)(vue@3.2.47):
@@ -1736,6 +1742,18 @@ packages:
     dependencies:
       vite: 4.2.1(@types/node@18.15.11)
       vue: 3.2.47
+    dev: true
+
+  /@vitejs/plugin-vue@4.1.0(vite@4.2.1)(vue@3.3.0-alpha.11):
+    resolution: {integrity: sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    peerDependencies:
+      vite: ^4.0.0
+      vue: ^3.2.25
+    dependencies:
+      vite: 4.2.1(@types/node@18.15.11)
+      vue: 3.3.0-alpha.11
+    dev: false
 
   /@vitest/coverage-c8@0.30.1(vitest@0.30.1):
     resolution: {integrity: sha512-/Wa3dtSuckpdngAmiCwowaEXXgJkqPrtfvrs9HTB9QoEfNbZWPu4E4cjEn4lJZb4qcGf4fxFtUA2f9DnDNAzBA==}
@@ -1811,7 +1829,7 @@ packages:
       '@volar/language-core': 1.3.0-alpha.0
       '@volar/source-map': 1.3.0-alpha.0
       '@vue/compiler-dom': 3.2.47
-      '@vue/compiler-sfc': 3.2.47
+      '@vue/compiler-sfc': 3.3.0-alpha.11
       '@vue/reactivity': 3.2.47
       '@vue/shared': 3.2.47
       minimatch: 6.2.0
@@ -1847,29 +1865,21 @@ packages:
       - supports-color
     dev: true
 
-  /@vue/compiler-core@3.2.45:
-    resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==}
-    dependencies:
-      '@babel/parser': 7.20.13
-      '@vue/shared': 3.2.45
-      estree-walker: 2.0.2
-      source-map: 0.6.1
-    dev: true
-
   /@vue/compiler-core@3.2.47:
     resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==}
     dependencies:
-      '@babel/parser': 7.20.13
+      '@babel/parser': 7.21.4
       '@vue/shared': 3.2.47
       estree-walker: 2.0.2
       source-map: 0.6.1
 
-  /@vue/compiler-dom@3.2.45:
-    resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==}
+  /@vue/compiler-core@3.3.0-alpha.11:
+    resolution: {integrity: sha512-Nv5Q6DLuZup8u8Z5J3r9SIryKPhPGJo5Ua0jTyRCTCYDU6sa08SVMpCJX5TmL3OmNftbrdSauqqcLaPq4L09lQ==}
     dependencies:
-      '@vue/compiler-core': 3.2.45
-      '@vue/shared': 3.2.45
-    dev: true
+      '@babel/parser': 7.21.4
+      '@vue/shared': 3.3.0-alpha.11
+      estree-walker: 2.0.2
+      source-map-js: 1.0.2
 
   /@vue/compiler-dom@3.2.47:
     resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==}
@@ -1877,47 +1887,31 @@ packages:
       '@vue/compiler-core': 3.2.47
       '@vue/shared': 3.2.47
 
-  /@vue/compiler-sfc@3.2.45:
-    resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==}
+  /@vue/compiler-dom@3.3.0-alpha.11:
+    resolution: {integrity: sha512-q9DHXm/mbSxQE8I1bSjs9GNdFbSjVe31wc1h+LupeJvLdjX7YqdcklYYAjuZuYxHUGnVj0TAjtuAAG9SLhTadQ==}
     dependencies:
-      '@babel/parser': 7.20.13
-      '@vue/compiler-core': 3.2.45
-      '@vue/compiler-dom': 3.2.45
-      '@vue/compiler-ssr': 3.2.45
-      '@vue/reactivity-transform': 3.2.45
-      '@vue/shared': 3.2.45
-      estree-walker: 2.0.2
-      magic-string: 0.25.9
-      postcss: 8.4.21
-      source-map: 0.6.1
-    dev: true
+      '@vue/compiler-core': 3.3.0-alpha.11
+      '@vue/shared': 3.3.0-alpha.11
 
-  /@vue/compiler-sfc@3.2.47:
-    resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
+  /@vue/compiler-sfc@3.3.0-alpha.11:
+    resolution: {integrity: sha512-v/KrdUfz9sicXRlWOWO0d3ASdTOPXcv0o94YywLiIuB2c3kRqhxb+88lPxVnQP4xExWA7giIoRJ2SIEy9jwn8A==}
     dependencies:
-      '@babel/parser': 7.20.13
-      '@vue/compiler-core': 3.2.47
-      '@vue/compiler-dom': 3.2.47
-      '@vue/compiler-ssr': 3.2.47
-      '@vue/reactivity-transform': 3.2.47
-      '@vue/shared': 3.2.47
+      '@babel/parser': 7.21.4
+      '@vue/compiler-core': 3.3.0-alpha.11
+      '@vue/compiler-dom': 3.3.0-alpha.11
+      '@vue/compiler-ssr': 3.3.0-alpha.11
+      '@vue/reactivity-transform': 3.3.0-alpha.11
+      '@vue/shared': 3.3.0-alpha.11
       estree-walker: 2.0.2
-      magic-string: 0.25.9
+      magic-string: 0.30.0
       postcss: 8.4.21
-      source-map: 0.6.1
-
-  /@vue/compiler-ssr@3.2.45:
-    resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==}
-    dependencies:
-      '@vue/compiler-dom': 3.2.45
-      '@vue/shared': 3.2.45
-    dev: true
+      source-map-js: 1.0.2
 
-  /@vue/compiler-ssr@3.2.47:
-    resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==}
+  /@vue/compiler-ssr@3.3.0-alpha.11:
+    resolution: {integrity: sha512-botFNHfxr8piUcccQ0VE4ORNWVu2zkuIG3VYhA5R8yZ6E9WHC4zSi6wbX0hAlVXCOm4Vg9xJbWcrjEnFlMOKAQ==}
     dependencies:
-      '@vue/compiler-dom': 3.2.47
-      '@vue/shared': 3.2.47
+      '@vue/compiler-dom': 3.3.0-alpha.11
+      '@vue/shared': 3.3.0-alpha.11
 
   /@vue/composition-api@1.4.0(vue@3.2.47):
     resolution: {integrity: sha512-fanqJw1cqhkfS1dcpFY52CeR0aWDBr7ub/0ObPWqMnNPdRsMi1gX04Q3aLeRtJEuVeCFewNbqvkPskkSPTVaXQ==}
@@ -1935,24 +1929,14 @@ packages:
     resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
     dev: false
 
-  /@vue/reactivity-transform@3.2.45:
-    resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==}
-    dependencies:
-      '@babel/parser': 7.20.13
-      '@vue/compiler-core': 3.2.45
-      '@vue/shared': 3.2.45
-      estree-walker: 2.0.2
-      magic-string: 0.25.9
-    dev: true
-
-  /@vue/reactivity-transform@3.2.47:
-    resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==}
+  /@vue/reactivity-transform@3.3.0-alpha.11:
+    resolution: {integrity: sha512-rN2VaF2MJNkIIinzLewQG+oiS6eaLcIYepxzuRtThaJ372RrELYSI0Z5wxEMalOuBGbVJ7T9Y24veBtYtKMPBQ==}
     dependencies:
-      '@babel/parser': 7.20.13
-      '@vue/compiler-core': 3.2.47
-      '@vue/shared': 3.2.47
+      '@babel/parser': 7.21.4
+      '@vue/compiler-core': 3.3.0-alpha.11
+      '@vue/shared': 3.3.0-alpha.11
       estree-walker: 2.0.2
-      magic-string: 0.25.9
+      magic-string: 0.30.0
 
   /@vue/reactivity@3.2.45:
     resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==}
@@ -1964,53 +1948,43 @@ packages:
     resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==}
     dependencies:
       '@vue/shared': 3.2.47
-
-  /@vue/runtime-core@3.2.45:
-    resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==}
-    dependencies:
-      '@vue/reactivity': 3.2.45
-      '@vue/shared': 3.2.45
     dev: true
 
-  /@vue/runtime-core@3.2.47:
-    resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==}
+  /@vue/reactivity@3.3.0-alpha.11:
+    resolution: {integrity: sha512-qGt7vkRHmo1mybbOylRxrv1DGcDhsYLBCpH9JY4PcwokKxbsoNQGZmlaV9sgGq8fX/fZcSR2dvXlmyKN3FcZAQ==}
     dependencies:
-      '@vue/reactivity': 3.2.47
-      '@vue/shared': 3.2.47
+      '@vue/shared': 3.3.0-alpha.11
 
-  /@vue/runtime-dom@3.2.45:
-    resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==}
+  /@vue/runtime-core@3.3.0-alpha.11:
+    resolution: {integrity: sha512-uxi8oLsfiwcGRkiZ9Dok2dCpoH7pyZhy9j06UmuqK6vF4JCg9sndYln/74FUikham+akUTqZgtgxc5gtPygh3w==}
     dependencies:
-      '@vue/runtime-core': 3.2.45
-      '@vue/shared': 3.2.45
-      csstype: 2.6.21
-    dev: true
+      '@vue/reactivity': 3.3.0-alpha.11
+      '@vue/shared': 3.3.0-alpha.11
 
-  /@vue/runtime-dom@3.2.47:
-    resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==}
+  /@vue/runtime-dom@3.3.0-alpha.11:
+    resolution: {integrity: sha512-XCN8wQqtJMLdIy0y2uQEAjlVn83PBPUFsCCnETsN/kCZ3YhP+/o8wJ1iNhCoRb7ZPrIOOI9J/9pVPzlm3WGPTQ==}
     dependencies:
-      '@vue/runtime-core': 3.2.47
-      '@vue/shared': 3.2.47
-      csstype: 2.6.21
+      '@vue/runtime-core': 3.3.0-alpha.11
+      '@vue/shared': 3.3.0-alpha.11
+      csstype: 3.1.2
 
-  /@vue/server-renderer@3.2.45(vue@3.2.45):
-    resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==}
+  /@vue/server-renderer@3.3.0-alpha.11(vue@3.2.47):
+    resolution: {integrity: sha512-ZGq6ujgMQeDvITvIe0M2lAaM0x9TTr5ZQ/OMr7qEMo3HyaWxEDsG3m/KhPmlx0OvJjeGqXCqjs2nzOlO0UC77Q==}
     peerDependencies:
-      vue: 3.2.45
+      vue: 3.3.0-alpha.11
     dependencies:
-      '@vue/compiler-ssr': 3.2.45
-      '@vue/shared': 3.2.45
-      vue: 3.2.45
-    dev: true
+      '@vue/compiler-ssr': 3.3.0-alpha.11
+      '@vue/shared': 3.3.0-alpha.11
+      vue: 3.2.47
 
-  /@vue/server-renderer@3.2.47(vue@3.2.47):
-    resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==}
+  /@vue/server-renderer@3.3.0-alpha.11(vue@3.3.0-alpha.11):
+    resolution: {integrity: sha512-ZGq6ujgMQeDvITvIe0M2lAaM0x9TTr5ZQ/OMr7qEMo3HyaWxEDsG3m/KhPmlx0OvJjeGqXCqjs2nzOlO0UC77Q==}
     peerDependencies:
-      vue: 3.2.47
+      vue: 3.3.0-alpha.11
     dependencies:
-      '@vue/compiler-ssr': 3.2.47
-      '@vue/shared': 3.2.47
-      vue: 3.2.47
+      '@vue/compiler-ssr': 3.3.0-alpha.11
+      '@vue/shared': 3.3.0-alpha.11
+      vue: 3.3.0-alpha.11
 
   /@vue/shared@3.2.45:
     resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==}
@@ -2019,6 +1993,9 @@ packages:
   /@vue/shared@3.2.47:
     resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==}
 
+  /@vue/shared@3.3.0-alpha.11:
+    resolution: {integrity: sha512-bMoJDESDKvjQEuIUthdBi18Z33AvOjQ1Fn3XmdjUY7ZjLcU6Xu7QKZ1wT+qlyeQA1BqSjtEzbAGKomvUsT0uHw==}
+
   /@vue/test-utils@2.3.2(vue@3.2.47):
     resolution: {integrity: sha512-hJnVaYhbrIm0yBS0+e1Y0Sj85cMyAi+PAbK4JHqMRUZ6S622Goa+G7QzkRSyvCteG8wop7tipuEbHoZo26wsSA==}
     peerDependencies:
@@ -2028,7 +2005,7 @@ packages:
       vue: 3.2.47
     optionalDependencies:
       '@vue/compiler-dom': 3.2.47
-      '@vue/server-renderer': 3.2.47(vue@3.2.47)
+      '@vue/server-renderer': 3.3.0-alpha.11(vue@3.2.47)
     dev: true
 
   /@vueuse/core@10.0.2(vue@3.2.47):
@@ -2043,7 +2020,19 @@ packages:
       - vue
     dev: false
 
-  /@vueuse/head@1.0.15(vue@3.2.45):
+  /@vueuse/core@10.0.2(vue@3.3.0-alpha.11):
+    resolution: {integrity: sha512-/UGc2cXbxbeIFLDSJyHUjI9QZ4CJJkhiJe9TbKNPSofcWmYhhUgJ+7iw9njXTKu/Xc3Z6UeXVR9fosW1+cyrnQ==}
+    dependencies:
+      '@types/web-bluetooth': 0.0.16
+      '@vueuse/metadata': 10.0.2
+      '@vueuse/shared': 10.0.2(vue@3.3.0-alpha.11)
+      vue-demi: 0.14.0(@vue/composition-api@1.4.0)(vue@3.2.47)
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+    dev: false
+
+  /@vueuse/head@1.0.15(vue@3.3.0-alpha.11):
     resolution: {integrity: sha512-2wFKdxtGs7Aip6OYEL2NE6gW3J7ux+nvWUgJvPONEnWEU+Fvq6Mm+horkYwMSvQJ2O0KvVkJ5rGoIV+A4lSD/g==}
     peerDependencies:
       vue: '>=2.7 || >=3'
@@ -2051,8 +2040,8 @@ packages:
       '@unhead/dom': 1.0.0
       '@unhead/schema': 1.0.0
       '@unhead/ssr': 1.0.0
-      '@unhead/vue': 1.0.0(vue@3.2.45)
-      vue: 3.2.45
+      '@unhead/vue': 1.0.0(vue@3.3.0-alpha.11)
+      vue: 3.3.0-alpha.11
     dev: true
 
   /@vueuse/metadata@10.0.2:
@@ -2068,6 +2057,15 @@ packages:
       - vue
     dev: false
 
+  /@vueuse/shared@10.0.2(vue@3.3.0-alpha.11):
+    resolution: {integrity: sha512-7W2l6qZaFvla3zAeEVo8hNHkNRKCezJa3JjZAKv3K4KsevXobHhVNr+RHaOVNK/6ETpFmtqiK+0pMIADbHjjag==}
+    dependencies:
+      vue-demi: 0.14.0(@vue/composition-api@1.4.0)(vue@3.2.47)
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+    dev: false
+
   /@zhead/schema@1.0.1:
     resolution: {integrity: sha512-n6BDs+MjSOesuv6krG2QGyCPfdndxWX0M/G2wEGu1SPHc5jLHHi3EY1+vQvudFVXRVXquZHKsDPE7pSyeyGgHg==}
     dev: true
@@ -3103,8 +3101,8 @@ packages:
       css-tree: 1.1.3
     dev: true
 
-  /csstype@2.6.21:
-    resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
+  /csstype@3.1.2:
+    resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
 
   /cuint@0.2.2:
     resolution: {integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==}
@@ -5102,11 +5100,6 @@ packages:
     resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
     dev: true
 
-  /magic-string@0.25.9:
-    resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
-    dependencies:
-      sourcemap-codec: 1.4.8
-
   /magic-string@0.26.7:
     resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
     engines: {node: '>=12'}
@@ -5125,7 +5118,6 @@ packages:
     engines: {node: '>=12'}
     dependencies:
       '@jridgewell/sourcemap-codec': 1.4.15
-    dev: true
 
   /make-dir@3.1.0:
     resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
@@ -5671,11 +5663,11 @@ packages:
       '@nuxt/schema': 3.0.0(rollup@2.79.1)
       '@nuxt/telemetry': 2.1.8(rollup@2.79.1)
       '@nuxt/ui-templates': 1.0.0
-      '@nuxt/vite-builder': 3.0.0(@types/node@18.15.11)(typescript@4.8.4)(vue@3.2.45)
+      '@nuxt/vite-builder': 3.0.0(@types/node@18.15.11)(typescript@4.8.4)(vue@3.3.0-alpha.11)
       '@unhead/ssr': 1.0.0
       '@vue/reactivity': 3.2.45
       '@vue/shared': 3.2.45
-      '@vueuse/head': 1.0.15(vue@3.2.45)
+      '@vueuse/head': 1.0.15(vue@3.3.0-alpha.11)
       chokidar: 3.5.3
       cookie-es: 0.5.0
       defu: 6.1.1
@@ -5706,10 +5698,10 @@ packages:
       unimport: 1.0.1(rollup@2.79.1)
       unplugin: 1.0.0
       untyped: 1.0.0
-      vue: 3.2.45
+      vue: 3.3.0-alpha.11
       vue-bundle-renderer: 1.0.0
       vue-devtools-stub: 0.1.0
-      vue-router: 4.1.6(vue@3.2.45)
+      vue-router: 4.1.6(vue@3.3.0-alpha.11)
     transitivePeerDependencies:
       - '@types/node'
       - bufferutil
@@ -6414,15 +6406,6 @@ packages:
     resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
     dev: true
 
-  /postcss@8.4.19:
-    resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==}
-    engines: {node: ^10 || ^12 || >=14}
-    dependencies:
-      nanoid: 3.3.4
-      picocolors: 1.0.0
-      source-map-js: 1.0.2
-    dev: true
-
   /postcss@8.4.21:
     resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
     engines: {node: ^10 || ^12 || >=14}
@@ -7867,7 +7850,7 @@ packages:
     dependencies:
       '@types/node': 18.15.11
       esbuild: 0.15.10
-      postcss: 8.4.19
+      postcss: 8.4.21
       resolve: 1.22.1
       rollup: 2.79.1
     optionalDependencies:
@@ -7913,15 +7896,15 @@ packages:
     dependencies:
       '@docsearch/css': 3.3.3
       '@docsearch/js': 3.3.3(@algolia/client-search@4.17.0)
-      '@vitejs/plugin-vue': 4.1.0(vite@4.2.1)(vue@3.2.47)
+      '@vitejs/plugin-vue': 4.1.0(vite@4.2.1)(vue@3.3.0-alpha.11)
       '@vue/devtools-api': 6.5.0
-      '@vueuse/core': 10.0.2(vue@3.2.47)
+      '@vueuse/core': 10.0.2(vue@3.3.0-alpha.11)
       body-scroll-lock: 4.0.0-beta.0
       mark.js: 8.11.1
       minisearch: 6.0.1
       shiki: 0.14.1
       vite: 4.2.1(@types/node@18.15.11)
-      vue: 3.2.47
+      vue: 3.3.0-alpha.11
     transitivePeerDependencies:
       - '@algolia/client-search'
       - '@types/node'
@@ -8088,23 +8071,23 @@ packages:
       vue-demi: 0.14.0(@vue/composition-api@1.4.0)(vue@3.2.47)
     dev: false
 
-  /vue-router@4.1.6(vue@3.2.45):
+  /vue-router@4.1.6(vue@3.2.47):
     resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==}
     peerDependencies:
       vue: ^3.2.0
     dependencies:
       '@vue/devtools-api': 6.4.5
-      vue: 3.2.45
-    dev: true
+      vue: 3.2.47
+    dev: false
 
-  /vue-router@4.1.6(vue@3.2.47):
+  /vue-router@4.1.6(vue@3.3.0-alpha.11):
     resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==}
     peerDependencies:
       vue: ^3.2.0
     dependencies:
       '@vue/devtools-api': 6.4.5
-      vue: 3.2.47
-    dev: false
+      vue: 3.3.0-alpha.11
+    dev: true
 
   /vue-template-compiler@2.7.14:
     resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
@@ -8124,25 +8107,24 @@ packages:
       typescript: 4.8.4
     dev: true
 
-  /vue@3.2.45:
-    resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==}
-    dependencies:
-      '@vue/compiler-dom': 3.2.45
-      '@vue/compiler-sfc': 3.2.45
-      '@vue/runtime-dom': 3.2.45
-      '@vue/server-renderer': 3.2.45(vue@3.2.45)
-      '@vue/shared': 3.2.45
-    dev: true
-
   /vue@3.2.47:
     resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==}
     dependencies:
       '@vue/compiler-dom': 3.2.47
-      '@vue/compiler-sfc': 3.2.47
-      '@vue/runtime-dom': 3.2.47
-      '@vue/server-renderer': 3.2.47(vue@3.2.47)
+      '@vue/compiler-sfc': 3.3.0-alpha.11
+      '@vue/runtime-dom': 3.3.0-alpha.11
+      '@vue/server-renderer': 3.3.0-alpha.11(vue@3.2.47)
       '@vue/shared': 3.2.47
 
+  /vue@3.3.0-alpha.11:
+    resolution: {integrity: sha512-w6Fhcu181zGhBM5gBgEX+dJSUV4WB+qppWeQk5mDiVeqtxBL4uRnLwxMLmdED7OIGqVhgVjwAjSV5kqkAqJYcw==}
+    dependencies:
+      '@vue/compiler-dom': 3.3.0-alpha.11
+      '@vue/compiler-sfc': 3.3.0-alpha.11
+      '@vue/runtime-dom': 3.3.0-alpha.11
+      '@vue/server-renderer': 3.3.0-alpha.11(vue@3.3.0-alpha.11)
+      '@vue/shared': 3.3.0-alpha.11
+
   /wcwidth@1.0.1:
     resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
     dependencies: