test: update server

This commit is contained in:
Guillaume Chau
2023-06-12 11:55:02 +02:00
parent 2077502adf
commit 13bfbbea98
4 changed files with 630 additions and 77 deletions
+13 -7
View File
@@ -6,27 +6,33 @@
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test": "pnpm run test:e2e && kill-port 4042",
"test:e2e": "start-server-and-test api http://localhost:4042/.well-known/apollo/server-health test:e2e:client",
"test:e2e": "start-server-and-test api 'http-get://localhost:4042/graphql?query=%7B__typename%7D' test:e2e:client",
"test:e2e:client": "vue-cli-service test:e2e --mode production --headless",
"test:e2e:dev": "start-server-and-test api http://localhost:4042/.well-known/apollo/server-health test:e2e:dev:client",
"test:e2e:dev": "start-server-and-test api:dev 'http-get://localhost:4042/graphql?query=%7B__typename%7D' test:e2e:dev:client",
"test:e2e:dev:client": "vue-cli-service test:e2e --mode development",
"api": "node server.js"
"api": "node server.mjs --simulate-latency 100",
"api:dev": "node server.mjs --simulate-latency 500"
},
"dependencies": {
"@apollo/client": "^3.7.7",
"@apollo/server": "^4.7.3",
"@graphql-tools/schema": "^10.0.0",
"@vue/apollo-composable": "workspace:*",
"@vue/apollo-util": "workspace:*",
"apollo-server-express": "^2.25.4",
"body-parser": "^1.20.2",
"core-js": "^3.23.2",
"cors": "^2.8.5",
"express": "^4.18.1",
"graphql": "^15.8.0",
"graphql": "^16.6.0",
"graphql-subscriptions": "^2.0.0",
"graphql-tag": "^2.12.6",
"graphql-ws": "^5.13.1",
"regenerator-runtime": "^0.13.9",
"shortid": "^2.2.16",
"vue": "^3.2.37",
"vue-demi": "^0.13.1",
"vue-router": "^4.0.16"
"vue-router": "^4.0.16",
"ws": "^8.13.0"
},
"devDependencies": {
"@babel/core": "^7.18.5",
@@ -36,7 +42,7 @@
"@vue/cli-plugin-typescript": "^5.0.6",
"@vue/cli-service": "^5.0.6",
"axios": "^0.24.0",
"cypress": "^10.2.0",
"cypress": "^12.14.0",
"kill-port": "^1.6.1",
"start-server-and-test": "^1.14.0",
"tailwindcss": "^1.9.6"
@@ -1,7 +1,37 @@
const express = require('express')
const cors = require('cors')
const { gql, ApolloServer, ApolloError, PubSub, withFilter } = require('apollo-server-express')
const shortid = require('shortid')
import { createServer } from 'node:http'
import express from 'express'
import cors from 'cors'
import bodyParser from 'body-parser'
import { ApolloServer } from '@apollo/server'
import { expressMiddleware } from '@apollo/server/express4'
import { makeExecutableSchema } from '@graphql-tools/schema'
import { WebSocketServer } from 'ws'
import { useServer } from 'graphql-ws/lib/use/ws'
import { PubSub, withFilter } from 'graphql-subscriptions'
import shortid from 'shortid'
import gql from 'graphql-tag'
import { GraphQLError } from 'graphql'
const shouldSimulateLatency = process.argv.includes('--simulate-latency')
let latency = 500
if (shouldSimulateLatency) {
const index = process.argv.indexOf('--simulate-latency')
if (index !== -1 && process.argv.length > index + 1) {
latency = parseInt(process.argv[index + 1])
}
}
export class GraphQLErrorWithCode extends GraphQLError {
constructor (message, code, extensions) {
super(message, {
extensions: {
code,
...extensions,
},
})
}
}
const typeDefs = gql`
type Channel {
@@ -68,14 +98,25 @@ function resetDatabase () {
resetDatabase()
function simulateLatency () {
return new Promise(resolve => {
if (shouldSimulateLatency) {
setTimeout(resolve, latency)
} else {
resolve()
}
})
}
const resolvers = {
Query: {
hello: () => 'Hello world!',
channels: () => channels,
channel: (root, { id }) => channels.find(c => c.id === id),
list: () => ['a', 'b', 'c'],
good: () => 'good',
bad: () => {
hello: () => simulateLatency().then(() => 'Hello world!'),
channels: () => simulateLatency().then(() => channels),
channel: (root, { id }) => simulateLatency().then(() => channels.find(c => c.id === id)),
list: () => simulateLatency().then(() => ['a', 'b', 'c']),
good: () => simulateLatency().then(() => 'good'),
bad: async () => {
await simulateLatency()
throw new Error('An error')
},
},
@@ -84,7 +125,7 @@ const resolvers = {
addMessage: (root, { input }) => {
const channel = channels.find(c => c.id === input.channelId)
if (!channel) {
throw new ApolloError(`Channel ${input.channelId} not found`, 'not-found')
throw new GraphQLErrorWithCode(`Channel ${input.channelId} not found`, 'not-found')
}
const message = {
id: shortid(),
@@ -99,7 +140,7 @@ const resolvers = {
updateMessage: (root, { input }) => {
const channel = channels.find(c => c.id === input.channelId)
if (!channel) {
throw new ApolloError(`Channel ${input.channelId} not found`, 'not-found')
throw new GraphQLErrorWithCode(`Channel ${input.channelId} not found`, 'not-found')
}
const message = channel.messages.find(m => m.id === input.id)
Object.assign(message, {
@@ -127,26 +168,60 @@ const resolvers = {
},
}
const schema = makeExecutableSchema({
typeDefs,
resolvers,
})
const app = express()
app.use(cors('*'))
app.use(bodyParser.json())
app.get('/_reset', (req, res) => {
resetDatabase()
res.status(200).end()
})
const server = new ApolloServer({
typeDefs,
resolvers,
schema,
context: () => new Promise(resolve => {
setTimeout(() => resolve({}), 50)
}),
plugins: [
// Proper shutdown for the WebSocket server.
{
async serverWillStart () {
return {
async drainServer () {
await serverCleanup.dispose()
},
}
},
},
],
csrfPrevention: false,
})
server.applyMiddleware({ app })
await server.start()
app.listen({
app.use('/graphql', expressMiddleware(server))
const httpServer = createServer(app)
// Websocket
const wsServer = new WebSocketServer({
server: httpServer,
path: '/graphql',
})
const serverCleanup = useServer({
schema,
}, wsServer)
httpServer.listen({
port: 4042,
}, () => {
console.log('🚀 Server ready at http://localhost:4042')
@@ -34,6 +34,7 @@ export default defineComponent({
id: props.id,
}), {
notifyOnNetworkStatusChange: true,
keepPreviousResult: true,
})
const channel = computed(() => result.value?.channel)
@@ -63,42 +64,46 @@ export default defineComponent({
</script>
<template>
<div
v-if="loading"
class="loading-channel"
>
Loading channel...
</div>
<div
v-else
class="flex flex-col"
>
<div class="flex-none p-6 border-b border-gray-200 bg-white">
Currently viewing # {{ channel.label }}
<a
class="text-green-500 cursor-pointer"
data-test-id="refetch"
@click="refetch()"
>Refetch</a>
<div>
<div
v-if="loading"
class="loading-channel fixed top-0 left-0 w-full flex"
>
<div class="px-4 py-2 rounded-b mx-auto bg-white border-b border-l border-r border-gray-200">
Loading channel...
</div>
</div>
<div
ref="messagesEl"
class="flex-1 overflow-y-auto"
v-if="channel"
class="flex flex-col h-full"
>
<MessageItem
v-for="message of channel.messages"
:key="message.id"
:message="message"
class="m-2"
<div class="flex-none p-6 border-b border-gray-200 bg-white">
Currently viewing # {{ channel.label }}
<a
class="text-green-500 cursor-pointer"
data-test-id="refetch"
@click="refetch()"
>Refetch</a>
</div>
<div
ref="messagesEl"
class="flex-1 overflow-y-auto"
>
<MessageItem
v-for="message of channel.messages"
:key="message.id"
:message="message"
class="m-2"
/>
</div>
<MessageForm
:channel-id="channel.id"
class="flex-none m-2 mt-0"
/>
</div>
<MessageForm
:channel-id="channel.id"
class="flex-none m-2 mt-0"
/>
</div>
</template>
+490 -23
View File
@@ -177,16 +177,22 @@ importers:
dependencies:
'@apollo/client':
specifier: ^3.7.7
version: 3.7.9(graphql@16.0.0)(subscriptions-transport-ws@0.9.19)
version: 3.7.9(graphql-ws@5.13.1)(graphql@16.0.0)
'@apollo/server':
specifier: ^4.7.3
version: 4.7.3(graphql@16.0.0)
'@graphql-tools/schema':
specifier: ^10.0.0
version: 10.0.0(graphql@16.0.0)
'@vue/apollo-composable':
specifier: workspace:*
version: link:../vue-apollo-composable
'@vue/apollo-util':
specifier: workspace:*
version: link:../vue-apollo-util
apollo-server-express:
specifier: ^2.25.4
version: 2.26.1(graphql@16.0.0)
body-parser:
specifier: ^1.20.2
version: 1.20.2
core-js:
specifier: ^3.23.2
version: 3.28.0
@@ -199,9 +205,15 @@ importers:
graphql:
specifier: ^16
version: 16.0.0
graphql-subscriptions:
specifier: ^2.0.0
version: 2.0.0(graphql@16.0.0)
graphql-tag:
specifier: ^2.12.6
version: 2.12.6(graphql@16.0.0)
graphql-ws:
specifier: ^5.13.1
version: 5.13.1(graphql@16.0.0)
regenerator-runtime:
specifier: ^0.13.9
version: 0.13.11
@@ -217,6 +229,9 @@ importers:
vue-router:
specifier: ^4.0.16
version: 4.1.6(vue@3.2.47)
ws:
specifier: ^8.13.0
version: 8.13.0
devDependencies:
'@babel/core':
specifier: ^7.18.5
@@ -229,7 +244,7 @@ importers:
version: 5.0.8(@vue/cli-service@5.0.8)(core-js@3.28.0)(esbuild@0.8.57)(vue@3.2.47)
'@vue/cli-plugin-e2e-cypress':
specifier: ^5.0.6
version: 5.0.8(@vue/cli-service@5.0.8)(cypress@10.11.0)(eslint@7.32.0)
version: 5.0.8(@vue/cli-service@5.0.8)(cypress@12.14.0)(eslint@7.32.0)
'@vue/cli-plugin-typescript':
specifier: ^5.0.6
version: 5.0.8(@vue/cli-service@5.0.8)(esbuild@0.8.57)(eslint@7.32.0)(typescript@4.9.5)(vue@3.2.47)
@@ -240,8 +255,8 @@ importers:
specifier: ^0.24.0
version: 0.24.0
cypress:
specifier: ^10.2.0
version: 10.11.0
specifier: ^12.14.0
version: 12.14.0
kill-port:
specifier: ^1.6.1
version: 1.6.1
@@ -260,7 +275,7 @@ importers:
devDependencies:
'@apollo/client':
specifier: ^3.7.7
version: 3.7.9(graphql@16.0.0)(subscriptions-transport-ws@0.9.19)
version: 3.7.9(graphql-ws@5.13.1)(graphql@16.0.0)
'@babel/core':
specifier: ^7.18.5
version: 7.21.0
@@ -342,7 +357,7 @@ importers:
devDependencies:
'@apollo/client':
specifier: ^3.7.7
version: 3.7.9(graphql@16.0.0)(subscriptions-transport-ws@0.9.19)
version: 3.7.9(graphql-ws@5.13.1)(graphql@16.0.0)
'@types/throttle-debounce':
specifier: ^2.1.0
version: 2.1.0
@@ -373,7 +388,7 @@ importers:
devDependencies:
'@apollo/client':
specifier: ^3.7.7
version: 3.7.9(graphql@16.0.0)(subscriptions-transport-ws@0.9.19)
version: 3.7.9(graphql-ws@5.13.1)(graphql@16.0.0)
'@babel/core':
specifier: ^7.18.5
version: 7.21.0
@@ -452,7 +467,7 @@ importers:
devDependencies:
'@apollo/client':
specifier: ^3.7.7
version: 3.7.9
version: 3.7.9(graphql@16.0.0)(subscriptions-transport-ws@0.9.19)
'@types/serialize-javascript':
specifier: ^5.0.2
version: 5.0.2
@@ -464,7 +479,7 @@ importers:
devDependencies:
'@apollo/client':
specifier: ^3.7.7
version: 3.7.9(graphql@16.0.0)(subscriptions-transport-ws@0.9.19)
version: 3.7.9(graphql-ws@5.13.1)(graphql@16.0.0)
graphql:
specifier: ^16
version: 16.0.0
@@ -609,7 +624,18 @@ packages:
'@jridgewell/trace-mapping': 0.3.17
dev: true
/@apollo/client@3.7.9:
/@apollo/cache-control-types@1.0.2(graphql@16.0.0):
resolution: {integrity: sha512-Por80co1eUm4ATsvjCOoS/tIR8PHxqVjsA6z76I6Vw0rFn4cgyVElQcmQDIZiYsy41k8e5xkrMRECkM2WR8pNw==}
peerDependencies:
graphql: 14.x || 15.x || 16.x
peerDependenciesMeta:
graphql:
optional: true
dependencies:
graphql: 16.0.0
dev: false
/@apollo/client@3.7.9(graphql-ws@5.13.1)(graphql@16.0.0):
resolution: {integrity: sha512-YnJvrJOVWrp4y/zdNvUaM8q4GuSHCEIecsRDTJhK/veT33P/B7lfqGJ24NeLdKMj8tDEuXYF7V0t+th4+rgC+Q==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
@@ -633,7 +659,9 @@ packages:
'@wry/context': 0.7.0
'@wry/equality': 0.5.3
'@wry/trie': 0.3.2
graphql: 16.0.0
graphql-tag: 2.12.6(graphql@16.0.0)
graphql-ws: 5.13.1(graphql@16.0.0)
hoist-non-react-statics: 3.3.2
optimism: 0.16.2
prop-types: 15.8.1
@@ -642,7 +670,6 @@ packages:
ts-invariant: 0.10.3
tslib: 2.5.0
zen-observable-ts: 1.2.5
dev: true
/@apollo/client@3.7.9(graphql@16.0.0)(subscriptions-transport-ws@0.9.19):
resolution: {integrity: sha512-YnJvrJOVWrp4y/zdNvUaM8q4GuSHCEIecsRDTJhK/veT33P/B7lfqGJ24NeLdKMj8tDEuXYF7V0t+th4+rgC+Q==}
@@ -700,6 +727,202 @@ packages:
long: 4.0.0
dev: false
/@apollo/protobufjs@1.2.7:
resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==}
hasBin: true
requiresBuild: true
dependencies:
'@protobufjs/aspromise': 1.1.2
'@protobufjs/base64': 1.1.2
'@protobufjs/codegen': 2.0.4
'@protobufjs/eventemitter': 1.1.0
'@protobufjs/fetch': 1.1.0
'@protobufjs/float': 1.0.2
'@protobufjs/inquire': 1.1.0
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
'@types/long': 4.0.2
long: 4.0.0
dev: false
/@apollo/server-gateway-interface@1.1.0(graphql@16.0.0):
resolution: {integrity: sha512-0rhG++QtGfr4YhhIHgxZ9BdMFthaPY6LbhI9Au90osbfLMiZ7f8dmZsEX1mp7O1h8MJwCu6Dp0I/KcGbSvfUGA==}
peerDependencies:
graphql: 14.x || 15.x || 16.x
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@apollo/usage-reporting-protobuf': 4.1.0
'@apollo/utils.fetcher': 2.0.1
'@apollo/utils.keyvaluecache': 2.1.1
'@apollo/utils.logger': 2.0.1
graphql: 16.0.0
dev: false
/@apollo/server@4.7.3(graphql@16.0.0):
resolution: {integrity: sha512-eFCzHHheNHfVALjYJjIghV7kSgO49ZFr8+4g2CKOLShoDmLplQ3blyL5NsONyC0Z5l8kqm62V8yXGoxy2eNGfw==}
engines: {node: '>=14.16.0'}
peerDependencies:
graphql: ^16.6.0
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@apollo/cache-control-types': 1.0.2(graphql@16.0.0)
'@apollo/server-gateway-interface': 1.1.0(graphql@16.0.0)
'@apollo/usage-reporting-protobuf': 4.1.0
'@apollo/utils.createhash': 2.0.1
'@apollo/utils.fetcher': 2.0.1
'@apollo/utils.isnodelike': 2.0.1
'@apollo/utils.keyvaluecache': 2.1.1
'@apollo/utils.logger': 2.0.1
'@apollo/utils.usagereporting': 2.1.0(graphql@16.0.0)
'@apollo/utils.withrequired': 2.0.1
'@graphql-tools/schema': 9.0.19(graphql@16.0.0)
'@josephg/resolvable': 1.0.1
'@types/express': 4.17.17
'@types/express-serve-static-core': 4.17.33
'@types/node-fetch': 2.6.4
async-retry: 1.3.3
body-parser: 1.20.2
cors: 2.8.5
express: 4.18.2
graphql: 16.0.0
loglevel: 1.8.1
lru-cache: 7.18.3
negotiator: 0.6.3
node-abort-controller: 3.1.1
node-fetch: 2.6.9
uuid: 9.0.0
whatwg-mimetype: 3.0.0
transitivePeerDependencies:
- encoding
- supports-color
dev: false
/@apollo/usage-reporting-protobuf@4.1.0:
resolution: {integrity: sha512-hXouMuw5pQVkzi8dgMybmr6Y11+eRmMQVoB5TF0HyTwAg9SOq/v3OCuiYqcVUKdBcskU9Msp+XvjAk0GKpWCwQ==}
dependencies:
'@apollo/protobufjs': 1.2.7
dev: false
/@apollo/utils.createhash@2.0.1:
resolution: {integrity: sha512-fQO4/ZOP8LcXWvMNhKiee+2KuKyqIcfHrICA+M4lj/h/Lh1H10ICcUtk6N/chnEo5HXu0yejg64wshdaiFitJg==}
engines: {node: '>=14'}
dependencies:
'@apollo/utils.isnodelike': 2.0.1
sha.js: 2.4.11
dev: false
/@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.0.0):
resolution: {integrity: sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
peerDependenciesMeta:
graphql:
optional: true
dependencies:
graphql: 16.0.0
dev: false
/@apollo/utils.fetcher@2.0.1:
resolution: {integrity: sha512-jvvon885hEyWXd4H6zpWeN3tl88QcWnHp5gWF5OPF34uhvoR+DFqcNxs9vrRaBBSY3qda3Qe0bdud7tz2zGx1A==}
engines: {node: '>=14'}
dev: false
/@apollo/utils.isnodelike@2.0.1:
resolution: {integrity: sha512-w41XyepR+jBEuVpoRM715N2ZD0xMD413UiJx8w5xnAZD2ZkSJnMJBoIzauK83kJpSgNuR6ywbV29jG9NmxjK0Q==}
engines: {node: '>=14'}
dev: false
/@apollo/utils.keyvaluecache@2.1.1:
resolution: {integrity: sha512-qVo5PvUUMD8oB9oYvq4ViCjYAMWnZ5zZwEjNF37L2m1u528x5mueMlU+Cr1UinupCgdB78g+egA1G98rbJ03Vw==}
engines: {node: '>=14'}
dependencies:
'@apollo/utils.logger': 2.0.1
lru-cache: 7.18.3
dev: false
/@apollo/utils.logger@2.0.1:
resolution: {integrity: sha512-YuplwLHaHf1oviidB7MxnCXAdHp3IqYV8n0momZ3JfLniae92eYqMIx+j5qJFX6WKJPs6q7bczmV4lXIsTu5Pg==}
engines: {node: '>=14'}
dev: false
/@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.0.0):
resolution: {integrity: sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
peerDependenciesMeta:
graphql:
optional: true
dependencies:
graphql: 16.0.0
dev: false
/@apollo/utils.removealiases@2.0.1(graphql@16.0.0):
resolution: {integrity: sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
peerDependenciesMeta:
graphql:
optional: true
dependencies:
graphql: 16.0.0
dev: false
/@apollo/utils.sortast@2.0.1(graphql@16.0.0):
resolution: {integrity: sha512-eciIavsWpJ09za1pn37wpsCGrQNXUhM0TktnZmHwO+Zy9O4fu/WdB4+5BvVhFiZYOXvfjzJUcc+hsIV8RUOtMw==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
peerDependenciesMeta:
graphql:
optional: true
dependencies:
graphql: 16.0.0
lodash.sortby: 4.7.0
dev: false
/@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.0.0):
resolution: {integrity: sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
peerDependenciesMeta:
graphql:
optional: true
dependencies:
graphql: 16.0.0
dev: false
/@apollo/utils.usagereporting@2.1.0(graphql@16.0.0):
resolution: {integrity: sha512-LPSlBrn+S17oBy5eWkrRSGb98sWmnEzo3DPTZgp8IQc8sJe0prDgDuppGq4NeQlpoqEHz0hQeYHAOA0Z3aQsxQ==}
engines: {node: '>=14'}
peerDependencies:
graphql: 14.x || 15.x || 16.x
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@apollo/usage-reporting-protobuf': 4.1.0
'@apollo/utils.dropunuseddefinitions': 2.0.1(graphql@16.0.0)
'@apollo/utils.printwithreducedwhitespace': 2.0.1(graphql@16.0.0)
'@apollo/utils.removealiases': 2.0.1(graphql@16.0.0)
'@apollo/utils.sortast': 2.0.1(graphql@16.0.0)
'@apollo/utils.stripsensitiveliterals': 2.0.1(graphql@16.0.0)
graphql: 16.0.0
dev: false
/@apollo/utils.withrequired@2.0.1:
resolution: {integrity: sha512-YBDiuAX9i1lLc6GeTy1m7DGLFn/gMnvXqlalOIMjM7DeOgIacEjjfwPqb0M1CQ2v11HhR15d1NmxJoRCfrNqcA==}
engines: {node: '>=14'}
dev: false
/@apollographql/apollo-tools@0.5.4(graphql@16.0.0):
resolution: {integrity: sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==}
engines: {node: '>=8', npm: '>=6'}
@@ -2063,6 +2286,91 @@ packages:
purgecss: 2.3.0
dev: true
/@graphql-tools/merge@8.4.2(graphql@16.0.0):
resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@graphql-tools/utils': 9.2.1(graphql@16.0.0)
graphql: 16.0.0
tslib: 2.5.0
dev: false
/@graphql-tools/merge@9.0.0(graphql@16.0.0):
resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@graphql-tools/utils': 10.0.1(graphql@16.0.0)
graphql: 16.0.0
tslib: 2.5.0
dev: false
/@graphql-tools/schema@10.0.0(graphql@16.0.0):
resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@graphql-tools/merge': 9.0.0(graphql@16.0.0)
'@graphql-tools/utils': 10.0.1(graphql@16.0.0)
graphql: 16.0.0
tslib: 2.5.0
value-or-promise: 1.0.12
dev: false
/@graphql-tools/schema@9.0.19(graphql@16.0.0):
resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@graphql-tools/merge': 8.4.2(graphql@16.0.0)
'@graphql-tools/utils': 9.2.1(graphql@16.0.0)
graphql: 16.0.0
tslib: 2.5.0
value-or-promise: 1.0.12
dev: false
/@graphql-tools/utils@10.0.1(graphql@16.0.0):
resolution: {integrity: sha512-i1FozbDGHgdsFA47V/JvQZ0FE8NAy0Eiz7HGCJO2MkNdZAKNnwei66gOq0JWYVFztwpwbVQ09GkKhq7Kjcq5Cw==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@graphql-typed-document-node/core': 3.1.1(graphql@16.0.0)
graphql: 16.0.0
tslib: 2.5.0
dev: false
/@graphql-tools/utils@9.2.1(graphql@16.0.0):
resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
peerDependenciesMeta:
graphql:
optional: true
dependencies:
'@graphql-typed-document-node/core': 3.1.1(graphql@16.0.0)
graphql: 16.0.0
tslib: 2.5.0
dev: false
/@graphql-typed-document-node/core@3.1.1(graphql@16.0.0):
resolution: {integrity: sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==}
peerDependencies:
@@ -2645,6 +2953,13 @@ packages:
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
dev: true
/@types/node-fetch@2.6.4:
resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==}
dependencies:
'@types/node': 18.14.0
form-data: 3.0.1
dev: false
/@types/node@10.17.60:
resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
dev: false
@@ -2758,7 +3073,7 @@ packages:
resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
requiresBuild: true
dependencies:
'@types/node': 14.18.36
'@types/node': 18.14.0
dev: true
optional: true
@@ -3082,6 +3397,21 @@ packages:
- eslint
dev: true
/@vue/cli-plugin-e2e-cypress@5.0.8(@vue/cli-service@5.0.8)(cypress@12.14.0)(eslint@7.32.0):
resolution: {integrity: sha512-BasFHQSqDAmFvueaqk/d+s1hJnW0OtWEIgmHZRXg8hYkZJF4pu7kz66DmEAZl6DypfyoSxqwN7WHILYDuKAaEw==}
peerDependencies:
'@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0
cypress: '*'
dependencies:
'@vue/cli-service': 5.0.8(@babel/core@7.21.0)(esbuild@0.8.57)(stylus-loader@3.0.2)(vue@3.2.47)
'@vue/cli-shared-utils': 5.0.8
cypress: 12.14.0
eslint-plugin-cypress: 2.12.1(eslint@7.32.0)
transitivePeerDependencies:
- encoding
- eslint
dev: true
/@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8):
resolution: {integrity: sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==}
peerDependencies:
@@ -4092,7 +4422,7 @@ packages:
accepts: 1.3.8
apollo-server-core: 2.26.1(graphql@16.0.0)
apollo-server-types: 0.10.0(graphql@16.0.0)
body-parser: 1.20.1
body-parser: 1.20.2
cors: 2.8.5
express: 4.18.2
graphql: 16.0.0
@@ -4330,7 +4660,6 @@ packages:
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
dev: true
/at-least-node@1.0.0:
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
@@ -4608,6 +4937,26 @@ packages:
transitivePeerDependencies:
- supports-color
/body-parser@1.20.2:
resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
dependencies:
bytes: 3.1.2
content-type: 1.0.5
debug: 2.6.9(supports-color@5.5.0)
depd: 2.0.0
destroy: 1.2.0
http-errors: 2.0.0
iconv-lite: 0.4.24
on-finished: 2.4.1
qs: 6.11.0
raw-body: 2.5.2
type-is: 1.6.18
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
dev: false
/bonjour-service@1.1.0:
resolution: {integrity: sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==}
dependencies:
@@ -5096,7 +5445,6 @@ packages:
engines: {node: '>= 0.8'}
dependencies:
delayed-stream: 1.0.0
dev: true
/commander@2.13.0:
resolution: {integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==}
@@ -5110,6 +5458,11 @@ packages:
engines: {node: '>= 6'}
dev: true
/commander@6.2.1:
resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
engines: {node: '>= 6'}
dev: true
/commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'}
@@ -5911,6 +6264,56 @@ packages:
yauzl: 2.10.0
dev: true
/cypress@12.14.0:
resolution: {integrity: sha512-HiLIXKXZaIT1RT7sw1sVPt+qKtis3uYNm6KwC4qoYjabwLKaqZlyS/P+uVvvlBNcHIwL/BC6nQZajpbUd7hOgQ==}
engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0}
hasBin: true
requiresBuild: true
dependencies:
'@cypress/request': 2.88.11
'@cypress/xvfb': 1.2.4(supports-color@8.1.1)
'@types/node': 14.18.36
'@types/sinonjs__fake-timers': 8.1.1
'@types/sizzle': 2.3.3
arch: 2.2.0
blob-util: 2.0.2
bluebird: 3.7.2
buffer: 5.7.1
cachedir: 2.3.0
chalk: 4.1.2
check-more-types: 2.24.0
cli-cursor: 3.1.0
cli-table3: 0.6.3
commander: 6.2.1
common-tags: 1.8.2
dayjs: 1.11.7
debug: 4.3.4(supports-color@8.1.1)
enquirer: 2.3.6
eventemitter2: 6.4.7
execa: 4.1.0
executable: 4.1.1
extract-zip: 2.0.1(supports-color@8.1.1)
figures: 3.2.0
fs-extra: 9.1.0
getos: 3.2.1
is-ci: 3.0.1
is-installed-globally: 0.4.0
lazy-ass: 1.6.0
listr2: 3.14.0(enquirer@2.3.6)
lodash: 4.17.21
log-symbols: 4.1.0
minimist: 1.2.8
ospath: 1.2.2
pretty-bytes: 5.6.0
proxy-from-env: 1.0.0
request-progress: 3.0.0
semver: 7.3.8
supports-color: 8.1.1
tmp: 0.2.1
untildify: 4.0.0
yauzl: 2.10.0
dev: true
/dargs@7.0.0:
resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
engines: {node: '>=8'}
@@ -6089,7 +6492,6 @@ packages:
/delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
dev: true
/depd@1.1.2:
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
@@ -7476,6 +7878,15 @@ packages:
mime-types: 2.1.35
dev: true
/form-data@3.0.1:
resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==}
engines: {node: '>= 6'}
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.35
dev: false
/form-data@4.0.0:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
engines: {node: '>= 6'}
@@ -7847,6 +8258,18 @@ packages:
iterall: 1.3.0
dev: false
/graphql-subscriptions@2.0.0(graphql@16.0.0):
resolution: {integrity: sha512-s6k2b8mmt9gF9pEfkxsaO1lTxaySfKoEJzEfmwguBbQ//Oq23hIXCfR1hm4kdh5hnR20RdwB+s3BCb+0duHSZA==}
peerDependencies:
graphql: ^15.7.2 || ^16.0.0
peerDependenciesMeta:
graphql:
optional: true
dependencies:
graphql: 16.0.0
iterall: 1.3.0
dev: false
/graphql-tag@2.12.6(graphql@16.0.0):
resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==}
engines: {node: '>=10'}
@@ -7887,6 +8310,17 @@ packages:
graphql: 16.0.0
dev: false
/graphql-ws@5.13.1(graphql@16.0.0):
resolution: {integrity: sha512-eiX7ES/ZQr0q7hSM5UBOEIFfaAUmAY9/CSDyAnsETuybByU7l/v46drRg9DQoTvVABEHp3QnrvwgTRMhqy7zxQ==}
engines: {node: '>=10'}
peerDependencies:
graphql: '>=0.11 <=16'
peerDependenciesMeta:
graphql:
optional: true
dependencies:
graphql: 16.0.0
/graphql@16.0.0:
resolution: {integrity: sha512-n9NxoRfwnpYBZB/WJ7L166gyrShuZ8qYgVaX8oxVyELcJfAwkvwPt6WlYIl90WRlzqDjaNWvLmNOSnKs5llZWQ==}
engines: {node: ^12.22.0 || ^14.16.0 || >=16.0.0}
@@ -9674,6 +10108,11 @@ packages:
dependencies:
yallist: 4.0.0
/lru-cache@7.18.3:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
dev: false
/magic-string@0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
@@ -10024,6 +10463,10 @@ packages:
tslib: 2.5.0
dev: true
/node-abort-controller@3.1.1:
resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
dev: false
/node-emoji@1.11.0:
resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==}
dependencies:
@@ -11269,6 +11712,16 @@ packages:
iconv-lite: 0.4.24
unpipe: 1.0.0
/raw-body@2.5.2:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
engines: {node: '>= 0.8'}
dependencies:
bytes: 3.1.2
http-errors: 2.0.0
iconv-lite: 0.4.24
unpipe: 1.0.0
dev: false
/rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -13154,6 +13607,11 @@ packages:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
/uuid@9.0.0:
resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
hasBin: true
dev: false
/v8-compile-cache@2.3.0:
resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
dev: true
@@ -13165,6 +13623,11 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
/value-or-promise@1.0.12:
resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==}
engines: {node: '>=12'}
dev: false
/vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
@@ -13580,7 +14043,7 @@ packages:
spdy: 4.0.2
webpack: 5.75.0(esbuild@0.8.57)
webpack-dev-middleware: 5.3.3(webpack@5.75.0)
ws: 8.12.1
ws: 8.13.0
transitivePeerDependencies:
- bufferutil
- debug
@@ -13673,6 +14136,11 @@ packages:
resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==}
dev: true
/whatwg-mimetype@3.0.0:
resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
engines: {node: '>=12'}
dev: false
/whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
dependencies:
@@ -13839,8 +14307,8 @@ packages:
utf-8-validate:
optional: true
/ws@8.12.1:
resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==}
/ws@8.13.0:
resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -13850,7 +14318,6 @@ packages:
optional: true
utf-8-validate:
optional: true
dev: true
/xdg-basedir@3.0.0:
resolution: {integrity: sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==}