diff --git a/package-lock.json b/package-lock.json index f7217c2433..6389252a71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "2.414.1", "license": "UNLICENSED", "dependencies": { + "@apollo/client": "^3.6.9", "@babel/eslint-parser": "^7.18.2", "@babel/polyfill": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -25,12 +26,6 @@ "@sentry/vue": "^6.19.6", "@vue/composition-api": "^1.4.6", "algoliasearch": "^3.34.0", - "apollo-cache-inmemory": "^1.6.6", - "apollo-client": "2.6.10", - "apollo-link": "^1.2.14", - "apollo-link-batch-http": "^1.2.14", - "apollo-link-context": "^1.0.20", - "apollo-link-error": "^1.1.13", "apollo-server-express": "^2.18.2", "auth0-js": "^9.19.2", "body-parser": "^1.19.0", @@ -58,7 +53,6 @@ "fuse.js": "^5.2.3", "get-user-locale": "^1.4.0", "graphql": "^15.4.0", - "graphql-tag": "^2.12.6", "gsap": "^3.5.1", "helmet": "^4.6.0", "instantsearch.js": "^3.6.0", @@ -190,6 +184,105 @@ "npm": ">= 6.0.0" } }, + "node_modules/@apollo/client": { + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.6.9.tgz", + "integrity": "sha512-Y1yu8qa2YeaCUBVuw08x8NHenFi0sw2I3KCu7Kw9mDSu86HmmtHJkCAifKVrN2iPgDTW/BbP3EpSV8/EQCcxZA==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@wry/context": "^0.6.0", + "@wry/equality": "^0.5.0", + "@wry/trie": "^0.3.0", + "graphql-tag": "^2.12.6", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.16.1", + "prop-types": "^15.7.2", + "symbol-observable": "^4.0.0", + "ts-invariant": "^0.10.3", + "tslib": "^2.3.0", + "zen-observable-ts": "^1.2.5" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0", + "graphql-ws": "^5.5.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" + }, + "peerDependenciesMeta": { + "graphql-ws": { + "optional": true + }, + "react": { + "optional": true + }, + "subscriptions-transport-ws": { + "optional": true + } + } + }, + "node_modules/@apollo/client/node_modules/@wry/context": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.6.1.tgz", + "integrity": "sha512-LOmVnY1iTU2D8tv4Xf6MVMZZ+juIJ87Kt/plMijjN20NMAXGmH4u8bS1t0uT74cZ5gwpocYueV58YwyI8y+GKw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@apollo/client/node_modules/@wry/equality": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.2.tgz", + "integrity": "sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@apollo/client/node_modules/optimism": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.16.1.tgz", + "integrity": "sha512-64i+Uw3otrndfq5kaoGNoY7pvOhSsjFEN4bdEFh80MWVk/dbgJfMv7VFDeCT8LxNAlEVhQmdVEbfE7X2nWNIIg==", + "dependencies": { + "@wry/context": "^0.6.0", + "@wry/trie": "^0.3.0" + } + }, + "node_modules/@apollo/client/node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@apollo/client/node_modules/ts-invariant": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", + "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@apollo/client/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/@apollo/client/node_modules/zen-observable-ts": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", + "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", + "dependencies": { + "zen-observable": "0.8.15" + } + }, "node_modules/@apollo/protobufjs": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.5.tgz", @@ -3078,6 +3171,14 @@ "graphql": "^14.0.0 || ^15.0.0" } }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", + "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/@hapi/hoek": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.1.tgz", @@ -8359,11 +8460,6 @@ "@types/node": "*" } }, - "node_modules/@types/zen-observable": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.2.tgz", - "integrity": "sha512-HrCIVMLjE1MOozVoD86622S7aunluLb2PJdPfb3nYiEtohm8mIB/vyv0Fd37AdeMFrTUQXEunw78YloMA3Qilg==" - }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz", @@ -9042,20 +9138,6 @@ } } }, - "node_modules/@wry/context": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.4.4.tgz", - "integrity": "sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag==", - "dependencies": { - "@types/node": ">=6", - "tslib": "^1.9.3" - } - }, - "node_modules/@wry/context/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@wry/equality": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", @@ -9069,6 +9151,22 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/@wry/trie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.3.1.tgz", + "integrity": "sha512-WwB53ikYudh9pIorgxrkHKrQZcCqNM/Q/bDzZBffEaGUKGuHrRb3zZUT9Sh2qw9yogC7SsdRmQ1ER0pqvd3bfw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/trie/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -9466,18 +9564,6 @@ "node": ">= 8" } }, - "node_modules/apollo-cache": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.5.tgz", - "integrity": "sha512-1XoDy8kJnyWY/i/+gLTEbYLnoiVtS8y7ikBr/IfmML4Qb+CM7dEEbIUOjnY716WqmZ/UpXIxTfJsY7rMcqiCXA==", - "dependencies": { - "apollo-utilities": "^1.3.4", - "tslib": "^1.10.0" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" - } - }, "node_modules/apollo-cache-control": { "version": "0.11.6", "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.11.6.tgz", @@ -9493,54 +9579,6 @@ "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" } }, - "node_modules/apollo-cache-inmemory": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.6.tgz", - "integrity": "sha512-L8pToTW/+Xru2FFAhkZ1OA9q4V4nuvfoPecBM34DecAugUZEBhI2Hmpgnzq2hTKZ60LAMrlqiASm0aqAY6F8/A==", - "dependencies": { - "apollo-cache": "^1.3.5", - "apollo-utilities": "^1.3.4", - "optimism": "^0.10.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.10.0" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" - } - }, - "node_modules/apollo-cache-inmemory/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/apollo-cache/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/apollo-client": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.10.tgz", - "integrity": "sha512-jiPlMTN6/5CjZpJOkGeUV0mb4zxx33uXWdj/xQCfAMkuNAC3HN7CvYDyMHHEzmcQ5GV12LszWoQ/VlxET24CtA==", - "dependencies": { - "@types/zen-observable": "^0.8.0", - "apollo-cache": "1.3.5", - "apollo-link": "^1.0.0", - "apollo-utilities": "1.3.4", - "symbol-observable": "^1.0.2", - "ts-invariant": "^0.4.0", - "tslib": "^1.10.0", - "zen-observable": "^0.8.0" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" - } - }, - "node_modules/apollo-client/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/apollo-datasource": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.7.3.tgz", @@ -9628,86 +9666,6 @@ "graphql": "^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0" } }, - "node_modules/apollo-link-batch": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/apollo-link-batch/-/apollo-link-batch-1.1.15.tgz", - "integrity": "sha512-XbfQI/FNxJW9RSgJTfAl7RDFxxN77425yDtT7YgsImH4/2NQ+U4SWN6thWE3ZU1Wf7ktXd+XFa3KkenBRTybOQ==", - "dependencies": { - "apollo-link": "^1.2.14", - "tslib": "^1.9.3" - } - }, - "node_modules/apollo-link-batch-http": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/apollo-link-batch-http/-/apollo-link-batch-http-1.2.14.tgz", - "integrity": "sha512-LFUmfV3OXR3Er+zSgFxPY/qUe4Wyx0HS1euJZ36RCCaDvPegr24C9OQgKFScHy91VbjRTtFUyjXXVq1xFGPMvQ==", - "dependencies": { - "apollo-link": "^1.2.14", - "apollo-link-batch": "^1.1.15", - "apollo-link-http-common": "^0.2.16", - "tslib": "^1.9.3" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0" - } - }, - "node_modules/apollo-link-batch-http/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/apollo-link-batch/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/apollo-link-context": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/apollo-link-context/-/apollo-link-context-1.0.20.tgz", - "integrity": "sha512-MLLPYvhzNb8AglNsk2NcL9AvhO/Vc9hn2ZZuegbhRHGet3oGr0YH9s30NS9+ieoM0sGT11p7oZ6oAILM/kiRBA==", - "dependencies": { - "apollo-link": "^1.2.14", - "tslib": "^1.9.3" - } - }, - "node_modules/apollo-link-context/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/apollo-link-error": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.13.tgz", - "integrity": "sha512-jAZOOahJU6bwSqb2ZyskEK1XdgUY9nkmeclCrW7Gddh1uasHVqmoYc4CKdb0/H0Y1J9lvaXKle2Wsw/Zx1AyUg==", - "dependencies": { - "apollo-link": "^1.2.14", - "apollo-link-http-common": "^0.2.16", - "tslib": "^1.9.3" - } - }, - "node_modules/apollo-link-error/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/apollo-link-http-common": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz", - "integrity": "sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg==", - "dependencies": { - "apollo-link": "^1.2.14", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3" - }, - "peerDependencies": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" - } - }, - "node_modules/apollo-link-http-common/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/apollo-link/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -13265,9 +13223,9 @@ } }, "node_modules/cosmiconfig-typescript-loader/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -13302,9 +13260,9 @@ } }, "node_modules/cosmiconfig-typescript-loader/node_modules/ts-node": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", - "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -15474,9 +15432,9 @@ } }, "node_modules/dompurify": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.9.tgz", - "integrity": "sha512-3zOnuTwup4lPV/GfGS6UzG4ub9nhSYagR/5tB3AvDEwqyy5dtyCM2dVjwGDCnrPerXifBKTYh/UWCGKK7ydhhw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==" }, "node_modules/domutils": { "version": "1.7.0", @@ -20351,6 +20309,32 @@ "node": "*" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -28129,14 +28113,6 @@ "node": ">=0.10" } }, - "node_modules/optimism": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.10.3.tgz", - "integrity": "sha512-9A5pqGoQk49H6Vhjb9kPgAeeECfUDF6aIICbMDL23kDLStBn1MWk3YvcZ4xWF9CsSf6XEgvRLkXy4xof/56vVw==", - "dependencies": { - "@wry/context": "^0.4.0" - } - }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -31105,7 +31081,7 @@ "version": "16.14.0", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "dev": true, + "devOptional": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -35077,9 +35053,9 @@ } }, "node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dependencies": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -35206,9 +35182,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -35880,9 +35856,9 @@ } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", "devOptional": true, "bin": { "tsc": "bin/tsc", @@ -38140,15 +38116,14 @@ }, "node_modules/webpack-svgstore-plugin": { "version": "4.1.0", - "resolved": "git+ssh://git@github.com/kiva/webpack-svgstore-plugin.git#8970a7297567faf9114b7324fc04d6b42ae51a52", - "integrity": "sha512-VuHwb9PfeQeVQuhUSs0E+AOI7BnIipH+5qHBzqdeY8fIsWqnbacNZ3oJdbS3/YFav2Cz4IUgLTH9xbKMpa5kTw==", + "resolved": "git+ssh://git@github.com/kiva/webpack-svgstore-plugin.git#24b634ba5c34f1386a9c660180c9ad8c915c622f", "dev": true, "license": "MIT", "dependencies": { "async": "2.1.4", "globby": "6.1.0", "htmlparser2": "3.9.2", - "lodash": "4.17.19", + "lodash": "4.17.2", "pug": "2.0.0-beta6", "svgo": "1.3.2" } @@ -38308,9 +38283,9 @@ } }, "node_modules/webpack-svgstore-plugin/node_modules/lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.2.tgz", + "integrity": "sha1-NKMFW6vgTOQkZ7YH1wAHLH/2v0I=", "dev": true }, "node_modules/webpack-svgstore-plugin/node_modules/pug": { @@ -39711,6 +39686,78 @@ } }, "dependencies": { + "@apollo/client": { + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.6.9.tgz", + "integrity": "sha512-Y1yu8qa2YeaCUBVuw08x8NHenFi0sw2I3KCu7Kw9mDSu86HmmtHJkCAifKVrN2iPgDTW/BbP3EpSV8/EQCcxZA==", + "requires": { + "@graphql-typed-document-node/core": "^3.1.1", + "@wry/context": "^0.6.0", + "@wry/equality": "^0.5.0", + "@wry/trie": "^0.3.0", + "graphql-tag": "^2.12.6", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.16.1", + "prop-types": "^15.7.2", + "symbol-observable": "^4.0.0", + "ts-invariant": "^0.10.3", + "tslib": "^2.3.0", + "zen-observable-ts": "^1.2.5" + }, + "dependencies": { + "@wry/context": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.6.1.tgz", + "integrity": "sha512-LOmVnY1iTU2D8tv4Xf6MVMZZ+juIJ87Kt/plMijjN20NMAXGmH4u8bS1t0uT74cZ5gwpocYueV58YwyI8y+GKw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@wry/equality": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.2.tgz", + "integrity": "sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "optimism": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.16.1.tgz", + "integrity": "sha512-64i+Uw3otrndfq5kaoGNoY7pvOhSsjFEN4bdEFh80MWVk/dbgJfMv7VFDeCT8LxNAlEVhQmdVEbfE7X2nWNIIg==", + "requires": { + "@wry/context": "^0.6.0", + "@wry/trie": "^0.3.0" + } + }, + "symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==" + }, + "ts-invariant": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", + "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "requires": { + "tslib": "^2.1.0" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "zen-observable-ts": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", + "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", + "requires": { + "zen-observable": "0.8.15" + } + } + } + }, "@apollo/protobufjs": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.5.tgz", @@ -41935,6 +41982,12 @@ "tslib": "~2.1.0" } }, + "@graphql-typed-document-node/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", + "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", + "requires": {} + }, "@hapi/hoek": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.1.tgz", @@ -45993,11 +46046,6 @@ "@types/node": "*" } }, - "@types/zen-observable": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.2.tgz", - "integrity": "sha512-HrCIVMLjE1MOozVoD86622S7aunluLb2PJdPfb3nYiEtohm8mIB/vyv0Fd37AdeMFrTUQXEunw78YloMA3Qilg==" - }, "@typescript-eslint/experimental-utils": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz", @@ -46529,12 +46577,11 @@ "dev": true, "requires": {} }, - "@wry/context": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.4.4.tgz", - "integrity": "sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag==", + "@wry/equality": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", + "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==", "requires": { - "@types/node": ">=6", "tslib": "^1.9.3" }, "dependencies": { @@ -46545,18 +46592,18 @@ } } }, - "@wry/equality": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", - "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==", + "@wry/trie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.3.1.tgz", + "integrity": "sha512-WwB53ikYudh9pIorgxrkHKrQZcCqNM/Q/bDzZBffEaGUKGuHrRb3zZUT9Sh2qw9yogC7SsdRmQ1ER0pqvd3bfw==", "requires": { - "tslib": "^1.9.3" + "tslib": "^2.3.0" }, "dependencies": { "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" } } }, @@ -46868,22 +46915,6 @@ "picomatch": "^2.0.4" } }, - "apollo-cache": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.5.tgz", - "integrity": "sha512-1XoDy8kJnyWY/i/+gLTEbYLnoiVtS8y7ikBr/IfmML4Qb+CM7dEEbIUOjnY716WqmZ/UpXIxTfJsY7rMcqiCXA==", - "requires": { - "apollo-utilities": "^1.3.4", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, "apollo-cache-control": { "version": "0.11.6", "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.11.6.tgz", @@ -46893,47 +46924,6 @@ "apollo-server-plugin-base": "^0.10.4" } }, - "apollo-cache-inmemory": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.6.tgz", - "integrity": "sha512-L8pToTW/+Xru2FFAhkZ1OA9q4V4nuvfoPecBM34DecAugUZEBhI2Hmpgnzq2hTKZ60LAMrlqiASm0aqAY6F8/A==", - "requires": { - "apollo-cache": "^1.3.5", - "apollo-utilities": "^1.3.4", - "optimism": "^0.10.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "apollo-client": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.10.tgz", - "integrity": "sha512-jiPlMTN6/5CjZpJOkGeUV0mb4zxx33uXWdj/xQCfAMkuNAC3HN7CvYDyMHHEzmcQ5GV12LszWoQ/VlxET24CtA==", - "requires": { - "@types/zen-observable": "^0.8.0", - "apollo-cache": "1.3.5", - "apollo-link": "^1.0.0", - "apollo-utilities": "1.3.4", - "symbol-observable": "^1.0.2", - "ts-invariant": "^0.4.0", - "tslib": "^1.10.0", - "zen-observable": "^0.8.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, "apollo-datasource": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.7.3.tgz", @@ -47007,90 +46997,6 @@ } } }, - "apollo-link-batch": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/apollo-link-batch/-/apollo-link-batch-1.1.15.tgz", - "integrity": "sha512-XbfQI/FNxJW9RSgJTfAl7RDFxxN77425yDtT7YgsImH4/2NQ+U4SWN6thWE3ZU1Wf7ktXd+XFa3KkenBRTybOQ==", - "requires": { - "apollo-link": "^1.2.14", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "apollo-link-batch-http": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/apollo-link-batch-http/-/apollo-link-batch-http-1.2.14.tgz", - "integrity": "sha512-LFUmfV3OXR3Er+zSgFxPY/qUe4Wyx0HS1euJZ36RCCaDvPegr24C9OQgKFScHy91VbjRTtFUyjXXVq1xFGPMvQ==", - "requires": { - "apollo-link": "^1.2.14", - "apollo-link-batch": "^1.1.15", - "apollo-link-http-common": "^0.2.16", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "apollo-link-context": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/apollo-link-context/-/apollo-link-context-1.0.20.tgz", - "integrity": "sha512-MLLPYvhzNb8AglNsk2NcL9AvhO/Vc9hn2ZZuegbhRHGet3oGr0YH9s30NS9+ieoM0sGT11p7oZ6oAILM/kiRBA==", - "requires": { - "apollo-link": "^1.2.14", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "apollo-link-error": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.13.tgz", - "integrity": "sha512-jAZOOahJU6bwSqb2ZyskEK1XdgUY9nkmeclCrW7Gddh1uasHVqmoYc4CKdb0/H0Y1J9lvaXKle2Wsw/Zx1AyUg==", - "requires": { - "apollo-link": "^1.2.14", - "apollo-link-http-common": "^0.2.16", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "apollo-link-http-common": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz", - "integrity": "sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg==", - "requires": { - "apollo-link": "^1.2.14", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, "apollo-reporting-protobuf": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.2.tgz", @@ -49923,9 +49829,9 @@ }, "dependencies": { "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, "acorn-walk": { @@ -49948,9 +49854,9 @@ } }, "ts-node": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", - "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -51653,9 +51559,9 @@ } }, "dompurify": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.9.tgz", - "integrity": "sha512-3zOnuTwup4lPV/GfGS6UzG4ub9nhSYagR/5tB3AvDEwqyy5dtyCM2dVjwGDCnrPerXifBKTYh/UWCGKK7ydhhw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==" }, "domutils": { "version": "1.7.0", @@ -55502,6 +55408,31 @@ } } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -61594,14 +61525,6 @@ "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.5.tgz", "integrity": "sha512-XLKtEfHxqrWyF1fzxznsv78w3csW41ucHnjiKnfzZLD5FN8UBDZZL1i4q0FR29zjxXhm+2Hop+5Vr/b8tKIvEg==" }, - "optimism": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.10.3.tgz", - "integrity": "sha512-9A5pqGoQk49H6Vhjb9kPgAeeECfUDF6aIICbMDL23kDLStBn1MWk3YvcZ4xWF9CsSf6XEgvRLkXy4xof/56vVw==", - "requires": { - "@wry/context": "^0.4.0" - } - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -63839,7 +63762,7 @@ "version": "16.14.0", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "dev": true, + "devOptional": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -66954,9 +66877,9 @@ } }, "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -67048,9 +66971,9 @@ "dev": true }, "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -67566,9 +67489,9 @@ } }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", "devOptional": true }, "uglify-js": { @@ -69724,15 +69647,14 @@ } }, "webpack-svgstore-plugin": { - "version": "git+ssh://git@github.com/kiva/webpack-svgstore-plugin.git#8970a7297567faf9114b7324fc04d6b42ae51a52", - "integrity": "sha512-VuHwb9PfeQeVQuhUSs0E+AOI7BnIipH+5qHBzqdeY8fIsWqnbacNZ3oJdbS3/YFav2Cz4IUgLTH9xbKMpa5kTw==", + "version": "git+ssh://git@github.com/kiva/webpack-svgstore-plugin.git#24b634ba5c34f1386a9c660180c9ad8c915c622f", "dev": true, "from": "webpack-svgstore-plugin@kiva/webpack-svgstore-plugin#develop", "requires": { "async": "2.1.4", "globby": "6.1.0", "htmlparser2": "3.9.2", - "lodash": "4.17.19", + "lodash": "4.17.2", "pug": "2.0.0-beta6", "svgo": "1.3.2" }, @@ -69867,9 +69789,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.2.tgz", + "integrity": "sha1-NKMFW6vgTOQkZ7YH1wAHLH/2v0I=", "dev": true }, "pug": { diff --git a/package.json b/package.json index f5be7df6d6..445b52576c 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "deploy-storybook": "storybook-to-ghpages" }, "dependencies": { + "@apollo/client": "^3.6.9", "@babel/eslint-parser": "^7.18.2", "@babel/polyfill": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -55,12 +56,6 @@ "@sentry/vue": "^6.19.6", "@vue/composition-api": "^1.4.6", "algoliasearch": "^3.34.0", - "apollo-cache-inmemory": "^1.6.6", - "apollo-client": "2.6.10", - "apollo-link": "^1.2.14", - "apollo-link-batch-http": "^1.2.14", - "apollo-link-context": "^1.0.20", - "apollo-link-error": "^1.1.13", "apollo-server-express": "^2.18.2", "auth0-js": "^9.19.2", "body-parser": "^1.19.0", @@ -88,7 +83,6 @@ "fuse.js": "^5.2.3", "get-user-locale": "^1.4.0", "graphql": "^15.4.0", - "graphql-tag": "^2.12.6", "gsap": "^3.5.1", "helmet": "^4.6.0", "instantsearch.js": "^3.6.0", diff --git a/server/util/getGqlFragmentTypes.js b/server/util/getGqlFragmentTypes.js deleted file mode 100644 index 3cdeaad7fc..0000000000 --- a/server/util/getGqlFragmentTypes.js +++ /dev/null @@ -1,60 +0,0 @@ -const fetch = require('./fetch'); -const { log } = require('./log'); -const tracer = require('./ddTrace'); - -function fetchGqlFragments(url, cache) { - return fetch(url, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - query: '{ __schema { types { kind name possibleTypes { name } } } }' - }), - }) - .then(result => result.json()) - .then(result => { - // eslint-disable-next-line no-underscore-dangle - const fragmentTypes = result.data.__schema.types.filter(t => t.possibleTypes !== null); - - cache.set( - 'ui-gql-fragment-types', - JSON.stringify(fragmentTypes), - { expires: 24 * 60 * 60 }, - (error, success) => { - if (error) { - log(`MemJS Error Setting Cache for ui-gql-fragment-types, Error: ${error}`, 'error'); - } - if (success) { - log(`MemJS Success Setting Cache for ui-gql-fragment-types, Success: ${success}`); - } - } - ); - - return fragmentTypes; - }); -} - -function getGqlFragmentsFromCache(cache) { - return new Promise(resolve => { - cache.get('ui-gql-fragment-types', (error, data) => { - let parsedData = []; - if (error) { - log(`MemJS Error Getting ui-gql-fragment-types, Error: ${error}`, 'error'); - } - if (data) parsedData = JSON.parse(data); - resolve(parsedData); - }); - }); -} - -module.exports = function getGqlFragmentTypes(url, cache) { - return tracer.trace('getGqlFragmentTypes', () => { - return tracer.trace('getGqlFragmentsFromCache', () => { - return getGqlFragmentsFromCache(cache).then(data => { - if (data.length) { - return data; - } - return tracer.trace('fetchGqlFragments', () => fetchGqlFragments(url, cache)); - }); - }); - }); -}; diff --git a/server/util/getGqlPossibleTypes.js b/server/util/getGqlPossibleTypes.js new file mode 100644 index 0000000000..7e510c4b4b --- /dev/null +++ b/server/util/getGqlPossibleTypes.js @@ -0,0 +1,94 @@ +const fetch = require('./fetch'); +const { log } = require('./log'); +const tracer = require('./ddTrace'); + +const GQL_BUILT_IN_TYPES = [ + '__Schema', + '__Type', + '__TypeKind', + '__Field', + '__InputValue', + '__EnumValue', + '__Directive' +]; + +function fetchGqlPossibleTypes(url, cache) { + return fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + // eslint-disable-next-line max-len + query: '{ __schema { queryType { name } mutationType { name } subscriptionType { name } types { name fields { name } possibleTypes { name } } } }' + }), + }) + .then(result => result.json()) + // eslint-disable-next-line no-underscore-dangle + .then(result => result?.data?.__schema ?? {}) + .then(({ + types, queryType, mutationType, subscriptionType + }) => { + const possibleTypes = { Mergable: [] }; + types?.forEach(type => { + // Skip adding possible types for built-in GraphQL types and root types + if (GQL_BUILT_IN_TYPES.includes(type.name) + || type.name === queryType?.name + || type.name === mutationType?.name + || type.name === subscriptionType?.name + ) { + return; + } + // If this type has possible types, include them in the possibleTypes + // object as { Typename: ['PossibleTypenameA', 'PossibleTypenameB'] } + if (type.possibleTypes && type.possibleTypes.length) { + possibleTypes[type.name] = type.possibleTypes.map(({ name }) => name); + } + // If this type doesn't have an ID field, declare it as mergeable. + // See https://github.com/apollographql/apollo-client/pull/7070#issue-708438002 + if (type.fields && type.fields.length && !type.fields.some(field => field.name === 'id')) { + possibleTypes.Mergable.push(type.name); + } + }); + + cache.set( + 'ui-gql-possible-types', + JSON.stringify(possibleTypes), + { expires: 24 * 60 * 60 }, + (error, success) => { + if (error) { + log(`MemJS Error Setting Cache for ui-gql-fragment-types, Error: ${error}`, 'error'); + } + if (success) { + log(`MemJS Success Setting Cache for ui-gql-fragment-types, Success: ${success}`); + } + } + ); + + return possibleTypes; + }); +} + +function getGqlPossibleTypesFromCache(cache) { + return new Promise(resolve => { + cache.get('ui-gql-possible-types', (error, data) => { + let parsedData = []; + if (error) { + log(`MemJS Error Getting ui-gql-fragment-types, Error: ${error}`, 'error'); + } + if (data) parsedData = JSON.parse(data); + resolve(parsedData); + }); + }); +} + +module.exports = function getGqlPossibleTypes(url, cache) { + return tracer.trace('getGqlFragmentTypes', () => { + return tracer.trace('getGqlFragmentsFromCache', () => { + return getGqlPossibleTypesFromCache(cache).then(data => { + if (data.length) { + return data; + } + return tracer.trace('fetchGqlFragments', () => fetchGqlPossibleTypes(url, cache)); + }); + }); + }); +}; diff --git a/server/vue-middleware.js b/server/vue-middleware.js index 44594cd384..53e7f03a29 100644 --- a/server/vue-middleware.js +++ b/server/vue-middleware.js @@ -3,7 +3,7 @@ const path = require('path'); const Bowser = require('bowser'); const cookie = require('cookie'); const { createBundleRenderer } = require('vue-server-renderer'); -const getGqlFragmentTypes = require('./util/getGqlFragmentTypes'); +const getGqlPossibleTypes = require('./util/getGqlPossibleTypes'); const getSessionCookies = require('./util/getSessionCookies'); const vueSsrCache = require('./util/vueSsrCache'); const tracer = require('./util/ddTrace'); @@ -75,8 +75,8 @@ module.exports = function createMiddleware({ res.setHeader('Content-Type', 'text/html'); res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); - // get graphql api fragment types for the graphql client - const typesPromise = getGqlFragmentTypes(config.server.graphqlUri, cache); + // get graphql api possible types for the graphql client + const typesPromise = getGqlPossibleTypes(config.server.graphqlUri, cache); // fetch initial session cookies in case starting session with this request const cookiePromise = getSessionCookies(config.server.sessionUri, cookies); @@ -85,7 +85,7 @@ module.exports = function createMiddleware({ typesPromise.then(() => console.info(JSON.stringify({ meta: {}, level: 'info', - message: `fragment fetch: ${Date.now() - s}ms` + message: `types fetch: ${Date.now() - s}ms` }))); cookiePromise.then(() => console.info(JSON.stringify({ meta: {}, @@ -97,7 +97,7 @@ module.exports = function createMiddleware({ Promise.all([typesPromise, cookiePromise]) .then(([types, cookieInfo]) => { // add fetched types to rendering context - context.config.graphqlFragmentTypes = types; + context.config.graphqlPossibleTypes = types; // update cookies in the rendering context with any newly fetched session cookies context.cookies = Object.assign(context.cookies, cookieInfo.cookies); // forward any newly fetched 'Set-Cookie' headers diff --git a/src/api/Auth0Link.js b/src/api/Auth0Link.js index 78875d28d7..c8625418ea 100644 --- a/src/api/Auth0Link.js +++ b/src/api/Auth0Link.js @@ -1,4 +1,4 @@ -import { setContext } from 'apollo-link-context'; +import { setContext } from '@apollo/client/link/context'; import _set from 'lodash/set'; // Add the user info to the context and add the access token to the authorization header diff --git a/src/api/BasketLink.js b/src/api/BasketLink.js index 7f492ed702..e2966d0efc 100644 --- a/src/api/BasketLink.js +++ b/src/api/BasketLink.js @@ -1,6 +1,6 @@ import _get from 'lodash/get'; import _set from 'lodash/set'; -import { ApolloLink } from 'apollo-link'; +import { ApolloLink } from '@apollo/client/core'; export default ({ cookieStore }) => { return new ApolloLink((operation, forward) => { diff --git a/src/api/ContentfulPreviewLink.js b/src/api/ContentfulPreviewLink.js index 9dc2d10ab9..329023bc71 100644 --- a/src/api/ContentfulPreviewLink.js +++ b/src/api/ContentfulPreviewLink.js @@ -1,4 +1,4 @@ -import { ApolloLink } from 'apollo-link'; +import { ApolloLink } from '@apollo/client/core'; export default ({ cookieStore }) => { return new ApolloLink((operation, forward) => { diff --git a/src/api/ExperimentIdLink.js b/src/api/ExperimentIdLink.js index b1060294c1..f470905e4e 100644 --- a/src/api/ExperimentIdLink.js +++ b/src/api/ExperimentIdLink.js @@ -1,4 +1,4 @@ -import { setContext } from 'apollo-link-context'; +import { setContext } from '@apollo/client/link/context'; import _set from 'lodash/set'; // Experiment Ids from setting that will be passed in the X-Experiment Header diff --git a/src/api/HttpLink.js b/src/api/HttpLink.js index 232aa764bb..e6b267404d 100644 --- a/src/api/HttpLink.js +++ b/src/api/HttpLink.js @@ -1,5 +1,5 @@ import * as Sentry from '@sentry/vue'; -import { BatchHttpLink } from 'apollo-link-batch-http'; +import { BatchHttpLink } from '@apollo/client/link/batch-http'; export default ({ kvAuth0, uri = '', fetch }) => { const onVm = uri.indexOf('vm') > -1; diff --git a/src/api/NetworkErrorLink.js b/src/api/NetworkErrorLink.js index 915d660d9b..b9f24240b4 100644 --- a/src/api/NetworkErrorLink.js +++ b/src/api/NetworkErrorLink.js @@ -1,4 +1,4 @@ -import { onError } from 'apollo-link-error'; +import { onError } from '@apollo/client/link/error'; import logFormatter from '@/util/logFormatter'; export default () => { diff --git a/src/api/SnowplowSessionLink.js b/src/api/SnowplowSessionLink.js index 01864fc516..6ca4367399 100644 --- a/src/api/SnowplowSessionLink.js +++ b/src/api/SnowplowSessionLink.js @@ -1,4 +1,4 @@ -import { setContext } from 'apollo-link-context'; +import { setContext } from '@apollo/client/link/context'; import _set from 'lodash/set'; function getSPCookieSession(cookieStore) { diff --git a/src/api/apollo.js b/src/api/apollo.js index d18dba5efa..f872e750c4 100644 --- a/src/api/apollo.js +++ b/src/api/apollo.js @@ -1,11 +1,4 @@ -/* eslint-disable no-underscore-dangle */ -import ApolloClient from 'apollo-client'; -import { ApolloLink } from 'apollo-link'; -import { - IntrospectionFragmentMatcher, - InMemoryCache, - defaultDataIdFromObject, -} from 'apollo-cache-inmemory'; +import { ApolloLink, ApolloClient, InMemoryCache } from '@apollo/client/core'; import Auth0LinkCreator from './Auth0Link'; import BasketLinkCreator from './BasketLink'; import ContentfulPreviewLink from './ContentfulPreviewLink'; @@ -13,36 +6,29 @@ import ExperimentIdLink from './ExperimentIdLink'; import HttpLinkCreator from './HttpLink'; import NetworkErrorLink from './NetworkErrorLink'; import SnowplowSessionLink from './SnowplowSessionLink'; -import initState from './localState'; +import { initState, setLocalState } from './localState'; export default function createApolloClient({ appConfig, cookieStore, kvAuth0, - types = [], + types, uri, fetch }) { const cache = new InMemoryCache({ - fragmentMatcher: new IntrospectionFragmentMatcher({ - introspectionQueryResultData: { - __schema: { types } - } - }), - // Return a custom cache id for types that don't have an id field - dataIdFromObject: object => { - if (object.__typename === 'Setting' && object.key) return `Setting:${object.key}`; - return defaultDataIdFromObject(object); - }, - // Use a simpler underlying cache for server renders - resultCaching: typeof window !== 'undefined', - // Block modifying cache results outside of normal operations - // see https://github.com/apollographql/apollo-client/pull/4543 - freezeResults: true, + possibleTypes: types, + typePolicies: { + Mergable: { + merge: true, + }, + Setting: { + keyFields: ['key'], + }, + } }); - // initialize local state resolvers - const { resolvers, defaults } = initState({ appConfig, cookieStore, kvAuth0 }); + const { resolvers } = initState({ appConfig, cookieStore, kvAuth0 }); const client = new ApolloClient({ link: ApolloLink.from([ @@ -73,8 +59,8 @@ export default function createApolloClient({ }); // set default local state - cache.writeData({ data: defaults }); - client.onResetStore(() => cache.writeData({ data: defaults })); + setLocalState({ appConfig, cookieStore, kvAuth0 }, cache); + client.onResetStore(() => setLocalState({ appConfig, cookieStore, kvAuth0 }, cache)); return client; } diff --git a/src/api/localResolvers/activeLoan.js b/src/api/localResolvers/activeLoan.js index d6419895a1..342761987d 100644 --- a/src/api/localResolvers/activeLoan.js +++ b/src/api/localResolvers/activeLoan.js @@ -1,25 +1,33 @@ +import query from '@/graphql/query/activeLoanClient.graphql'; + /* * Active loan resolvers */ export default () => { return { - defaults: { - activeLoan: { - hoverLoanId: 0, - xCoordinate: 0, - yCoordinate: 0, - loan: JSON.stringify({ - activity: {}, - userProperties: {}, - loanFundraisingInfo: {}, - geocode: { - country: {}, - }, - image: {}, - }), - tracking: JSON.stringify({}), - __typename: 'ActiveLoan', - } + defaults(cache) { + cache.writeQuery({ + query, + data: { + activeLoan: { + id: 0, + hoverLoanId: 0, + xCoordinate: 0, + yCoordinate: 0, + loan: JSON.stringify({ + activity: {}, + userProperties: {}, + loanFundraisingInfo: {}, + geocode: { + country: {}, + }, + image: {}, + }), + tracking: JSON.stringify({}), + __typename: 'ActiveLoan', + } + }, + }); }, resolvers: { Mutation: { @@ -44,6 +52,7 @@ export default () => { ) { const data = { activeLoan: { + id: 0, hoverLoanId, xCoordinate, yCoordinate, @@ -53,13 +62,14 @@ export default () => { } }; - context.cache.writeData({ + context.cache.writeQuery({ + query, data, }); return data; }, }, - }, + } }; }; diff --git a/src/api/localResolvers/addToBasketInterstitial.js b/src/api/localResolvers/addToBasketInterstitial.js index 98792baac4..78e3cfaaa5 100644 --- a/src/api/localResolvers/addToBasketInterstitial.js +++ b/src/api/localResolvers/addToBasketInterstitial.js @@ -1,21 +1,29 @@ +import query from '@/graphql/query/basketAddInterstitialClient.graphql'; /* * Add to Basket Interstitial resolvers */ export default () => { return { - defaults: { - basketAddInterstitial: { - active: false, - visible: false, - loanId: 0, - __typename: 'BasketAddInterstitial', - } + defaults(cache) { + cache.writeQuery({ + query, + data: { + basketAddInterstitial: { + id: 0, + active: false, + visible: false, + loanId: 0, + __typename: 'BasketAddInterstitial', + } + }, + }); }, resolvers: { Mutation: { updateAddToBasketInterstitial(_, { active = false, visible = false, loanId = 0 }, context) { const data = { basketAddInterstitial: { + id: 0, active, visible, loanId, @@ -23,7 +31,8 @@ export default () => { } }; - context.cache.writeData({ + context.cache.writeQuery({ + query, data, }); diff --git a/src/api/localResolvers/autolending.js b/src/api/localResolvers/autolending.js index 76e694f62e..e1b30f1253 100644 --- a/src/api/localResolvers/autolending.js +++ b/src/api/localResolvers/autolending.js @@ -16,11 +16,12 @@ import LoanSearchCriteria, { } from '@/api/fixtures/LoanSearchCriteria'; // Helper function for writing autolending data to the cache -function writeAutolendingData(cache, { currentProfile, savedProfile, ...data }) { +function writeAutolendingData(cache, { currentProfile, savedProfile, ...fields }) { // Set base typename const autolending = { + id: 0, __typename: 'Autolending', - ...data, + ...fields, }; // Set autolend profile typenames if (currentProfile) { @@ -29,8 +30,13 @@ function writeAutolendingData(cache, { currentProfile, savedProfile, ...data }) if (savedProfile) { autolending.savedProfile = getCacheableProfile(savedProfile); } - // Write autolending object to cache - cache.writeData({ data: { autolending } }); + // Update autolending object in the cache + cache.updateQuery({ query: bothProfilesQuery }, data => ({ + autolending: { + ...data.autolending, + ...autolending + } + })); } let loanCountObservable; @@ -140,18 +146,27 @@ function convertLegacyProfile(profile) { } // export resolvers and defaults for Autolending and AutolendingMutation + export default () => { return { - defaults: { - autolending: { - __typename: 'Autolending', - currentLoanCount: 0, // updates when search filters are changed - profileChanged: false, // true when the current profile is different than the profile on the server - loadingProfile: false, // true when first loading the profile from the server - countingLoans: false, // true when loan count is updating - savingProfile: false, // true when profile is being saved o the server - warningThreshold: 25, // minimum loan count to avoid getting a warning message - }, + defaults(cache) { + cache.writeQuery({ + query: bothProfilesQuery, + data: { + autolending: { + id: 0, + __typename: 'Autolending', + currentProfile: null, + savedProfile: null, + currentLoanCount: 0, // updates when search filters are changed + profileChanged: false, // true when currentProfile is different than savedProfile + loadingProfile: false, // true when first loading the profile from the server + countingLoans: false, // true when loan count is updating + savingProfile: false, // true when profile is being saved o the server + warningThreshold: 25, // minimum loan count to avoid getting a warning message + } + } + }); }, resolvers: { AutolendingMutation: { @@ -322,7 +337,7 @@ export default () => { Mutation: { autolending() { // Return typename so apollo will use that type to resolve the fields - return { __typename: 'AutolendingMutation' }; + return { id: 0, __typename: 'AutolendingMutation' }; } } } diff --git a/src/api/localResolvers/experiment.js b/src/api/localResolvers/experiment.js index a7e993b22f..daf90bc914 100644 --- a/src/api/localResolvers/experiment.js +++ b/src/api/localResolvers/experiment.js @@ -1,5 +1,7 @@ import { parseExpCookie, serializeExpCookie, assignVersion } from '@/util/experimentUtils'; -import { readJSONSetting, hashCode } from '@/util/settingsUtils'; +import { hashCode, readJSONSetting } from '@/util/settingsUtils'; +import experimentSettingQuery from '@/graphql/query/experimentSetting.graphql'; +import logReadQueryError from '@/util/logReadQueryError'; /** * Experiment resolvers @@ -7,16 +9,27 @@ import { readJSONSetting, hashCode } from '@/util/settingsUtils'; export default ({ cookieStore }) => { // initialize the assignments from the experiment cookie const assignments = parseExpCookie(cookieStore.get('uiab')); - return { resolvers: { Query: { - experiment(_, { id }, context) { + experiment(_, { id }, { cache }) { // get the existing assigned version for this experiment id let currentAssignment = assignments[id] || {}; - // read the experiment data from the cache - const experiment = readJSONSetting(context, `cache.data.data['Setting:uiexp.${id}'].value`); + let experimentData = null; + try { + experimentData = cache.readQuery({ + query: experimentSettingQuery, + variables: { + key: id || '', + } + }); + } catch (e) { + logReadQueryError(e, 'ExperimentResolver experimentSettingQuery'); + } + + const experiment = readJSONSetting(experimentData, 'general.uiExperimentSetting.value'); + // create targeted subset of experiment setting to use in hash // Changing the Name, Distribution, Variants or Control values will "reset" an experiment assignment const { @@ -81,7 +94,8 @@ export default ({ cookieStore }) => { id, // if experiment exist & enabled = false return a null version // > we don't want to render a disabled experiment even if a cookie version is present - version: (experiment === null || !experiment.enabled) ? null : currentAssignment.version, + version: (!id?.length || experiment === null || !experiment.enabled) + ? null : currentAssignment.version, __typename: 'Experiment', }; }, diff --git a/src/api/localResolvers/loanSearch.js b/src/api/localResolvers/loanSearch.js index b0a159d590..5538769e04 100644 --- a/src/api/localResolvers/loanSearch.js +++ b/src/api/localResolvers/loanSearch.js @@ -26,38 +26,30 @@ export const getDefaultLoanSearchState = () => ({ // export queries, resolvers and defaults for LoanSearchState export default () => { return { - defaults: { - loanSearchState: { - id: 'SearchData', // Using a hard-coded id for now to enable cache - __typename, - ...getDefaultLoanSearchState(), - }, + defaults(cache) { + cache.writeQuery({ + query: loanSearchStateQuery, + data: { + loanSearchState: { + id: 'SearchData', // Using a hard-coded id for now to enable cache + __typename, + ...getDefaultLoanSearchState(), + } + }, + }); }, resolvers: { - Query: { - loanSearchState(_, _args, { cache }) { - // Retrieve current LoanSearchState from the Apollo cache - // - If it's missing the default values will be used to create it - const cachedData = cache.readQuery({ query: loanSearchStateQuery }); - return cachedData; - }, - }, Mutation: { - updateLoanSearch(_, variables = {}, { cache }) { - // For now we're using a fixed cache key - // - this is built from the id and __typename of the object - const id = 'LoanSearchState:SearchData'; - // Fetch previous state from the cache - const previousState = cache.readQuery({ query: loanSearchStateQuery }); - // Patch the new params into the existing state - const data = { ...previousState?.loanSearchState, ...variables.searchParams }; - // Write the new state to the cache - cache.writeData({ data, id }); - // We could pull the data from the newly set cache and return that... - // const newState = cache.readQuery({ query: loanSearchStateQuery }); - // console.log(newState); + updateLoanSearch(_, { searchParams }, { cache }) { + // Patch the new params into the existing state in the cache + const updatedResult = cache.updateQuery({ query: loanSearchStateQuery }, data => ({ + loanSearchState: { + ...data.loanSearchState, + ...searchParams + } + })); // Return the latest state - return data; + return updatedResult.loanSearchState; } } } diff --git a/src/api/localResolvers/tipMessage.js b/src/api/localResolvers/tipMessage.js index af8ead5802..c372594f1b 100644 --- a/src/api/localResolvers/tipMessage.js +++ b/src/api/localResolvers/tipMessage.js @@ -1,42 +1,46 @@ +import tipMessageDataQuery from '@/graphql/query/tipMessage/tipMessageData.graphql'; + /* * TipMessage resolvers */ export default () => { return { - defaults: { - tip: { - message: '', - persist: false, - type: '', - visible: false, - __typename: 'TipMessage', - }, + defaults(cache) { + cache.writeQuery({ + query: tipMessageDataQuery, + data: { + tip: { + id: 0, + message: '', + persist: false, + type: '', + visible: false, + __typename: 'TipMessage', + } + }, + }); }, resolvers: { Mutation: { showTipMessage(_, { message = '', persist = false, type = '' }, context) { - context.cache.writeData({ - data: { - tip: { - message, - persist, - type, - visible: true, - __typename: 'TipMessage', - }, - }, - }); + context.cache.updateQuery({ query: tipMessageDataQuery }, data => ({ + tip: { + ...data.tip, + message, + persist, + type, + visible: true, + } + })); return true; }, - closeTipMessage(_, data, context) { - context.cache.writeData({ - data: { - tip: { - visible: false, - __typename: 'TipMessage', - }, - }, - }); + closeTipMessage(_, args, context) { + context.cache.updateQuery({ query: tipMessageDataQuery }, data => ({ + tip: { + ...data.tip, + visible: false, + } + })); return true; }, }, diff --git a/src/api/localResolvers/usingTouch.js b/src/api/localResolvers/usingTouch.js index e699c66fe9..9c87e56e23 100644 --- a/src/api/localResolvers/usingTouch.js +++ b/src/api/localResolvers/usingTouch.js @@ -1,18 +1,23 @@ +import query from '@/graphql/query/shared/usingTouchClient.graphql'; /* * UsingTouch resolvers */ export default () => { return { - defaults: { - usingTouch: false, + defaults(cache) { + cache.writeQuery({ + query, + data: { usingTouch: false }, + }); }, resolvers: { Mutation: { - updateUsingTouch(_, { usingTouch }, context) { - context.cache.writeData({ + updateUsingTouch(_, { usingTouch = false }, context) { + context.cache.writeQuery({ + query, data: { usingTouch } }); - return null; + return true; }, }, }, diff --git a/src/api/localResolvers/verificationLightbox.js b/src/api/localResolvers/verificationLightbox.js index 077b9b0f6b..bd955b6217 100644 --- a/src/api/localResolvers/verificationLightbox.js +++ b/src/api/localResolvers/verificationLightbox.js @@ -1,40 +1,40 @@ +import { gql } from '@apollo/client'; + /* * VerificationLightbox resolvers */ -// eslint-disable-next-line no-underscore-dangle -const __typename = 'VerificationLightbox'; +function writeVerificationLightboxData({ cache, visible = false }) { + cache.writeQuery({ + query: gql`query verificationLightboxData { + verificationLightbox @client { + id + visible + } + }`, + data: { + verificationLightbox: { + id: 0, + visible, + __typename: 'VerificationLightbox', + } + } + }); +} export default () => { return { - defaults: { - verificationLightbox: { - visible: false, - __typename, - }, + defaults(cache) { + writeVerificationLightboxData({ cache, visible: false }); }, resolvers: { Mutation: { - showVerificationLightbox(_, args, context) { - context.cache.writeData({ - data: { - verificationLightbox: { - visible: true, - __typename, - }, - }, - }); + showVerificationLightbox(_, args, { cache }) { + writeVerificationLightboxData({ cache, visible: true }); return true; }, - closeVerificationLightbox(_, args, context) { - context.cache.writeData({ - data: { - verificationLightbox: { - visible: false, - __typename, - }, - }, - }); + closeVerificationLightbox(_, args, { cache }) { + writeVerificationLightboxData({ cache, visible: false }); return true; }, }, diff --git a/src/api/localSchema.graphql b/src/api/localSchema.graphql index db0c1fe8b1..9ca7d618a8 100644 --- a/src/api/localSchema.graphql +++ b/src/api/localSchema.graphql @@ -7,6 +7,7 @@ type Experiment { } type Autolending { + id: Int currentLoanCount: Int currentProfile: AutolendProfile profileChanged: Boolean @@ -18,6 +19,7 @@ type Autolending { } type AutolendingMutation { + id: Int initAutolending: Boolean editProfile(profile: AutolendProfileUpdateInput): Boolean saveProfile: Boolean @@ -96,6 +98,7 @@ type LoanSearchState { } type TipMessage { + id: Int message: String persist: Boolean type: String @@ -103,12 +106,14 @@ type TipMessage { } type BasketAddInterstitial { + id: Int active: Boolean visible: Boolean loanId: Int } type ActiveLoan { + id: Int hoverLoanId: Int xCoordinate: Int yCoordinate: Int @@ -117,5 +122,6 @@ type ActiveLoan { } type VerificationLightbox { + id: Int visible: Boolean } diff --git a/src/api/localState.js b/src/api/localState.js index cd8581147e..063a6f3cb4 100644 --- a/src/api/localState.js +++ b/src/api/localState.js @@ -3,10 +3,26 @@ import _merge from 'lodash/merge'; // require each local state resolver const requireLocalResolver = require.context('./localResolvers', true, /\.js$/); -export default options => { +const initState = options => { // init each resolver with the given options and merge all the results together return requireLocalResolver.keys().reduce((result, key) => { const module = requireLocalResolver(key).default; return _merge(result, module(options)); }, {}); }; + +const setLocalState = (options, cache) => { + // Call defaults function for each local resolver + return requireLocalResolver.keys().forEach(value => { + const module = requireLocalResolver(value).default; + const { defaults } = module(options); + if (defaults) { + defaults(cache); + } + }); +}; + +export { + initState, + setLocalState +}; diff --git a/src/client-entry.js b/src/client-entry.js index ea4e87436c..0130d35c33 100755 --- a/src/client-entry.js +++ b/src/client-entry.js @@ -59,7 +59,7 @@ const { appConfig: config, apollo: { uri: config.graphqlUri, - types: config.graphqlFragmentTypes, + types: config.graphqlPossibleTypes, }, cookieStore, device, diff --git a/src/components/15Years/15YearsHeader.vue b/src/components/15Years/15YearsHeader.vue index 16d901331b..e35bc6d471 100644 --- a/src/components/15Years/15YearsHeader.vue +++ b/src/components/15Years/15YearsHeader.vue @@ -133,7 +133,7 @@