From 13bfbbea981b97b2abe4e6d1a9aceff5bd8c6b5a Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Mon, 12 Jun 2023 11:55:02 +0200 Subject: [PATCH] test: update server --- .../test-e2e-composable-vue3/package.json | 20 +- .../{server.js => server.mjs} | 107 +++- .../src/components/ChannelView.vue | 67 +-- pnpm-lock.yaml | 513 +++++++++++++++++- 4 files changed, 630 insertions(+), 77 deletions(-) rename packages/test-e2e-composable-vue3/{server.js => server.mjs} (51%) diff --git a/packages/test-e2e-composable-vue3/package.json b/packages/test-e2e-composable-vue3/package.json index 9ecda44..0fe95cd 100644 --- a/packages/test-e2e-composable-vue3/package.json +++ b/packages/test-e2e-composable-vue3/package.json @@ -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" diff --git a/packages/test-e2e-composable-vue3/server.js b/packages/test-e2e-composable-vue3/server.mjs similarity index 51% rename from packages/test-e2e-composable-vue3/server.js rename to packages/test-e2e-composable-vue3/server.mjs index 49380dc..15795b6 100644 --- a/packages/test-e2e-composable-vue3/server.js +++ b/packages/test-e2e-composable-vue3/server.mjs @@ -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') diff --git a/packages/test-e2e-composable-vue3/src/components/ChannelView.vue b/packages/test-e2e-composable-vue3/src/components/ChannelView.vue index ea22368..afbf437 100644 --- a/packages/test-e2e-composable-vue3/src/components/ChannelView.vue +++ b/packages/test-e2e-composable-vue3/src/components/ChannelView.vue @@ -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({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa012d2..5048560 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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==}