diff --git a/.github/workflows/test-e2e-ssr.yml b/.github/workflows/test-e2e-ssr.yml
new file mode 100644
index 0000000..06acb62
--- /dev/null
+++ b/.github/workflows/test-e2e-ssr.yml
@@ -0,0 +1,73 @@
+name: E2E composable + SSR
+
+on:
+ push:
+ branches:
+ - main
+ - v4
+ - feat/*
+ - fix/*
+ pull_request:
+ workflow_dispatch:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ build-and-test:
+ runs-on: ubuntu-latest
+ name: Build and test
+
+ env:
+ dir: ./packages/test-e2e-ssr
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Install node
+ uses: actions/setup-node@v2
+ with:
+ node-version: 18
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2.0.1
+ with:
+ version: 8.6.2
+
+ - name: Get pnpm store directory
+ id: pnpm-cache
+ run: |
+ echo "::set-output name=pnpm_cache_dir::$(pnpm store path)"
+
+ - name: Cache pnpm modules
+ uses: actions/cache@v2
+ with:
+ path: |
+ ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
+ ~/.cache/Cypress
+ key: pnpm-v1-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ pnpm-v1-${{ runner.os }}-
+
+ - name: Install dependencies
+ run: pnpm install
+
+ - name: Build
+ run: pnpm run build
+
+ - name: E2E tests
+ working-directory: ${{env.dir}}
+ run: pnpm run test:e2e
+
+ - uses: actions/upload-artifact@v2
+ if: failure()
+ with:
+ name: cypress-screenshots
+ path: ${{env.dir}}/tests/e2e/screenshots
+
+ - uses: actions/upload-artifact@v2
+ if: always()
+ with:
+ name: cypress-videos
+ path: ${{env.dir}}/tests/e2e/videos
diff --git a/packages/test-e2e-composable-vue3/package.json b/packages/test-e2e-composable-vue3/package.json
index 9774b12..5d3a3e6 100644
--- a/packages/test-e2e-composable-vue3/package.json
+++ b/packages/test-e2e-composable-vue3/package.json
@@ -22,19 +22,19 @@
"graphql-tag": "^2.12.6",
"test-server": "workspace:*",
"vue": "^3.3.4",
- "@vitejs/plugin-vue": "^4.2.3",
"vue-router": "^4.2.4"
},
"devDependencies": {
- "vite": "^4.4.2",
- "vue-tsc": "^1.8.3",
- "typescript": "^5.0.2",
- "cypress-vite": "^1.4.1",
+ "@vitejs/plugin-vue": "^4.2.3",
+ "autoprefixer": "^10.4.14",
"axios": "^1.4.0",
"cypress": "^12.17.0",
+ "cypress-vite": "^1.4.1",
+ "postcss": "^8.4.25",
"start-server-and-test": "^2.0.0",
"tailwindcss": "^3.3.2",
- "postcss": "^8.4.25",
- "autoprefixer": "^10.4.14"
+ "typescript": "^5.0.2",
+ "vite": "^4.4.2",
+ "vue-tsc": "^1.8.3"
}
}
diff --git a/packages/test-e2e-composable-vue3/tsconfig.json b/packages/test-e2e-composable-vue3/tsconfig.json
index 7b7eba6..209b431 100644
--- a/packages/test-e2e-composable-vue3/tsconfig.json
+++ b/packages/test-e2e-composable-vue3/tsconfig.json
@@ -12,7 +12,7 @@
"sourceMap": true,
"baseUrl": ".",
"types": [
- "webpack-env",
+ "vite/client",
"cypress"
],
"paths": {
diff --git a/packages/test-e2e-ssr/.browserslistrc b/packages/test-e2e-ssr/.browserslistrc
new file mode 100644
index 0000000..214388f
--- /dev/null
+++ b/packages/test-e2e-ssr/.browserslistrc
@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not dead
diff --git a/packages/test-e2e-ssr/.editorconfig b/packages/test-e2e-ssr/.editorconfig
new file mode 100644
index 0000000..7053c49
--- /dev/null
+++ b/packages/test-e2e-ssr/.editorconfig
@@ -0,0 +1,5 @@
+[*.{js,jsx,ts,tsx,vue}]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/packages/test-e2e-ssr/.gitignore b/packages/test-e2e-ssr/.gitignore
new file mode 100644
index 0000000..d8c2a42
--- /dev/null
+++ b/packages/test-e2e-ssr/.gitignore
@@ -0,0 +1,27 @@
+.DS_Store
+node_modules
+/dist
+
+/tests/e2e/videos/
+/tests/e2e/screenshots/
+/tests/e2e/downloads/
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/packages/test-e2e-ssr/README.md b/packages/test-e2e-ssr/README.md
new file mode 100644
index 0000000..5559876
--- /dev/null
+++ b/packages/test-e2e-ssr/README.md
@@ -0,0 +1,24 @@
+# test-e2e-global-composable-vue3
+
+## Project setup
+```
+pnpm install
+```
+
+### Compiles and hot-reloads for development
+```
+pnpm run serve
+```
+
+### Compiles and minifies for production
+```
+pnpm run build
+```
+
+### Run your end-to-end tests
+```
+pnpm run test:e2e
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).
diff --git a/packages/test-e2e-ssr/cypress.config.ts b/packages/test-e2e-ssr/cypress.config.ts
new file mode 100644
index 0000000..e27d78b
--- /dev/null
+++ b/packages/test-e2e-ssr/cypress.config.ts
@@ -0,0 +1,31 @@
+import { defineConfig } from 'cypress'
+import vitePreprocessor from 'cypress-vite'
+import axios from 'axios'
+
+export default defineConfig({
+ fixturesFolder: 'tests/e2e/fixtures',
+ screenshotsFolder: 'tests/e2e/screenshots',
+ videosFolder: 'tests/e2e/videos',
+ downloadsFolder: 'tests/e2e/downloads',
+ e2e: {
+ baseUrl: 'http://localhost:8080',
+ // We've imported your old cypress plugins here.
+ // You may want to clean this up later by importing these.
+ setupNodeEvents (on) {
+ on('task', {
+ async 'db:reset' () {
+ await axios.get('http://localhost:4042/_reset')
+ return true
+ },
+
+ async 'db:seed' () {
+ await axios.get('http://localhost:4042/_seed')
+ return true
+ },
+ })
+ on('file:preprocessor', vitePreprocessor())
+ },
+ specPattern: 'tests/e2e/specs/**/*.cy.{js,jsx,ts,tsx}',
+ supportFile: 'tests/e2e/support/index.ts',
+ },
+})
diff --git a/packages/test-e2e-ssr/index.html b/packages/test-e2e-ssr/index.html
new file mode 100644
index 0000000..9ffb49d
--- /dev/null
+++ b/packages/test-e2e-ssr/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ My app
+
+
+
+
+
+
+
diff --git a/packages/test-e2e-ssr/package.json b/packages/test-e2e-ssr/package.json
new file mode 100644
index 0000000..e627e7f
--- /dev/null
+++ b/packages/test-e2e-ssr/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "test-e2e-ssr",
+ "version": "4.0.0-alpha.16",
+ "private": true,
+ "scripts": {
+ "dev": "node ./server.mjs",
+ "test": "pnpm run test:e2e",
+ "test:e2e": "start-server-and-test api 'http-get://localhost:4042/graphql?query=%7B__typename%7D' test:e2e:run",
+ "test:e2e:run": "start-server-and-test dev http://localhost:8080 test:e2e:cy",
+ "test:e2e:cy": "cypress run --headless",
+ "test:e2e:dev": "cypress open",
+ "api": "test-server --simulate-latency 50",
+ "api:dev": "test-server --simulate-latency 500"
+ },
+ "dependencies": {
+ "@apollo/client": "^3.7.16",
+ "@vue/apollo-composable": "workspace:*",
+ "@vue/apollo-util": "workspace:*",
+ "devalue": "^4.3.2",
+ "express": "^4.18.2",
+ "graphql": "^16.7.1",
+ "graphql-tag": "^2.12.6",
+ "isomorphic-fetch": "^3.0.0",
+ "test-server": "workspace:*",
+ "vue": "^3.3.4",
+ "vue-router": "^4.2.4"
+ },
+ "devDependencies": {
+ "@types/node": "^20.6.0",
+ "@vitejs/plugin-vue": "^4.2.3",
+ "autoprefixer": "^10.4.14",
+ "axios": "^1.4.0",
+ "cypress": "^12.17.0",
+ "cypress-vite": "^1.4.1",
+ "postcss": "^8.4.25",
+ "start-server-and-test": "^2.0.0",
+ "tailwindcss": "^3.3.2",
+ "typescript": "^5.0.2",
+ "vite": "^4.4.2",
+ "vue-tsc": "^1.8.3"
+ }
+}
diff --git a/packages/test-e2e-ssr/postcss.config.js b/packages/test-e2e-ssr/postcss.config.js
new file mode 100644
index 0000000..33ad091
--- /dev/null
+++ b/packages/test-e2e-ssr/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/packages/test-e2e-ssr/server.mjs b/packages/test-e2e-ssr/server.mjs
new file mode 100644
index 0000000..cabc4c3
--- /dev/null
+++ b/packages/test-e2e-ssr/server.mjs
@@ -0,0 +1,43 @@
+import express from 'express'
+import fs from 'node:fs'
+import { createServer } from 'vite'
+import { uneval } from 'devalue'
+
+const server = express()
+
+const viteServer = await createServer({
+ server: {
+ middlewareMode: true,
+ },
+ appType: 'custom',
+})
+server.use(viteServer.middlewares)
+
+server.get('*', async (req, res) => {
+ try {
+ const url = req.originalUrl
+ console.log(url)
+
+ let template = fs.readFileSync('./index.html', 'utf8')
+
+ const { render } = await viteServer.ssrLoadModule('/src/entry-server.ts')
+ const { html, context } = await render(url)
+
+ console.log(context)
+
+ template = template
+ .replace('', uneval(context.state))
+ .replace('', html)
+
+ res.send(template)
+ } catch (e) {
+ console.error(e)
+ res.send(e.stack)
+ }
+})
+
+server.use(express.static('.'))
+
+server.listen(8080, () => {
+ console.log('Server is running on http://localhost:8080')
+})
diff --git a/packages/test-e2e-ssr/src/apollo.ts b/packages/test-e2e-ssr/src/apollo.ts
new file mode 100644
index 0000000..21555fa
--- /dev/null
+++ b/packages/test-e2e-ssr/src/apollo.ts
@@ -0,0 +1,35 @@
+import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client/core'
+import { onError } from '@apollo/client/link/error'
+import { logErrorMessages } from '@vue/apollo-util'
+import { isServer } from './env.js'
+
+export function createApollo () {
+ const cache = new InMemoryCache()
+
+ const restoreCache = !isServer && !!window._INITIAL_STATE_?.apollo
+ if (restoreCache) {
+ cache.restore(window._INITIAL_STATE_.apollo)
+ }
+
+ // HTTP connection to the API
+ const httpLink = createHttpLink({
+ // You should use an absolute URL here
+ uri: 'http://localhost:4042/graphql',
+ })
+
+ // Handle errors
+ const errorLink = onError(error => {
+ logErrorMessages(error)
+ })
+
+ const apolloClient = new ApolloClient({
+ cache,
+ link: errorLink.concat(httpLink),
+ ssrForceFetchDelay: restoreCache ? 100 : undefined,
+ ssrMode: isServer,
+ })
+
+ return {
+ apolloClient,
+ }
+}
diff --git a/packages/test-e2e-ssr/src/app.ts b/packages/test-e2e-ssr/src/app.ts
new file mode 100644
index 0000000..1115c4c
--- /dev/null
+++ b/packages/test-e2e-ssr/src/app.ts
@@ -0,0 +1,22 @@
+import { createApp } from 'vue'
+import { DefaultApolloClient } from '@vue/apollo-composable'
+import { createApollo } from './apollo'
+import App from './components/App.vue'
+import { createMyRouter } from './router'
+import '@/assets/styles/tailwind.css'
+
+export function createMyApp () {
+ const app = createApp(App)
+
+ const { apolloClient } = createApollo()
+ app.provide(DefaultApolloClient, apolloClient)
+
+ const { router } = createMyRouter()
+ app.use(router)
+
+ return {
+ app,
+ router,
+ apolloClient,
+ }
+}
diff --git a/packages/test-e2e-ssr/src/assets/styles/tailwind.css b/packages/test-e2e-ssr/src/assets/styles/tailwind.css
new file mode 100644
index 0000000..7f39374
--- /dev/null
+++ b/packages/test-e2e-ssr/src/assets/styles/tailwind.css
@@ -0,0 +1,5 @@
+@tailwind base;
+
+@tailwind components;
+
+@tailwind utilities;
diff --git a/packages/test-e2e-ssr/src/components/App.vue b/packages/test-e2e-ssr/src/components/App.vue
new file mode 100644
index 0000000..7c8a948
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/App.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/ChannelList.vue b/packages/test-e2e-ssr/src/components/ChannelList.vue
new file mode 100644
index 0000000..7432984
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/ChannelList.vue
@@ -0,0 +1,67 @@
+
+
+
+
+ Loading channels...
+
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/ChannelView.vue b/packages/test-e2e-ssr/src/components/ChannelView.vue
new file mode 100644
index 0000000..b79e2a6
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/ChannelView.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+ Loading channel...
+
+
+
+
+
+ Currently viewing # {{ channel.label }}
+
+
Refetch
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/ClientOnly.vue b/packages/test-e2e-ssr/src/components/ClientOnly.vue
new file mode 100644
index 0000000..1ff0b52
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/ClientOnly.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/GlobalLoading.vue b/packages/test-e2e-ssr/src/components/GlobalLoading.vue
new file mode 100644
index 0000000..376d9d8
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/GlobalLoading.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Global loading...
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/LazyQuery.vue b/packages/test-e2e-ssr/src/components/LazyQuery.vue
new file mode 100644
index 0000000..873ae0f
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/LazyQuery.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+ Refetched: {{ refetched }}
+
+
+
+
+ Loading...
+
+
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/LazyQueryImmediately.vue b/packages/test-e2e-ssr/src/components/LazyQueryImmediately.vue
new file mode 100644
index 0000000..3818620
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/LazyQueryImmediately.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+ Loading...
+
+
+
+
Loaded channel: {{ channel.label }}
+
Messages: {{ channel.messages.length }}
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/MessageForm.vue b/packages/test-e2e-ssr/src/components/MessageForm.vue
new file mode 100644
index 0000000..e6269b9
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/MessageForm.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/MessageItem.vue b/packages/test-e2e-ssr/src/components/MessageItem.vue
new file mode 100644
index 0000000..b9bf281
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/MessageItem.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+ {{ message.text }}
+
+
+
diff --git a/packages/test-e2e-ssr/src/components/Welcome.vue b/packages/test-e2e-ssr/src/components/Welcome.vue
new file mode 100644
index 0000000..06a628e
--- /dev/null
+++ b/packages/test-e2e-ssr/src/components/Welcome.vue
@@ -0,0 +1,5 @@
+
+
+ Welcome
+
+
diff --git a/packages/test-e2e-ssr/src/context.ts b/packages/test-e2e-ssr/src/context.ts
new file mode 100644
index 0000000..decab57
--- /dev/null
+++ b/packages/test-e2e-ssr/src/context.ts
@@ -0,0 +1,11 @@
+export interface Context {
+ state: {
+ apollo?: any
+ }
+}
+
+declare global {
+ interface Window {
+ _INITIAL_STATE_: Context['state']
+ }
+}
diff --git a/packages/test-e2e-ssr/src/entry-client.ts b/packages/test-e2e-ssr/src/entry-client.ts
new file mode 100644
index 0000000..237afa1
--- /dev/null
+++ b/packages/test-e2e-ssr/src/entry-client.ts
@@ -0,0 +1,7 @@
+import { createMyApp } from './app.js'
+
+const { app, router } = createMyApp()
+
+router.isReady().then(() => {
+ app.mount('#app')
+})
diff --git a/packages/test-e2e-ssr/src/entry-server.ts b/packages/test-e2e-ssr/src/entry-server.ts
new file mode 100644
index 0000000..151fc23
--- /dev/null
+++ b/packages/test-e2e-ssr/src/entry-server.ts
@@ -0,0 +1,28 @@
+import 'isomorphic-fetch'
+import { renderToString } from 'vue/server-renderer'
+import { createMyApp } from './app.js'
+import { Context } from '@apollo/client'
+
+export async function render (url: string) {
+ const {
+ app,
+ router,
+ apolloClient,
+ } = await createMyApp()
+
+ await router.push(url)
+ await router.isReady()
+
+ const context: Context = {
+ state: {},
+ }
+
+ const html = await renderToString(app, context)
+
+ context.state.apollo = apolloClient.extract()
+
+ return {
+ html,
+ context,
+ }
+}
diff --git a/packages/test-e2e-ssr/src/env.ts b/packages/test-e2e-ssr/src/env.ts
new file mode 100644
index 0000000..37b9191
--- /dev/null
+++ b/packages/test-e2e-ssr/src/env.ts
@@ -0,0 +1 @@
+export const isServer = typeof window === 'undefined'
diff --git a/packages/test-e2e-ssr/src/router.ts b/packages/test-e2e-ssr/src/router.ts
new file mode 100644
index 0000000..b98e80d
--- /dev/null
+++ b/packages/test-e2e-ssr/src/router.ts
@@ -0,0 +1,33 @@
+import { createRouter, createWebHistory, createMemoryHistory } from 'vue-router'
+import { isServer } from './env.js'
+
+export function createMyRouter () {
+ const router = createRouter({
+ history: isServer ? createMemoryHistory() : createWebHistory(),
+ routes: [
+ {
+ path: '/',
+ name: 'home',
+ component: () => import('./components/Welcome.vue'),
+ },
+ {
+ path: '/channel/:id',
+ name: 'channel',
+ component: () => import('./components/ChannelView.vue'),
+ props: true,
+ },
+ {
+ path: '/lazy-query',
+ component: () => import('./components/LazyQuery.vue'),
+ },
+ {
+ path: '/lazy-query-immediately',
+ component: () => import('./components/LazyQueryImmediately.vue'),
+ },
+ ],
+ })
+
+ return {
+ router,
+ }
+}
diff --git a/packages/test-e2e-ssr/src/shims-vue.d.ts b/packages/test-e2e-ssr/src/shims-vue.d.ts
new file mode 100644
index 0000000..a99cf76
--- /dev/null
+++ b/packages/test-e2e-ssr/src/shims-vue.d.ts
@@ -0,0 +1,5 @@
+declare module '*.vue' {
+ import type { DefineComponent } from 'vue'
+ const component: DefineComponent
+ export default component
+}
diff --git a/packages/test-e2e-ssr/tailwind.config.js b/packages/test-e2e-ssr/tailwind.config.js
new file mode 100644
index 0000000..1385b6d
--- /dev/null
+++ b/packages/test-e2e-ssr/tailwind.config.js
@@ -0,0 +1,8 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}
diff --git a/packages/test-e2e-ssr/tests/e2e/.eslintrc.js b/packages/test-e2e-ssr/tests/e2e/.eslintrc.js
new file mode 100644
index 0000000..0c938b0
--- /dev/null
+++ b/packages/test-e2e-ssr/tests/e2e/.eslintrc.js
@@ -0,0 +1,12 @@
+module.exports = {
+ plugins: [
+ 'cypress',
+ ],
+ env: {
+ mocha: true,
+ 'cypress/globals': true,
+ },
+ rules: {
+ strict: 'off',
+ },
+}
diff --git a/packages/test-e2e-ssr/tests/e2e/specs/test.cy.ts b/packages/test-e2e-ssr/tests/e2e/specs/test.cy.ts
new file mode 100644
index 0000000..e9eeb9f
--- /dev/null
+++ b/packages/test-e2e-ssr/tests/e2e/specs/test.cy.ts
@@ -0,0 +1,38 @@
+describe('Vue 3 + Apollo Composable', () => {
+ beforeEach(() => {
+ cy.task('db:seed')
+ })
+
+ it('loads channels', () => {
+ cy.intercept('http://localhost:4042/graphql', (req) => {
+ throw new Error('Should not be called')
+ })
+ cy.visit('/')
+ cy.contains('#app', 'Client loaded')
+ cy.get('#app').should('not.contain', 'Loading channels...')
+ cy.get('.channel-link').should('have.lengthOf', 2)
+ cy.contains('.channel-link', '# General')
+ cy.contains('.channel-link', '# Random')
+ })
+
+ it('load one channel', () => {
+ let shouldCallGraphQL = false
+ cy.intercept('http://localhost:4042/graphql', (req) => {
+ if (!shouldCallGraphQL) {
+ throw new Error('Should not be called')
+ }
+ })
+ cy.visit('/channel/general')
+ cy.contains('#app', 'Client loaded')
+ cy.contains('#app', 'Currently viewing # General')
+ cy.get('.message').should('have.lengthOf', 2)
+ cy.contains('.message', 'Meow?')
+ cy.contains('.message', 'Meow!')
+ shouldCallGraphQL = true
+ cy.get('.channel-link').eq(1).click()
+ cy.get('[data-test-id="global-loading"]').should('contain', 'Global loading...')
+ cy.contains('#app', 'Currently viewing # Random')
+ cy.get('.message').should('have.lengthOf', 1)
+ cy.contains('.message', 'Hello world!')
+ })
+})
diff --git a/packages/test-e2e-ssr/tests/e2e/support/commands.ts b/packages/test-e2e-ssr/tests/e2e/support/commands.ts
new file mode 100644
index 0000000..c1f5a77
--- /dev/null
+++ b/packages/test-e2e-ssr/tests/e2e/support/commands.ts
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add("login", (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This is will overwrite an existing command --
+// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
diff --git a/packages/test-e2e-ssr/tests/e2e/support/index.ts b/packages/test-e2e-ssr/tests/e2e/support/index.ts
new file mode 100644
index 0000000..d68db96
--- /dev/null
+++ b/packages/test-e2e-ssr/tests/e2e/support/index.ts
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
diff --git a/packages/test-e2e-ssr/tsconfig.json b/packages/test-e2e-ssr/tsconfig.json
new file mode 100644
index 0000000..52d1dd5
--- /dev/null
+++ b/packages/test-e2e-ssr/tsconfig.json
@@ -0,0 +1,41 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "module": "esnext",
+ "strict": true,
+ "jsx": "preserve",
+ "importHelpers": true,
+ "moduleResolution": "node",
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "sourceMap": true,
+ "baseUrl": ".",
+ "types": [
+ "vite/client",
+ "cypress",
+ "node"
+ ],
+ "paths": {
+ "@/*": [
+ "src/*"
+ ]
+ },
+ "lib": [
+ "esnext",
+ "dom",
+ "dom.iterable",
+ "scripthost"
+ ]
+ },
+ "include": [
+ "src/**/*.ts",
+ "src/**/*.tsx",
+ "src/**/*.vue",
+ "tests/**/*.ts",
+ "tests/**/*.tsx"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
+}
diff --git a/packages/test-e2e-ssr/vite.config.ts b/packages/test-e2e-ssr/vite.config.ts
new file mode 100644
index 0000000..63e4599
--- /dev/null
+++ b/packages/test-e2e-ssr/vite.config.ts
@@ -0,0 +1,13 @@
+import { resolve } from 'path'
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [vue()],
+ resolve: {
+ alias: {
+ '@': resolve(__dirname, './src'),
+ },
+ },
+})
diff --git a/packages/test-server/src/data.ts b/packages/test-server/src/data.ts
index 711ead1..b9d4f0c 100644
--- a/packages/test-server/src/data.ts
+++ b/packages/test-server/src/data.ts
@@ -27,4 +27,26 @@ export function resetDatabase (): void {
]
}
+export function seedDatabase (): void {
+ channels[0].messages = [
+ {
+ id: '1',
+ channel: channels[0],
+ text: 'Meow?',
+ },
+ {
+ id: '2',
+ channel: channels[0],
+ text: 'Meow!',
+ },
+ ]
+ channels[1].messages = [
+ {
+ id: '3',
+ channel: channels[1],
+ text: 'Hello world!',
+ },
+ ]
+}
+
resetDatabase()
diff --git a/packages/test-server/src/index.ts b/packages/test-server/src/index.ts
index d4ec961..fa43be1 100644
--- a/packages/test-server/src/index.ts
+++ b/packages/test-server/src/index.ts
@@ -7,7 +7,7 @@ import { expressMiddleware } from '@apollo/server/express4'
import { WebSocketServer } from 'ws'
import { useServer } from 'graphql-ws/lib/use/ws'
import { schema } from './schema.js'
-import { resetDatabase } from './data.js'
+import { resetDatabase, seedDatabase } from './data.js'
import { simulateLatency } from './util.js'
const app = express()
@@ -23,6 +23,11 @@ app.get('/_reset', (req, res) => {
res.status(200).end()
})
+app.get('/_seed', (req, res) => {
+ seedDatabase()
+ res.status(200).end()
+})
+
const server = new ApolloServer({
schema,
plugins: [
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7c864ea..d64cb2f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -177,9 +177,6 @@ importers:
'@apollo/client':
specifier: ^3.7.16
version: 3.7.16(graphql@16.7.1)
- '@vitejs/plugin-vue':
- specifier: ^4.2.3
- version: 4.2.3(vite@4.4.2)(vue@3.3.4)
'@vue/apollo-composable':
specifier: workspace:*
version: link:../vue-apollo-composable
@@ -202,6 +199,9 @@ importers:
specifier: ^4.2.4
version: 4.2.4(vue@3.3.4)
devDependencies:
+ '@vitejs/plugin-vue':
+ specifier: ^4.2.3
+ version: 4.2.3(vite@4.4.2)(vue@3.3.4)
autoprefixer:
specifier: ^10.4.14
version: 10.4.14(postcss@8.4.25)
@@ -228,7 +228,80 @@ importers:
version: 5.0.2
vite:
specifier: ^4.4.2
- version: 4.4.2
+ version: 4.4.2(@types/node@20.6.0)
+ vue-tsc:
+ specifier: ^1.8.3
+ version: 1.8.3(typescript@5.0.2)
+
+ packages/test-e2e-ssr:
+ dependencies:
+ '@apollo/client':
+ specifier: ^3.7.16
+ version: 3.7.16(graphql@16.7.1)
+ '@vue/apollo-composable':
+ specifier: workspace:*
+ version: link:../vue-apollo-composable
+ '@vue/apollo-util':
+ specifier: workspace:*
+ version: link:../vue-apollo-util
+ devalue:
+ specifier: ^4.3.2
+ version: 4.3.2
+ express:
+ specifier: ^4.18.2
+ version: 4.18.2
+ graphql:
+ specifier: ^16.7.1
+ version: 16.7.1
+ graphql-tag:
+ specifier: ^2.12.6
+ version: 2.12.6(graphql@16.7.1)
+ isomorphic-fetch:
+ specifier: ^3.0.0
+ version: 3.0.0
+ test-server:
+ specifier: workspace:*
+ version: link:../test-server
+ vue:
+ specifier: ^3.3.4
+ version: 3.3.4
+ vue-router:
+ specifier: ^4.2.4
+ version: 4.2.4(vue@3.3.4)
+ devDependencies:
+ '@types/node':
+ specifier: ^20.6.0
+ version: 20.6.0
+ '@vitejs/plugin-vue':
+ specifier: ^4.2.3
+ version: 4.2.3(vite@4.4.2)(vue@3.3.4)
+ autoprefixer:
+ specifier: ^10.4.14
+ version: 10.4.14(postcss@8.4.25)
+ axios:
+ specifier: ^1.4.0
+ version: 1.4.0
+ cypress:
+ specifier: ^12.17.0
+ version: 12.17.0
+ cypress-vite:
+ specifier: ^1.4.1
+ version: 1.4.1(vite@4.4.2)
+ postcss:
+ specifier: ^8.4.25
+ version: 8.4.25
+ start-server-and-test:
+ specifier: ^2.0.0
+ version: 2.0.0
+ tailwindcss:
+ specifier: ^3.3.2
+ version: 3.3.2
+ typescript:
+ specifier: ^5.0.2
+ version: 5.0.2
+ vite:
+ specifier: ^4.4.2
+ version: 4.4.2(@types/node@20.6.0)
vue-tsc:
specifier: ^1.8.3
version: 1.8.3(typescript@5.0.2)
@@ -1280,7 +1353,7 @@ packages:
'@babel/helper-plugin-utils': 7.20.2
debug: 4.3.4(supports-color@8.1.1)
lodash.debounce: 4.0.8
- resolve: 1.22.1
+ resolve: 1.22.2
semver: 6.3.0
transitivePeerDependencies:
- supports-color
@@ -1296,7 +1369,7 @@ packages:
'@babel/helper-plugin-utils': 7.20.2
debug: 4.3.4(supports-color@8.1.1)
lodash.debounce: 4.0.8
- resolve: 1.22.1
+ resolve: 1.22.2
semver: 6.3.0
transitivePeerDependencies:
- supports-color
@@ -3431,6 +3504,7 @@ packages:
cpu: [arm64]
os: [android]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/android-arm@0.18.11:
@@ -3439,6 +3513,7 @@ packages:
cpu: [arm]
os: [android]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/android-x64@0.18.11:
@@ -3447,6 +3522,7 @@ packages:
cpu: [x64]
os: [android]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/darwin-arm64@0.18.11:
@@ -3455,6 +3531,7 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/darwin-x64@0.18.11:
@@ -3463,6 +3540,7 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/freebsd-arm64@0.18.11:
@@ -3471,6 +3549,7 @@ packages:
cpu: [arm64]
os: [freebsd]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/freebsd-x64@0.18.11:
@@ -3479,6 +3558,7 @@ packages:
cpu: [x64]
os: [freebsd]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-arm64@0.18.11:
@@ -3487,6 +3567,7 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-arm@0.18.11:
@@ -3495,6 +3576,7 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-ia32@0.18.11:
@@ -3503,6 +3585,7 @@ packages:
cpu: [ia32]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-loong64@0.14.54:
@@ -3520,6 +3603,7 @@ packages:
cpu: [loong64]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-mips64el@0.18.11:
@@ -3528,6 +3612,7 @@ packages:
cpu: [mips64el]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-ppc64@0.18.11:
@@ -3536,6 +3621,7 @@ packages:
cpu: [ppc64]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-riscv64@0.18.11:
@@ -3544,6 +3630,7 @@ packages:
cpu: [riscv64]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-s390x@0.18.11:
@@ -3552,6 +3639,7 @@ packages:
cpu: [s390x]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/linux-x64@0.18.11:
@@ -3560,6 +3648,7 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/netbsd-x64@0.18.11:
@@ -3568,6 +3657,7 @@ packages:
cpu: [x64]
os: [netbsd]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/openbsd-x64@0.18.11:
@@ -3576,6 +3666,7 @@ packages:
cpu: [x64]
os: [openbsd]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/sunos-x64@0.18.11:
@@ -3584,6 +3675,7 @@ packages:
cpu: [x64]
os: [sunos]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/win32-arm64@0.18.11:
@@ -3592,6 +3684,7 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/win32-ia32@0.18.11:
@@ -3600,6 +3693,7 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
+ dev: true
optional: true
/@esbuild/win32-x64@0.18.11:
@@ -3608,6 +3702,7 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
+ dev: true
optional: true
/@eslint/eslintrc@0.4.3:
@@ -4135,7 +4230,7 @@ packages:
/@types/accepts@1.3.5:
resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: false
/@types/babel__core@7.20.0:
@@ -4171,32 +4266,32 @@ packages:
resolution: {integrity: sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==}
dependencies:
'@types/connect': 3.4.35
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: false
/@types/body-parser@1.19.2:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies:
'@types/connect': 3.4.35
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
/@types/bonjour@3.5.10:
resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/connect-history-api-fallback@1.3.5:
resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==}
dependencies:
'@types/express-serve-static-core': 4.17.33
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/connect@3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
/@types/content-disposition@0.5.5:
resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==}
@@ -4208,7 +4303,7 @@ packages:
'@types/connect': 3.4.35
'@types/express': 4.17.17
'@types/keygrip': 1.0.2
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: false
/@types/cors@2.8.10:
@@ -4218,7 +4313,7 @@ packages:
/@types/cors@2.8.13:
resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/eslint-scope@3.7.4:
@@ -4246,7 +4341,7 @@ packages:
/@types/express-serve-static-core@4.17.33:
resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
@@ -4261,7 +4356,7 @@ packages:
/@types/fs-capacitor@2.0.0:
resolution: {integrity: sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: false
/@types/graphql@14.5.0:
@@ -4286,7 +4381,7 @@ packages:
/@types/http-proxy@1.17.9:
resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/istanbul-lib-coverage@2.0.4:
@@ -4321,7 +4416,7 @@ packages:
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/koa-compose@3.2.5:
@@ -4340,7 +4435,7 @@ packages:
'@types/http-errors': 2.0.1
'@types/keygrip': 1.0.2
'@types/koa-compose': 3.2.5
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: false
/@types/long@4.0.2:
@@ -4357,7 +4452,7 @@ packages:
/@types/node-fetch@2.6.4:
resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
form-data: 3.0.1
dev: false
@@ -4369,8 +4464,8 @@ packages:
resolution: {integrity: sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==}
dev: true
- /@types/node@18.14.0:
- resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==}
+ /@types/node@20.6.0:
+ resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==}
/@types/normalize-package-data@2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
@@ -4389,13 +4484,13 @@ packages:
/@types/resolve@0.0.8:
resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/responselike@1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/retry@0.12.0:
@@ -4416,7 +4511,7 @@ packages:
resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==}
dependencies:
'@types/mime': 3.0.1
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
/@types/shortid@0.0.29:
resolution: {integrity: sha512-9BCYD9btg2CY4kPcpMQ+vCR8U6V8f/KvixYD5ZbxoWlkhddNF5IeZMVL3p+QFUkg+Hb+kPAG9Jgk4bnnF1v/Fw==}
@@ -4433,7 +4528,7 @@ packages:
/@types/sockjs@0.3.33:
resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/stack-utils@1.0.1:
@@ -4447,13 +4542,13 @@ packages:
/@types/ws@7.4.7:
resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: false
/@types/ws@8.5.5:
resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
/@types/yargs-parser@21.0.0:
@@ -4470,7 +4565,7 @@ packages:
resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
requiresBuild: true
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
dev: true
optional: true
@@ -4605,9 +4700,9 @@ packages:
vite: ^4.0.0
vue: '*'
dependencies:
- vite: 4.4.2
+ vite: 4.4.2(@types/node@20.6.0)
vue: 3.3.4
- dev: false
+ dev: true
/@volar/language-core@1.7.10:
resolution: {integrity: sha512-18Gmth5M0UI3hDDqhZngjMnb6WCslcfglkOdepRIhGxRYe7xR7DRRzciisYDMZsvOQxDYme+uaohg0dKUxLV2Q==}
@@ -4693,7 +4788,7 @@ packages:
babel-plugin-dynamic-import-node: 2.3.3
core-js: 3.28.0
core-js-compat: 3.28.0
- semver: 7.3.8
+ semver: 7.5.4
vue: 3.2.47
transitivePeerDependencies:
- supports-color
@@ -5012,7 +5107,7 @@ packages:
open: 8.4.2
ora: 5.4.1
read-pkg: 5.2.0
- semver: 7.3.8
+ semver: 7.5.4
strip-ansi: 6.0.1
transitivePeerDependencies:
- encoding
@@ -7801,7 +7896,7 @@ packages:
dependencies:
chokidar: 3.5.3
debug: 4.3.4(supports-color@8.1.1)
- vite: 4.4.2
+ vite: 4.4.2(@types/node@20.6.0)
transitivePeerDependencies:
- supports-color
dev: true
@@ -8105,6 +8200,10 @@ packages:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
dev: true
+ /devalue@4.3.2:
+ resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
+ dev: false
+
/dicer@0.3.0:
resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==}
engines: {node: '>=4.5.0'}
@@ -8657,6 +8756,7 @@ packages:
'@esbuild/win32-arm64': 0.18.11
'@esbuild/win32-ia32': 0.18.11
'@esbuild/win32-x64': 0.18.11
+ dev: true
/esbuild@0.8.57:
resolution: {integrity: sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==}
@@ -9557,6 +9657,7 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
+ dev: true
optional: true
/function-bind@1.1.1:
@@ -10799,6 +10900,15 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /isomorphic-fetch@3.0.0:
+ resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==}
+ dependencies:
+ node-fetch: 2.6.9
+ whatwg-fetch: 3.6.2
+ transitivePeerDependencies:
+ - encoding
+ dev: false
+
/isstream@0.1.2:
resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
dev: true
@@ -11265,7 +11375,7 @@ packages:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
dependencies:
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
@@ -11847,7 +11957,7 @@ packages:
dev: true
/media-typer@0.3.0:
- resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
/memfs@3.4.13:
@@ -11879,7 +11989,7 @@ packages:
dev: true
/merge-descriptors@1.0.1:
- resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=}
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
/merge-source-map@1.1.0:
resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==}
@@ -12222,7 +12332,7 @@ packages:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
hosted-git-info: 2.8.9
- resolve: 1.22.1
+ resolve: 1.22.2
semver: 5.7.1
validate-npm-package-license: 3.0.4
dev: true
@@ -14154,7 +14264,7 @@ packages:
hasBin: true
dependencies:
'@types/estree': 1.0.0
- '@types/node': 18.14.0
+ '@types/node': 20.6.0
acorn: 7.4.1
dev: true
@@ -14172,6 +14282,7 @@ packages:
hasBin: true
optionalDependencies:
fsevents: 2.3.2
+ dev: true
/rsvp@4.8.5:
resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==}
@@ -15700,7 +15811,7 @@ packages:
fsevents: 2.3.2
dev: true
- /vite@4.4.2:
+ /vite@4.4.2(@types/node@20.6.0):
resolution: {integrity: sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@@ -15728,11 +15839,13 @@ packages:
terser:
optional: true
dependencies:
+ '@types/node': 20.6.0
esbuild: 0.18.11
postcss: 8.4.25
rollup: 3.26.2
optionalDependencies:
fsevents: 2.3.2
+ dev: true
/vitepress@0.22.4:
resolution: {integrity: sha512-oZUnLO/SpYdThaBKefDeOiVlr0Rie4Ppx3FzMnMyLtJnI5GlBMNjqYqMy/4+umm/iC+ZDJfI+IlDKxv5fZnYzA==}
@@ -16239,7 +16352,6 @@ packages:
/whatwg-fetch@3.6.2:
resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==}
- dev: true
/whatwg-mimetype@2.3.0:
resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==}