diff --git a/apps-rendering/package.json b/apps-rendering/package.json
index 681160214ef..9e6725a6924 100644
--- a/apps-rendering/package.json
+++ b/apps-rendering/package.json
@@ -94,11 +94,13 @@
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.31.11",
"express": "^4.18.1",
+ "fetch-mock": "9.11.0",
"html-webpack-plugin": "^5.5.0",
"jest": "^28.1.3",
"jest-environment-jsdom": "^28.1.3",
"jsdom": "^16.7.0",
"lodash.debounce": "4.0.6",
+ "mockdate": "3.0.5",
"node-fetch": "^3.2.10",
"node-int64": "^0.4.0",
"prettier": "^2.8.4",
diff --git a/apps-rendering/yarn.lock b/apps-rendering/yarn.lock
index b8a7f89f69c..a1e4791014b 100644
--- a/apps-rendering/yarn.lock
+++ b/apps-rendering/yarn.lock
@@ -39,6 +39,13 @@
dependencies:
"@babel/highlight" "^7.18.6"
+"@babel/code-frame@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
+ integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
+ dependencies:
+ "@babel/highlight" "^7.22.5"
+
"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5":
version "7.20.10"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec"
@@ -49,6 +56,32 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f"
integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==
+"@babel/compat-data@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.6.tgz#15606a20341de59ba02cd2fcc5086fcbe73bf544"
+ integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==
+
+"@babel/core@^7.0.0":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.6.tgz#aafafbe86e9a1679d876b99dc46382964ef72494"
+ integrity sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.22.6"
+ "@babel/helper-module-transforms" "^7.22.5"
+ "@babel/helpers" "^7.22.6"
+ "@babel/parser" "^7.22.6"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.6"
+ "@babel/types" "^7.22.5"
+ "@nicolo-ribaudo/semver-v6" "^6.3.3"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.2"
+
"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.13":
version "7.18.13"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac"
@@ -149,6 +182,16 @@
"@jridgewell/gen-mapping" "^0.3.2"
jsesc "^2.5.1"
+"@babel/generator@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7"
+ integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==
+ dependencies:
+ "@babel/types" "^7.22.5"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ "@jridgewell/trace-mapping" "^0.3.17"
+ jsesc "^2.5.1"
+
"@babel/helper-annotate-as-pure@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
@@ -186,6 +229,17 @@
lru-cache "^5.1.1"
semver "^6.3.0"
+"@babel/helper-compilation-targets@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz#e30d61abe9480aa5a83232eb31c111be922d2e52"
+ integrity sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==
+ dependencies:
+ "@babel/compat-data" "^7.22.6"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@nicolo-ribaudo/semver-v6" "^6.3.3"
+ browserslist "^4.21.9"
+ lru-cache "^5.1.1"
+
"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7":
version "7.20.12"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819"
@@ -239,6 +293,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
+"@babel/helper-environment-visitor@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98"
+ integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==
+
"@babel/helper-explode-assignable-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096"
@@ -262,6 +321,14 @@
"@babel/template" "^7.20.7"
"@babel/types" "^7.21.0"
+"@babel/helper-function-name@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be"
+ integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==
+ dependencies:
+ "@babel/template" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
"@babel/helper-hoist-variables@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
@@ -269,6 +336,13 @@
dependencies:
"@babel/types" "^7.18.6"
+"@babel/helper-hoist-variables@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-member-expression-to-functions@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05"
@@ -290,6 +364,13 @@
dependencies:
"@babel/types" "^7.18.6"
+"@babel/helper-module-imports@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c"
+ integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11":
version "7.20.11"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0"
@@ -332,6 +413,20 @@
"@babel/traverse" "^7.21.2"
"@babel/types" "^7.21.2"
+"@babel/helper-module-transforms@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef"
+ integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-module-imports" "^7.22.5"
+ "@babel/helper-simple-access" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.5"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
"@babel/helper-optimise-call-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
@@ -380,6 +475,13 @@
dependencies:
"@babel/types" "^7.20.2"
+"@babel/helper-simple-access@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+ integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-skip-transparent-expression-wrappers@^7.20.0":
version "7.20.0"
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684"
@@ -394,16 +496,33 @@
dependencies:
"@babel/types" "^7.18.6"
+"@babel/helper-split-export-declaration@^7.22.5", "@babel/helper-split-export-declaration@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+ integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-string-parser@^7.19.4":
version "7.19.4"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
+"@babel/helper-string-parser@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
+ integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+
"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
version "7.19.1"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
+"@babel/helper-validator-identifier@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
+ integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+
"@babel/helper-validator-option@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
@@ -414,6 +533,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180"
integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==
+"@babel/helper-validator-option@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac"
+ integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==
+
"@babel/helper-wrap-function@^7.18.9":
version "7.20.5"
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3"
@@ -451,6 +575,15 @@
"@babel/traverse" "^7.21.0"
"@babel/types" "^7.21.0"
+"@babel/helpers@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd"
+ integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==
+ dependencies:
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.6"
+ "@babel/types" "^7.22.5"
+
"@babel/highlight@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
@@ -460,6 +593,15 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
+"@babel/highlight@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
+ integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.5"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.9":
version "7.18.9"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539"
@@ -480,6 +622,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.13.tgz#ddf1eb5a813588d2fb1692b70c6fce75b945c088"
integrity sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==
+"@babel/parser@^7.22.5", "@babel/parser@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.6.tgz#201f8b47be20c76c7c5743b9c16129760bf9a975"
+ integrity sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
@@ -1388,6 +1535,13 @@
pirates "^4.0.5"
source-map-support "^0.5.16"
+"@babel/runtime@^7.0.0":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438"
+ integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==
+ dependencies:
+ regenerator-runtime "^0.13.11"
+
"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
@@ -1404,6 +1558,15 @@
"@babel/parser" "^7.20.7"
"@babel/types" "^7.20.7"
+"@babel/template@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
+ integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==
+ dependencies:
+ "@babel/code-frame" "^7.22.5"
+ "@babel/parser" "^7.22.5"
+ "@babel/types" "^7.22.5"
+
"@babel/template@^7.3.3":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31"
@@ -1461,6 +1624,22 @@
debug "^4.1.0"
globals "^11.1.0"
+"@babel/traverse@^7.22.5", "@babel/traverse@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.6.tgz#8f2f83a5c588251584914debeee38f35f661a300"
+ integrity sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==
+ dependencies:
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/parser" "^7.22.6"
+ "@babel/types" "^7.22.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
"@babel/traverse@^7.7.2":
version "7.18.9"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98"
@@ -1504,6 +1683,15 @@
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
+"@babel/types@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
+ integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==
+ dependencies:
+ "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.5"
+ to-fast-properties "^2.0.0"
+
"@balena/dockerignore@^1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d"
@@ -2361,6 +2549,11 @@
pump "^3.0.0"
tar-fs "^2.1.1"
+"@nicolo-ribaudo/semver-v6@^6.3.3":
+ version "6.3.3"
+ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29"
+ integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -5048,6 +5241,16 @@ browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4:
node-releases "^2.0.6"
update-browserslist-db "^1.0.9"
+browserslist@^4.21.9:
+ version "4.21.9"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
+ integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
+ dependencies:
+ caniuse-lite "^1.0.30001503"
+ electron-to-chromium "^1.4.431"
+ node-releases "^2.0.12"
+ update-browserslist-db "^1.0.11"
+
bs-logger@0.x:
version "0.2.6"
resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
@@ -5166,6 +5369,11 @@ caniuse-lite@^1.0.30001400:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001448.tgz#ca7550b1587c92a392a2b377cd9c508b3b4395bf"
integrity sha512-tq2YI+MJnooG96XpbTRYkBxLxklZPOdLmNIOdIhvf7SNJan6u5vCKum8iT7ZfCt70m1GPkuC7P3TtX6UuhupuA==
+caniuse-lite@^1.0.30001503:
+ version "1.0.30001512"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz#7450843fb581c39f290305a83523c7a9ef0d4cb4"
+ integrity sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==
+
cardinal@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505"
@@ -5568,6 +5776,11 @@ core-js-pure@^3.23.3:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.1.tgz#7d93dc89e7d47b8ef05d7e79f507b0e99ea77eec"
integrity sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==
+core-js@^3.0.0:
+ version "3.31.0"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344"
+ integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==
+
core-js@^3.24.1:
version "3.26.1"
resolved "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e"
@@ -6070,6 +6283,11 @@ electron-to-chromium@^1.4.251:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592"
integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==
+electron-to-chromium@^1.4.431:
+ version "1.4.450"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz#df232c961ee9bf4e8980f86e96a6e9f291720138"
+ integrity sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==
+
emittery@^0.10.2:
version "0.10.2"
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933"
@@ -6783,6 +7001,22 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4:
node-domexception "^1.0.0"
web-streams-polyfill "^3.0.3"
+fetch-mock@9.11.0:
+ version "9.11.0"
+ resolved "https://registry.yarnpkg.com/fetch-mock/-/fetch-mock-9.11.0.tgz#371c6fb7d45584d2ae4a18ee6824e7ad4b637a3f"
+ integrity sha512-PG1XUv+x7iag5p/iNHD4/jdpxL9FtVSqRMUQhPab4hVDt80T1MH5ehzVrL2IdXO9Q2iBggArFvPqjUbHFuI58Q==
+ dependencies:
+ "@babel/core" "^7.0.0"
+ "@babel/runtime" "^7.0.0"
+ core-js "^3.0.0"
+ debug "^4.1.1"
+ glob-to-regexp "^0.4.0"
+ is-subset "^0.1.1"
+ lodash.isequal "^4.5.0"
+ path-to-regexp "^2.2.1"
+ querystring "^0.2.0"
+ whatwg-url "^6.5.0"
+
fetch-retry@^5.0.2:
version "5.0.4"
resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.4.tgz#06e8e4533030bf6faa00ffbb9450cb9264c23c12"
@@ -7182,7 +7416,7 @@ glob-promise@^6.0.2:
dependencies:
"@types/glob" "^8.0.0"
-glob-to-regexp@^0.4.1:
+glob-to-regexp@^0.4.0, glob-to-regexp@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
@@ -7925,6 +8159,11 @@ is-string@^1.0.5, is-string@^1.0.7:
dependencies:
has-tostringtag "^1.0.0"
+is-subset@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
+ integrity sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==
+
is-symbol@^1.0.2, is-symbol@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
@@ -8859,6 +9098,11 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
+
lodash.union@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
@@ -9126,6 +9370,11 @@ mkdirp@^1.0.3:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+mockdate@3.0.5:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/mockdate/-/mockdate-3.0.5.tgz#789be686deb3149e7df2b663d2bc4392bc3284fb"
+ integrity sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==
+
moment@^2.11.2:
version "2.29.4"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
@@ -9280,6 +9529,11 @@ node-int64@^0.4.0:
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
+node-releases@^2.0.12:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
+ integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
+
node-releases@^2.0.6:
version "2.0.8"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae"
@@ -9694,6 +9948,11 @@ path-to-regexp@0.1.7:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+path-to-regexp@^2.2.1:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704"
+ integrity sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==
+
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -9999,6 +10258,11 @@ querystring@0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==
+querystring@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd"
+ integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==
+
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -11290,6 +11554,13 @@ tough-cookie@^4.0.0:
punycode "^2.1.1"
universalify "^0.1.2"
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==
+ dependencies:
+ punycode "^2.1.0"
+
tr46@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
@@ -11577,6 +11848,14 @@ untildify@^4.0.0:
resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
+update-browserslist-db@^1.0.11:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
+ integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
update-browserslist-db@^1.0.9:
version "1.0.10"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
@@ -11756,6 +12035,11 @@ webidl-conversions@^3.0.0:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
webidl-conversions@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
@@ -12006,6 +12290,15 @@ whatwg-url@^5.0.0:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
+whatwg-url@^6.5.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
+ integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
whatwg-url@^8.0.0, whatwg-url@^8.5.0:
version "8.7.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
diff --git a/dotcom-rendering/.eslintrc.js b/dotcom-rendering/.eslintrc.js
index c97ab68792f..16db5c097b8 100644
--- a/dotcom-rendering/.eslintrc.js
+++ b/dotcom-rendering/.eslintrc.js
@@ -41,6 +41,10 @@ const rulesToReview = {
'@typescript-eslint/default-param-last': 'warn',
'@typescript-eslint/no-misused-promises': 'warn',
+ // We use prettier to format code. Some eslint rules conflict with prettier
+ 'react/jsx-indent-props': 'off',
+ 'react/jsx-indent': 'off',
+
// More rules
'eslint-comments/require-description': 'warn',
'eslint-comments/no-unused-disable': 'warn',
@@ -66,9 +70,10 @@ module.exports = {
extends: [
'eslint:recommended',
'@guardian/eslint-config-typescript',
- 'prettier',
'plugin:@guardian/source-react-components/recommended',
'plugin:jsx-a11y/recommended',
+ // prettier needs to go last so it can override other configuration. See https://github.com/prettier/eslint-config-prettier#installation
+ 'prettier',
],
parser: '@typescript-eslint/parser',
parserOptions: {
@@ -90,8 +95,6 @@ module.exports = {
'react-hooks/exhaustive-deps': 'error',
'react-hooks/rules-of-hooks': 'error',
'react/jsx-boolean-value': [2, 'always'],
- 'react/jsx-indent-props': [2, 'tab'],
- 'react/jsx-indent': [2, 'tab'],
'react/jsx-key': 'error',
'react/jsx-no-target-blank': 'error',
'react/jsx-one-expression-per-line': 'off',
@@ -168,9 +171,7 @@ module.exports = {
...rulesToOverrideGuardianConfig,
},
settings: {
- 'import/resolver': {
- 'babel-module': { extensions: ['.ts', '.tsx', '.js'] },
- },
+ 'import/resolver': 'typescript'
},
overrides: [
{
diff --git a/dotcom-rendering/fixtures/manual/comment.ts b/dotcom-rendering/fixtures/manual/comment.ts
new file mode 100644
index 00000000000..b389189d0af
--- /dev/null
+++ b/dotcom-rendering/fixtures/manual/comment.ts
@@ -0,0 +1,157 @@
+export const comment = {
+ id: 138809272,
+ body: '
Begone ye self-serving Tory isolationists.
Never has there been a more significant time for Big Government and public health provision. Nature has spoken.
',
+ date: '09 March 2020 7:09pm',
+ isoDateTime: '2020-03-09T19:09:28Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/138809272',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809272',
+ numRecommends: 45,
+ isHighlighted: false,
+ userProfile: {
+ userId: '13239086',
+ displayName: 'blipvert',
+ webUrl: 'https://profile.theguardian.com/user/id/13239086',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13239086',
+ avatar: 'https://avatar.guim.co.uk/user/13239086',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13239086',
+ badge: [],
+ },
+ discussion: {
+ key: '/p/4k83z',
+ webUrl: 'https://www.theguardian.com/commentisfree/2020/mar/09/coronavirus-outbreak-nhs-staff-shortages',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/discussion//p/4k83z',
+ title: 'Even a starved NHS is still our best defence against the coronavirus',
+ isClosedForComments: true,
+ isClosedForRecommendation: true,
+ },
+ responses: [
+ {
+ id: 138809396,
+ body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
+ date: '09 March 2020 7:19pm',
+ isoDateTime: '2020-03-09T19:19:03Z',
+ status: 'blocked',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/138809396',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809396',
+ numRecommends: 0,
+ isHighlighted: false,
+ responseTo: {
+ displayName: 'blipvert',
+ commentApiUrl:
+ 'https://discussion.guardianapis.com/discussion-api/comment/138809272',
+ isoDateTime: '2020-03-09T19:09:28Z',
+ date: '09 March 2020 7:09pm',
+ commentId: '138809272',
+ commentWebUrl:
+ 'https://discussion.theguardian.com/comment-permalink/138809272',
+ },
+ userProfile: {
+ userId: '13093174',
+ displayName: 'Cricketnut',
+ webUrl: 'https://profile.theguardian.com/user/id/13093174',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13093174',
+ avatar: 'https://avatar.guim.co.uk/user/13093174',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13093174',
+ badge: [],
+ },
+ },
+ {
+ id: 138809487,
+ body: 'There are few Libertarians and small government advocates during pandemics.
',
+ date: '09 March 2020 7:24pm',
+ isoDateTime: '2020-03-09T19:24:46Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/138809487',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809487',
+ numRecommends: 30,
+ isHighlighted: false,
+ responseTo: {
+ displayName: 'blipvert',
+ commentApiUrl:
+ 'https://discussion.guardianapis.com/discussion-api/comment/138809272',
+ isoDateTime: '2020-03-09T19:09:28Z',
+ date: '09 March 2020 7:09pm',
+ commentId: '138809272',
+ commentWebUrl:
+ 'https://discussion.theguardian.com/comment-permalink/138809272',
+ },
+ userProfile: {
+ userId: '100102208',
+ displayName: 'AJVC1991',
+ webUrl: 'https://profile.theguardian.com/user/id/100102208',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100102208',
+ avatar: 'https://avatar.guim.co.uk/user/100102208',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/100102208',
+ badge: [],
+ },
+ },
+ {
+ id: 138809896,
+ body: 'What?
',
+ date: '09 March 2020 7:48pm',
+ isoDateTime: '2020-03-09T19:48:31Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/138809896',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809896',
+ numRecommends: 9,
+ isHighlighted: false,
+ responseTo: {
+ displayName: 'blipvert',
+ commentApiUrl:
+ 'https://discussion.guardianapis.com/discussion-api/comment/138809272',
+ isoDateTime: '2020-03-09T19:09:28Z',
+ date: '09 March 2020 7:09pm',
+ commentId: '138809272',
+ commentWebUrl:
+ 'https://discussion.theguardian.com/comment-permalink/138809272',
+ },
+ userProfile: {
+ userId: '2611744',
+ displayName: 'Delius',
+ webUrl: 'https://profile.theguardian.com/user/id/2611744',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
+ avatar: 'https://avatar.guim.co.uk/user/2611744',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2611744',
+ badge: [],
+ },
+ },
+ {
+ id: 138810191,
+ body: 'Or at least, they don\'t flaunt their allegiance to Britannia Unchained and Rand quite so obviously. What awaits if we continue to act as if "there are individual men and women and there are families" and no responsibility to a wider society?
',
+ date: '09 March 2020 8:05pm',
+ isoDateTime: '2020-03-09T20:05:54Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/138810191',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810191',
+ numRecommends: 20,
+ isHighlighted: false,
+ responseTo: {
+ displayName: 'AJVC1991',
+ commentApiUrl:
+ 'https://discussion.guardianapis.com/discussion-api/comment/138809487',
+ isoDateTime: '2020-03-09T19:24:46Z',
+ date: '09 March 2020 7:24pm',
+ commentId: '138809487',
+ commentWebUrl:
+ 'https://discussion.theguardian.com/comment-permalink/138809487',
+ },
+ userProfile: {
+ userId: '12298092',
+ displayName: '_jhfta_',
+ webUrl: 'https://profile.theguardian.com/user/id/12298092',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12298092',
+ avatar: 'https://avatar.guim.co.uk/user/12298092',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/12298092',
+ badge: [],
+ },
+ },
+ ],
+ metaData: {
+ commentCount: 5,
+ staffCommenterCount: 0,
+ editorsPickCount: 0,
+ blockedCount: 1,
+ responseCount: 4,
+ },
+};
diff --git a/dotcom-rendering/fixtures/manual/discussion.ts b/dotcom-rendering/fixtures/manual/discussion.ts
index 7415513eced..70a6c43f741 100644
--- a/dotcom-rendering/fixtures/manual/discussion.ts
+++ b/dotcom-rendering/fixtures/manual/discussion.ts
@@ -1,9397 +1,1182 @@
export const discussion = {
status: 'ok',
- currentPage: 1,
- pages: 4,
+ page: 1,
+ pages: 9,
pageSize: 50,
orderBy: 'oldest',
discussion: {
- key: '/p/ddp96',
- webUrl: 'https://www.theguardian.com/commentisfree/2020/mar/09/coronavirus-outbreak-nhs-staff-shortages',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/discussion/p/ddp96',
- commentCount: 782,
- topLevelCommentCount: 198,
- isClosedForComments: true,
+ key: '/p/39f5z',
+ webUrl: 'https://www.theguardian.com/science/grrlscientist/2012/aug/07/3',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/discussion//p/39f5z',
+ commentCount: 496,
+ topLevelCommentCount: 405,
+ isClosedForComments: false,
isClosedForRecommendation: false,
isThreaded: true,
- title: 'Even a starved NHS is still our best defence against the coronavirus',
+ title: 'Mystery bird: black-and-red broadbill, Cymbirhynchus macrorhynchos story',
comments: [
{
- id: 138809269,
- body: "I have absolute faith in the good people in the NHS to do the best they can with what is available.
I just hope it's enough
",
- date: '09 March 2020 7:09pm',
- isoDateTime: '2020-03-09T19:09:11Z',
+ id: 23628300,
+ body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
+ date: '17 May 2013 3:15pm',
+ isoDateTime: '2013-05-17T14:15:14Z',
+ status: 'blocked',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/23628300',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/23628300',
+ numRecommends: 2,
+ isHighlighted: false,
+ userProfile: {
+ userId: '10427346',
+ displayName: 'User751903',
+ webUrl: 'https://profile.theguardian.com/user/id/10427346',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10427346',
+ avatar: 'https://avatar.guim.co.uk/user/10427346',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/10427346',
+ badge: [],
+ },
+ },
+ {
+ id: 37678414,
+ body: 'This is how code
looks. And this is how strikethrough looks
strong
italic
blockquote
link to mydomain.com
And this is what get withareallyreallyreallylonglonglongwordthatissupersuperlonglikelonnnnngggggggggImeanreallylong
',
+ date: '02 July 2014 11:20am',
+ isoDateTime: '2014-07-02T10:20:56Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/37678414',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/37678414',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2310959',
+ displayName: 'jamesgorrie',
+ webUrl: 'https://profile.theguardian.com/user/id/2310959',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2310959',
+ avatar: 'https://avatar.guim.co.uk/user/2310959',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2310959',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 37772513,
+ body: 'Lovely chickens! https://www.supersupersuperlongdomainnameImeanitneverstopsatallevereveritmakesyouwonderiftheremightbealimittothesethings.com
',
+ date: '04 July 2014 1:57pm',
+ isoDateTime: '2014-07-04T12:57:48Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809269',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809269',
- numRecommends: 66,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/37772513',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/37772513',
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2310959',
+ displayName: 'jamesgorrie',
+ webUrl: 'https://profile.theguardian.com/user/id/2310959',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2310959',
+ avatar: 'https://avatar.guim.co.uk/user/2310959',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2310959',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 42979860,
+ body: 'test
',
+ date: '30 October 2014 5:24pm',
+ isoDateTime: '2014-10-30T17:24:16Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/42979860',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/42979860',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/11635482',
+ userId: '1186733',
+ displayName: 'GideonGoldberg',
+ webUrl: 'https://profile.theguardian.com/user/id/1186733',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1186733',
+ avatar: 'https://avatar.guim.co.uk/user/1186733',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/1186733',
badge: [],
},
- responses: [
- {
- id: 138809367,
- body: ' I have absolute faith in the good people in the NHS to do the best they can with what is available.
I just hope it\'s enough
I do too.
I am however rather skeptical.
The reason for that skepticism is I have very little trust in this governments ability to manage the situation. I also came across to following Twitter feed today which was posted by a doctor in Italy.
https://twitter.com/silviast9/status/1236933818654896129
It paints a rather start picture of what is happening in Italy and the health service in Italy is better resourced than ours.
Then there is obviously the fact that the health service staff in Italy do the best that they can just like our own health professionals do so that alone will not carry us in the event of a large scale situation with this virus.
I honestly hope my skepticism is unfounded but I am struggling to see that it is.
',
- date: '09 March 2020 7:17pm',
- isoDateTime: '2020-03-09T19:17:06Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809367',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809367',
- numRecommends: 33,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809269',
- isoDateTime: '2020-03-09T19:09:11Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809269',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809269',
- },
- userProfile: {
- userId: '10085855',
- displayName: 'bifess',
- webUrl: 'https://profile.theguardian.com/user/id/10085855',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10085855',
- avatar: 'https://avatar.guim.co.uk/user/10085855',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10085855',
- badge: [],
- },
- },
- {
- id: 138809454,
- body: 'They will. They always do.
As do firefighters and all other people involved. Be they hospital porters or cleaners or whoever.
Then they will be praised for their efforts.
The government knows all these good people will do what they can.
In fact, the government relies on it, just as the 5th richest country in the world always relies on charity and the kindness of its people.
',
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:22Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809454',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809454',
- numRecommends: 32,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809269',
- isoDateTime: '2020-03-09T19:09:11Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809269',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809269',
- },
- userProfile: {
- userId: '15685187',
- displayName: 'andersen100',
- webUrl: 'https://profile.theguardian.com/user/id/15685187',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15685187',
- avatar: 'https://avatar.guim.co.uk/user/15685187',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15685187',
- badge: [],
- },
- },
- {
- id: 138809504,
- body: 'True, these NHS workers are the real patriots of our country. It’s an absolute disgrace how this government of shysters continually undermine the work they do.
',
- date: '09 March 2020 7:25pm',
- isoDateTime: '2020-03-09T19:25:50Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809504',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809504',
- numRecommends: 48,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809269',
- isoDateTime: '2020-03-09T19:09:11Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809269',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809269',
- },
- userProfile: {
- userId: '12561963',
- displayName: 'foralltime',
- webUrl: 'https://profile.theguardian.com/user/id/12561963',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12561963',
- avatar: 'https://avatar.guim.co.uk/user/12561963',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12561963',
- badge: [],
- },
- },
- {
- id: 138809565,
- body: "Let's start with getting all the HCPs employed by Crapita, Maximus and ATOS doing what they were trained for rather than making life shitter for sick and disabled people. They are all registered, after all!
",
- date: '09 March 2020 7:29pm',
- isoDateTime: '2020-03-09T19:29:25Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809565',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809565',
- numRecommends: 14,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809269',
- isoDateTime: '2020-03-09T19:09:11Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809269',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809269',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138809589,
- body: 'But then who would torment the sick and disabled?
',
- date: '09 March 2020 7:30pm',
- isoDateTime: '2020-03-09T19:30:55Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809589',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809589',
- numRecommends: 11,
- isHighlighted: false,
- responseTo: {
- displayName: 'justamentalpatient',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809565',
- isoDateTime: '2020-03-09T19:29:25Z',
- date: '09 March 2020 7:29pm',
- commentId: '138809565',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809565',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138809713,
- body: 'Most people don’t realise it’s NHS resources they should be worrying about.
',
- date: '09 March 2020 7:38pm',
- isoDateTime: '2020-03-09T19:38:17Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809713',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809713',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'bifess',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809367',
- isoDateTime: '2020-03-09T19:17:06Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809367',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809367',
- },
- userProfile: {
- userId: '15463361',
- displayName: 'Daniel Oneill',
- webUrl: 'https://profile.theguardian.com/user/id/15463361',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15463361',
- avatar: 'https://avatar.guim.co.uk/user/15463361',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15463361',
- badge: [],
- },
- },
- {
- id: 138809914,
- body: 'The DWP will still have "decision makers" and "auditors".
',
- date: '09 March 2020 7:49pm',
- isoDateTime: '2020-03-09T19:49:12Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809914',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809914',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809589',
- isoDateTime: '2020-03-09T19:30:55Z',
- date: '09 March 2020 7:30pm',
- commentId: '138809589',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809589',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138810072,
- body: 'How can our unvaccinated NHS staff possibly deal with an influx of huge numbers of infectious and seriously ill patients?
',
- date: '09 March 2020 7:58pm',
- isoDateTime: '2020-03-09T19:58:52Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810072',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810072',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809269',
- isoDateTime: '2020-03-09T19:09:11Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809269',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809269',
- },
- userProfile: {
- userId: '101756861',
- displayName: 'Bebo21',
- webUrl: 'https://profile.theguardian.com/user/id/101756861',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101756861',
- avatar: 'https://avatar.guim.co.uk/user/101756861',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101756861',
- badge: [],
- },
- },
- {
- id: 138810102,
- body: 'Care to point out where I made that argument
',
- date: '09 March 2020 8:00pm',
- isoDateTime: '2020-03-09T20:00:36Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810102',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810102',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'Bebo21',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810072',
- isoDateTime: '2020-03-09T19:58:52Z',
- date: '09 March 2020 7:58pm',
- commentId: '138810072',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810072',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138810410,
- body: "Jeremy Hunt's treatment of the Junior Doctors should be a stark reminder of the Tories attitude towards health workers. If they truly appreciated the hard work and dedication of NHS staff this Government would have ensured proper funding. Now that we are at the early stages of a potential health crisis I, and no doubt many others, await real and substantial funding to ensure the people of this Country receive the care they need during these very worrying times. Takes a deep intake of breath before exhaling!
",
- date: '09 March 2020 8:17pm',
- isoDateTime: '2020-03-09T20:17:16Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810410',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810410',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'foralltime',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809504',
- isoDateTime: '2020-03-09T19:25:50Z',
- date: '09 March 2020 7:25pm',
- commentId: '138809504',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809504',
- },
- userProfile: {
- userId: '4260062',
- displayName: 'daffers56',
- webUrl: 'https://profile.theguardian.com/user/id/4260062',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4260062',
- avatar: 'https://avatar.guim.co.uk/user/4260062',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4260062',
- badge: [],
- },
- },
- {
- id: 138810430,
- body: 'We will do our best but other patients will suffer . Operation will be cancelled, treatments delayed and emergencies moved around away from local hospitals.
',
- date: '09 March 2020 8:18pm',
- isoDateTime: '2020-03-09T20:18:30Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810430',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810430',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809269',
- isoDateTime: '2020-03-09T19:09:11Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809269',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809269',
- },
- userProfile: {
- userId: '13830442',
- displayName: 'kingtwist',
- webUrl: 'https://profile.theguardian.com/user/id/13830442',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13830442',
- avatar: 'https://avatar.guim.co.uk/user/13830442',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/13830442',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 12,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 11,
+ },
+ {
+ id: 46810367,
+ body: 'Test from the API -1503725237
',
+ date: '29 January 2015 11:38am',
+ isoDateTime: '2015-01-29T11:38:56Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/46810367',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/46810367',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809272,
- body: 'Begone ye self-serving Tory isolationists.
Never has there been a more significant time for Big Government and public health provision. Nature has spoken.
',
- date: '09 March 2020 7:09pm',
- isoDateTime: '2020-03-09T19:09:28Z',
+ id: 47135441,
+ body: 'Another comment
',
+ date: '05 February 2015 2:53pm',
+ isoDateTime: '2015-02-05T14:53:38Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809272',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809272',
- numRecommends: 45,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/47135441',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/47135441',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '13239086',
- displayName: 'blipvert',
- webUrl: 'https://profile.theguardian.com/user/id/13239086',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13239086',
- avatar: 'https://avatar.guim.co.uk/user/13239086',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/13239086',
+ userId: '10187427',
+ displayName: 'Jholder112233',
+ webUrl: 'https://profile.theguardian.com/user/id/10187427',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10187427',
+ avatar: 'https://avatar.guim.co.uk/user/10187427',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/10187427',
badge: [],
},
- responses: [
- {
- id: 138809396,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:19pm',
- isoDateTime: '2020-03-09T19:19:03Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809396',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809396',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'blipvert',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809272',
- isoDateTime: '2020-03-09T19:09:28Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809272',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809272',
- },
- userProfile: {
- userId: '13093174',
- displayName: 'Cricketnut',
- webUrl: 'https://profile.theguardian.com/user/id/13093174',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13093174',
- avatar: 'https://avatar.guim.co.uk/user/13093174',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/13093174',
- badge: [],
- },
- },
- {
- id: 138809487,
- body: 'There are few Libertarians and small government advocates during pandemics.
',
- date: '09 March 2020 7:24pm',
- isoDateTime: '2020-03-09T19:24:46Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809487',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809487',
- numRecommends: 30,
- isHighlighted: false,
- responseTo: {
- displayName: 'blipvert',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809272',
- isoDateTime: '2020-03-09T19:09:28Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809272',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809272',
- },
- userProfile: {
- userId: '100102208',
- displayName: 'AJVC1991',
- webUrl: 'https://profile.theguardian.com/user/id/100102208',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100102208',
- avatar: 'https://avatar.guim.co.uk/user/100102208',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100102208',
- badge: [],
- },
- },
- {
- id: 138809896,
- body: 'What?
',
- date: '09 March 2020 7:48pm',
- isoDateTime: '2020-03-09T19:48:31Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809896',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809896',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'blipvert',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809272',
- isoDateTime: '2020-03-09T19:09:28Z',
- date: '09 March 2020 7:09pm',
- commentId: '138809272',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809272',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138810191,
- body: 'Or at least, they don\'t flaunt their allegiance to Britannia Unchained and Rand quite so obviously. What awaits if we continue to act as if "there are individual men and women and there are families" and no responsibility to a wider society?
',
- date: '09 March 2020 8:05pm',
- isoDateTime: '2020-03-09T20:05:54Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810191',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810191',
- numRecommends: 20,
- isHighlighted: false,
- responseTo: {
- displayName: 'AJVC1991',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809487',
- isoDateTime: '2020-03-09T19:24:46Z',
- date: '09 March 2020 7:24pm',
- commentId: '138809487',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809487',
- },
- userProfile: {
- userId: '12298092',
- displayName: '_jhfta_',
- webUrl: 'https://profile.theguardian.com/user/id/12298092',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12298092',
- avatar: 'https://avatar.guim.co.uk/user/12298092',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12298092',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 5,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 1,
- responseCount: 4,
+ },
+ {
+ id: 47135508,
+ body: 'Final comment here
',
+ date: '05 February 2015 2:54pm',
+ isoDateTime: '2015-02-05T14:54:50Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/47135508',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/47135508',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '10187427',
+ displayName: 'Jholder112233',
+ webUrl: 'https://profile.theguardian.com/user/id/10187427',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10187427',
+ avatar: 'https://avatar.guim.co.uk/user/10187427',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/10187427',
+ badge: [],
},
},
{
- id: 138809276,
- body: "You're a worthy champion of the NHS Polly. Bravo.
",
- date: '09 March 2020 7:10pm',
- isoDateTime: '2020-03-09T19:10:13Z',
+ id: 47512449,
+ body: 'Test comment.
',
+ date: '13 February 2015 2:11pm',
+ isoDateTime: '2015-02-13T14:11:54Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809276',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809276',
- numRecommends: 38,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/47512449',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/47512449',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '2031734',
- displayName: 'crosby99',
- webUrl: 'https://profile.theguardian.com/user/id/2031734',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2031734',
- avatar: 'https://avatar.guim.co.uk/user/2031734',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/2031734',
+ userId: '10187427',
+ displayName: 'Jholder112233',
+ webUrl: 'https://profile.theguardian.com/user/id/10187427',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10187427',
+ avatar: 'https://avatar.guim.co.uk/user/10187427',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/10187427',
badge: [],
},
},
{
- id: 138809278,
- body: "Why don't The Guardian (and all other high quality papers), concurrently and with equal vigor, report on flu deaths, cancer deaths, car crashes? Or for that matter, freak accidents? How many freak accidents have occurred since the 5 people have died of Coronavirus?
",
- date: '09 March 2020 7:10pm',
- isoDateTime: '2020-03-09T19:10:45Z',
+ id: 47512495,
+ body: 'And another
',
+ date: '13 February 2015 2:12pm',
+ isoDateTime: '2015-02-13T14:12:42Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809278',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- numRecommends: 50,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/47512495',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/47512495',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '1787464',
- displayName: 'bravobravoboooo',
- webUrl: 'https://profile.theguardian.com/user/id/1787464',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1787464',
- avatar: 'https://avatar.guim.co.uk/user/1787464',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/1787464',
- badge: [],
- },
- responses: [
- {
- id: 138809343,
- body: "Flu's reported on when it strains our NHS. This will be much worse for the NHS in affected areas if/when we get numbers like China and Italy.
",
- date: '09 March 2020 7:15pm',
- isoDateTime: '2020-03-09T19:15:47Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809343',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809343',
- numRecommends: 42,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '12567954',
- displayName: 'sausageweasel',
- webUrl: 'https://profile.theguardian.com/user/id/12567954',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12567954',
- avatar: 'https://avatar.guim.co.uk/user/12567954',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12567954',
- badge: [],
- },
- },
- {
- id: 138809360,
- body: 'Are freak accidents catching?
',
- date: '09 March 2020 7:16pm',
- isoDateTime: '2020-03-09T19:16:43Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809360',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809360',
- numRecommends: 71,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '2966817',
- displayName: 'philipphilip99',
- webUrl: 'https://profile.theguardian.com/user/id/2966817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2966817',
- avatar: 'https://avatar.guim.co.uk/user/2966817',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2966817',
- badge: [],
- },
- },
- {
- id: 138809390,
- body: 'Anything to take the focus off our desperately poor government and the oaf pretending to be pm
',
- date: '09 March 2020 7:18pm',
- isoDateTime: '2020-03-09T19:18:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809390',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809390',
- numRecommends: 46,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '12360820',
- displayName: 'drragon',
- webUrl: 'https://profile.theguardian.com/user/id/12360820',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12360820',
- avatar: 'https://avatar.guim.co.uk/user/12360820',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12360820',
- badge: [],
- },
- },
- {
- id: 138809393,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:18pm',
- isoDateTime: '2020-03-09T19:18:54Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809393',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809393',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '101763863',
- displayName: 'DarthRaider',
- webUrl: 'https://profile.theguardian.com/user/id/101763863',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101763863',
- avatar: 'https://avatar.guim.co.uk/user/101763863',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101763863',
- badge: [],
- },
- },
- {
- id: 138809457,
- body: "Coalition, Tory majority, brexit, bigger Tory majority
I'd say accidents and foolhardiness is proving to be catching
",
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:36Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809457',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809457',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809360',
- isoDateTime: '2020-03-09T19:16:43Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809360',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809360',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138809460,
- body: ' Anything to take the focus off our desperately poor government and the oaf pretending to be pm
Exactly, drragon, exactly. ;-)
',
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:38Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809460',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809460',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'drragon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809390',
- isoDateTime: '2020-03-09T19:18:35Z',
- date: '09 March 2020 7:18pm',
- commentId: '138809390',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809390',
- },
- userProfile: {
- userId: '10801728',
- displayName: 'UnrepentantPunk',
- webUrl: 'https://profile.theguardian.com/user/id/10801728',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10801728',
- avatar: 'https://avatar.guim.co.uk/user/10801728',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10801728',
- badge: [],
- },
- },
- {
- id: 138809466,
- body: "'freak accidents'
i think your comment counts as one such event.
",
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:57Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809466',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809466',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '4636148',
- displayName: 'DismantleTrident',
- webUrl: 'https://profile.theguardian.com/user/id/4636148',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4636148',
- avatar: 'https://avatar.guim.co.uk/user/4636148',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4636148',
- badge: [],
- },
- },
- {
- id: 138809493,
- body: 'Agreed. The media are ripping apart our society with greater vigour than the disease itself. This is NUTS!
',
- date: '09 March 2020 7:25pm',
- isoDateTime: '2020-03-09T19:25:06Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809493',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809493',
- numRecommends: 15,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '11992544',
- displayName: 'Wiretrip',
- webUrl: 'https://profile.theguardian.com/user/id/11992544',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11992544',
- avatar: 'https://avatar.guim.co.uk/user/11992544',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11992544',
- badge: [],
- },
- },
- {
- id: 138809495,
- body: 'None of those are going to result in 20% of the working population being off sick at the same time.
',
- date: '09 March 2020 7:25pm',
- isoDateTime: '2020-03-09T19:25:15Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809495',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809495',
- numRecommends: 26,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '15322830',
- displayName: 'Anonymous_John',
- webUrl: 'https://profile.theguardian.com/user/id/15322830',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15322830',
- avatar: 'https://avatar.guim.co.uk/user/15322830',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15322830',
- badge: [],
- },
- },
- {
- id: 138809506,
- body: '"Are freak accidents catching?" No but rank stupidity appears to be...
',
- date: '09 March 2020 7:25pm',
- isoDateTime: '2020-03-09T19:25:55Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809506',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809506',
- numRecommends: 11,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809360',
- isoDateTime: '2020-03-09T19:16:43Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809360',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809360',
- },
- userProfile: {
- userId: '11992544',
- displayName: 'Wiretrip',
- webUrl: 'https://profile.theguardian.com/user/id/11992544',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11992544',
- avatar: 'https://avatar.guim.co.uk/user/11992544',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11992544',
- badge: [],
- },
- },
- {
- id: 138809507,
- body: 'This is a pandemic. It’s an airborne virus. Very contagious. Most of the population will contract it over the coming weeks/months. It will affect MOST of the population. Do you not understand?
',
- date: '09 March 2020 7:25pm',
- isoDateTime: '2020-03-09T19:25:59Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809507',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809507',
- numRecommends: 31,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '2660419',
- displayName: 'Wilsonbeans',
- webUrl: 'https://profile.theguardian.com/user/id/2660419',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2660419',
- avatar: 'https://avatar.guim.co.uk/user/2660419',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2660419',
- badge: [],
- },
- },
- {
- id: 138809511,
- body: 'Thanks dude. You always show these sociopaths for what they are. Keep well
',
- date: '09 March 2020 7:26pm',
- isoDateTime: '2020-03-09T19:26:08Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809511',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809511',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'UnrepentantPunk',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809460',
- isoDateTime: '2020-03-09T19:22:38Z',
- date: '09 March 2020 7:22pm',
- commentId: '138809460',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809460',
- },
- userProfile: {
- userId: '12360820',
- displayName: 'drragon',
- webUrl: 'https://profile.theguardian.com/user/id/12360820',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12360820',
- avatar: 'https://avatar.guim.co.uk/user/12360820',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12360820',
- badge: [],
- },
- },
- {
- id: 138809520,
- body: 'And yours is the tailigating car that causes the pileup...
',
- date: '09 March 2020 7:26pm',
- isoDateTime: '2020-03-09T19:26:53Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809520',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809520',
- numRecommends: 1,
- isHighlighted: false,
- responseTo: {
- displayName: 'DismantleTrident',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809466',
- isoDateTime: '2020-03-09T19:22:57Z',
- date: '09 March 2020 7:22pm',
- commentId: '138809466',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809466',
- },
- userProfile: {
- userId: '11992544',
- displayName: 'Wiretrip',
- webUrl: 'https://profile.theguardian.com/user/id/11992544',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11992544',
- avatar: 'https://avatar.guim.co.uk/user/11992544',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11992544',
- badge: [],
- },
- },
- {
- id: 138809543,
- body: "Deaths in Italy are now running at 100 per day.
Our diagnosed cases are growing at the same rate as Italy's did, just two weeks later.
Will you come back on here in the weeks time and laugh off those extra 1000 deaths?
",
- date: '09 March 2020 7:28pm',
- isoDateTime: '2020-03-09T19:28:16Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809543',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809543',
- numRecommends: 30,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '13268043',
- displayName: 'Bicbiro',
- webUrl: 'https://profile.theguardian.com/user/id/13268043',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13268043',
- avatar: 'https://avatar.guim.co.uk/user/13268043',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/13268043',
- badge: [],
- },
- },
- {
- id: 138809993,
- body: " Agreed. The media are ripping apart our society with greater vigour than the disease itself. This is NUTS!
From my perspective the media along with the Tories have been ripping this country apart for a long time now.
The strivers versus skivers rhetoric has been used to rip away income from those at the bottom of our society.
Brexit has been used to rip apart our society in many different ways.
This kind of thing has been happening lots and lots and to my way of thinking it is about time that the Tories manned up and accepted the responsibility that they have for the impact that they have had on those at the bottom of our society.
Funny isn't it that when the government wants to tear apart society it is all for it yet when the narrative turns against them all of a sudden it is a different story.
",
- date: '09 March 2020 7:54pm',
- isoDateTime: '2020-03-09T19:54:51Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809993',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809993',
- numRecommends: 15,
- isHighlighted: false,
- responseTo: {
- displayName: 'Wiretrip',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809493',
- isoDateTime: '2020-03-09T19:25:06Z',
- date: '09 March 2020 7:25pm',
- commentId: '138809493',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809493',
- },
- userProfile: {
- userId: '10085855',
- displayName: 'bifess',
- webUrl: 'https://profile.theguardian.com/user/id/10085855',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10085855',
- avatar: 'https://avatar.guim.co.uk/user/10085855',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10085855',
- badge: [],
- },
- },
- {
- id: 138810023,
- body: 'Agreed!
',
- date: '09 March 2020 7:56pm',
- isoDateTime: '2020-03-09T19:56:21Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810023',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810023',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'bifess',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809993',
- isoDateTime: '2020-03-09T19:54:51Z',
- date: '09 March 2020 7:54pm',
- commentId: '138809993',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809993',
- },
- userProfile: {
- userId: '11992544',
- displayName: 'Wiretrip',
- webUrl: 'https://profile.theguardian.com/user/id/11992544',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11992544',
- avatar: 'https://avatar.guim.co.uk/user/11992544',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11992544',
- badge: [],
- },
- },
- {
- id: 138810086,
- body: '"Deaths in Italy are now running at 100 per day." Stop it! That\'s exactly the way the tabloid media would present it. There were 97 deaths today. That is not the same a "per day". If 100 people die there tomorrow, then you can come back to me.
',
- date: '09 March 2020 7:59pm',
- isoDateTime: '2020-03-09T19:59:50Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810086',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810086',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'Bicbiro',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809543',
- isoDateTime: '2020-03-09T19:28:16Z',
- date: '09 March 2020 7:28pm',
- commentId: '138809543',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809543',
- },
- userProfile: {
- userId: '11992544',
- displayName: 'Wiretrip',
- webUrl: 'https://profile.theguardian.com/user/id/11992544',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11992544',
- avatar: 'https://avatar.guim.co.uk/user/11992544',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11992544',
- badge: [],
- },
- },
- {
- id: 138810238,
- body: "Because it's difficult to make political capital from those. Whereas whipping up irresponsible levels of fear and panic is justified in their eyes as it provides opportunity for Tory bashing.
",
- date: '09 March 2020 8:08pm',
- isoDateTime: '2020-03-09T20:08:29Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810238',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810238',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '100456937',
- displayName: 'Testament235',
- webUrl: 'https://profile.theguardian.com/user/id/100456937',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100456937',
- avatar: 'https://avatar.guim.co.uk/user/100456937',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100456937',
- badge: [],
- },
- },
- {
- id: 138810275,
- body: 'Your post is pure hyperbole.
',
- date: '09 March 2020 8:10pm',
- isoDateTime: '2020-03-09T20:10:19Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810275',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810275',
- numRecommends: 6,
- isHighlighted: false,
- responseTo: {
- displayName: 'Wilsonbeans',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809507',
- isoDateTime: '2020-03-09T19:25:59Z',
- date: '09 March 2020 7:25pm',
- commentId: '138809507',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809507',
- },
- userProfile: {
- userId: '100456937',
- displayName: 'Testament235',
- webUrl: 'https://profile.theguardian.com/user/id/100456937',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100456937',
- avatar: 'https://avatar.guim.co.uk/user/100456937',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100456937',
- badge: [],
- },
- },
- {
- id: 138810411,
- body: "I had to attend a ladder training course today, laid on by American company. Apparently, according to the video, 6000 Americans die every year falling of a ladder. Puts coronavirus into perspective, but it won't sell a single newspaper.
",
- date: '09 March 2020 8:17pm',
- isoDateTime: '2020-03-09T20:17:17Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810411',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810411',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '11926516',
- displayName: 'theseligsussex',
- webUrl: 'https://profile.theguardian.com/user/id/11926516',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11926516',
- avatar: 'https://avatar.guim.co.uk/user/11926516',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11926516',
- badge: [],
- },
- },
- {
- id: 138810541,
- body: 'Please read this posted by someone above: https://mobile.twitter.com/silviast9/status/1236933818654896129
This disease is very, very serious and people trying to minimise what is going to happen are going to make it worse as people will ignore medical advice to self-isolate and avoid social contact.
There is no need for most people to worry too much, but it is absolutely vital that people are extremely clear that if the spread of the disease is not controlled by them personally following medical advice, the NHS will not be able to cope.
',
- date: '09 March 2020 8:23pm',
- isoDateTime: '2020-03-09T20:23:58Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810541',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810541',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '12611808',
- displayName: 'Shortordercook',
- webUrl: 'https://profile.theguardian.com/user/id/12611808',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12611808',
- avatar: 'https://avatar.guim.co.uk/user/12611808',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12611808',
- badge: [],
- },
- },
- {
- id: 138810661,
- body: "Thanks, drragon, as do you. I believe that's the attraction between us. *blush* *runs out*
",
- date: '09 March 2020 8:30pm',
- isoDateTime: '2020-03-09T20:30:16Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810661',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810661',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'drragon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809511',
- isoDateTime: '2020-03-09T19:26:08Z',
- date: '09 March 2020 7:26pm',
- commentId: '138809511',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809511',
- },
- userProfile: {
- userId: '10801728',
- displayName: 'UnrepentantPunk',
- webUrl: 'https://profile.theguardian.com/user/id/10801728',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10801728',
- avatar: 'https://avatar.guim.co.uk/user/10801728',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10801728',
- badge: [],
- },
- },
- {
- id: 138810864,
- body: " I had to attend a ladder training course today, laid on by American company. Apparently, according to the video, 6000 Americans die every year falling of a ladder. Puts coronavirus into perspective, but it won't sell a single newspaper.
*points and laughs* You can't catch 'falling off a ladder' from others, can you?
",
- date: '09 March 2020 8:42pm',
- isoDateTime: '2020-03-09T20:42:38Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810864',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810864',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'theseligsussex',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810411',
- isoDateTime: '2020-03-09T20:17:17Z',
- date: '09 March 2020 8:17pm',
- commentId: '138810411',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810411',
- },
- userProfile: {
- userId: '10801728',
- displayName: 'UnrepentantPunk',
- webUrl: 'https://profile.theguardian.com/user/id/10801728',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10801728',
- avatar: 'https://avatar.guim.co.uk/user/10801728',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10801728',
- badge: [],
- },
- },
- {
- id: 138810955,
- body: 'Yes, car crashes are so contagious...
And you can cure cancer by washing your hands.
',
- date: '09 March 2020 8:46pm',
- isoDateTime: '2020-03-09T20:46:40Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810955',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810955',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'bravobravoboooo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809278',
- isoDateTime: '2020-03-09T19:10:45Z',
- date: '09 March 2020 7:10pm',
- commentId: '138809278',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809278',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- {
- id: 138811091,
- body: "It was 133 yesterday. That's averaging over 100 per day.
If you want to make the case you could say it's going down now but with today's lockdown I guess you don't want to do that.
",
- date: '09 March 2020 8:54pm',
- isoDateTime: '2020-03-09T20:54:08Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811091',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811091',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'Wiretrip',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810086',
- isoDateTime: '2020-03-09T19:59:50Z',
- date: '09 March 2020 7:59pm',
- commentId: '138810086',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810086',
- },
- userProfile: {
- userId: '13268043',
- displayName: 'Bicbiro',
- webUrl: 'https://profile.theguardian.com/user/id/13268043',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13268043',
- avatar: 'https://avatar.guim.co.uk/user/13268043',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/13268043',
- badge: [],
- },
- },
- {
- id: 138811422,
- body: 'OK fair enough. I stand corrected.
',
- date: '09 March 2020 9:11pm',
- isoDateTime: '2020-03-09T21:11:59Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811422',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811422',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Bicbiro',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138811091',
- isoDateTime: '2020-03-09T20:54:08Z',
- date: '09 March 2020 8:54pm',
- commentId: '138811091',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138811091',
- },
- userProfile: {
- userId: '11992544',
- displayName: 'Wiretrip',
- webUrl: 'https://profile.theguardian.com/user/id/11992544',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11992544',
- avatar: 'https://avatar.guim.co.uk/user/11992544',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11992544',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 27,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 1,
- responseCount: 26,
- },
- },
- {
- id: 138809284,
- body: '40,000 new hospitals and 50 new nurses any day now
',
- date: '09 March 2020 7:11pm',
- isoDateTime: '2020-03-09T19:11:18Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809284',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809284',
- numRecommends: 108,
- isHighlighted: false,
- userProfile: {
- userId: '11113939',
- displayName: 'MaoZedongInCheek',
- webUrl: 'https://profile.theguardian.com/user/id/11113939',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11113939',
- avatar: 'https://avatar.guim.co.uk/user/11113939',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/11113939',
- badge: [],
- },
- responses: [
- {
- id: 138809541,
- body: 'To go with the extra £350 million a week we were promised.
',
- date: '09 March 2020 7:28pm',
- isoDateTime: '2020-03-09T19:28:09Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809541',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809541',
- numRecommends: 83,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809284',
- isoDateTime: '2020-03-09T19:11:18Z',
- date: '09 March 2020 7:11pm',
- commentId: '138809284',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809284',
- },
- userProfile: {
- userId: '4255554',
- displayName: 'Strummered',
- webUrl: 'https://profile.theguardian.com/user/id/4255554',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4255554',
- avatar: 'https://avatar.guim.co.uk/user/4255554',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4255554',
- badge: [],
- },
- },
- {
- id: 138809609,
- body: 'Countervaccines ordered by the home office
',
- date: '09 March 2020 7:31pm',
- isoDateTime: '2020-03-09T19:31:58Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809609',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809609',
- numRecommends: 30,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809284',
- isoDateTime: '2020-03-09T19:11:18Z',
- date: '09 March 2020 7:11pm',
- commentId: '138809284',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809284',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138809766,
- body: 'Soon we can stop paying for prescriptions. Gisela Stuart said we could.
',
- date: '09 March 2020 7:41pm',
- isoDateTime: '2020-03-09T19:41:04Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809766',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809766',
- numRecommends: 28,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809284',
- isoDateTime: '2020-03-09T19:11:18Z',
- date: '09 March 2020 7:11pm',
- commentId: '138809284',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809284',
- },
- userProfile: {
- userId: '15264988',
- displayName: 'SueSharpe',
- webUrl: 'https://profile.theguardian.com/user/id/15264988',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15264988',
- avatar: 'https://avatar.guim.co.uk/user/15264988',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15264988',
- badge: [],
- },
- },
- {
- id: 138809927,
- body: 'Ha!
',
- date: '09 March 2020 7:50pm',
- isoDateTime: '2020-03-09T19:50:32Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809927',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809927',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809609',
- isoDateTime: '2020-03-09T19:31:58Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809609',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809609',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138811578,
- body: "Stop paying prescriptions? - I haven't paid for a prescription in a nearly a decade!
Oh, hold on. I'm in Scotland, and Nicola Sturgeon who introduced this policy as health secretary in 2011.... following Wales in 2007, and Ireland in 2010. So it is only 1/4 of the UK nations that pays for prescriptions................
",
- date: '09 March 2020 9:19pm',
- isoDateTime: '2020-03-09T21:19:00Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811578',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811578',
- numRecommends: 14,
- isHighlighted: false,
- responseTo: {
- displayName: 'SueSharpe',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809766',
- isoDateTime: '2020-03-09T19:41:04Z',
- date: '09 March 2020 7:41pm',
- commentId: '138809766',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809766',
- },
- userProfile: {
- userId: '14318311',
- displayName: 'abonimouse',
- webUrl: 'https://profile.theguardian.com/user/id/14318311',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14318311',
- avatar: 'https://avatar.guim.co.uk/user/14318311',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14318311',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 6,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 5,
- },
- },
- {
- id: 138809294,
- body: 'Oh and no cooperation with those evil Europeans who want to work together in mutual interests
',
- date: '09 March 2020 7:12pm',
- isoDateTime: '2020-03-09T19:12:10Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809294',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809294',
- numRecommends: 95,
- isHighlighted: false,
- userProfile: {
- userId: '11113939',
- displayName: 'MaoZedongInCheek',
- webUrl: 'https://profile.theguardian.com/user/id/11113939',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11113939',
- avatar: 'https://avatar.guim.co.uk/user/11113939',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/11113939',
- badge: [],
- },
- responses: [
- {
- id: 138809318,
- body: 'And we are leaving the EU December 2020- and walking out of negotiations in June! We are all alone, in a ditch with Boris
',
- date: '09 March 2020 7:14pm',
- isoDateTime: '2020-03-09T19:14:23Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809318',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809318',
- numRecommends: 68,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809294',
- isoDateTime: '2020-03-09T19:12:10Z',
- date: '09 March 2020 7:12pm',
- commentId: '138809294',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809294',
- },
- userProfile: {
- userId: '17964816',
- displayName: 'Waterllili',
- webUrl: 'https://profile.theguardian.com/user/id/17964816',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17964816',
- avatar: 'https://avatar.guim.co.uk/user/17964816',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17964816',
- badge: [],
- },
- },
- {
- id: 138809370,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:17pm',
- isoDateTime: '2020-03-09T19:17:12Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809370',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809370',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809294',
- isoDateTime: '2020-03-09T19:12:10Z',
- date: '09 March 2020 7:12pm',
- commentId: '138809294',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809294',
- },
- userProfile: {
- userId: '101763863',
- displayName: 'DarthRaider',
- webUrl: 'https://profile.theguardian.com/user/id/101763863',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101763863',
- avatar: 'https://avatar.guim.co.uk/user/101763863',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101763863',
- badge: [],
- },
- },
- {
- id: 138809437,
- body: "yeah it's their fault the medicines agency upped sticks and moved across the ditch...
",
- date: '09 March 2020 7:21pm',
- isoDateTime: '2020-03-09T19:21:23Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809437',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809437',
- numRecommends: 14,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809294',
- isoDateTime: '2020-03-09T19:12:10Z',
- date: '09 March 2020 7:12pm',
- commentId: '138809294',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809294',
- },
- userProfile: {
- userId: '4636148',
- displayName: 'DismantleTrident',
- webUrl: 'https://profile.theguardian.com/user/id/4636148',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4636148',
- avatar: 'https://avatar.guim.co.uk/user/4636148',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4636148',
- badge: [],
- },
- },
- {
- id: 138809445,
- body: "Can you imagine the state of the country in the event of a hard Brexit? We've had a glimpse and it isn't pretty. It will be horrific.
",
- date: '09 March 2020 7:21pm',
- isoDateTime: '2020-03-09T19:21:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809445',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809445',
- numRecommends: 20,
- isHighlighted: false,
- responseTo: {
- displayName: 'Waterllili',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809318',
- isoDateTime: '2020-03-09T19:14:23Z',
- date: '09 March 2020 7:14pm',
- commentId: '138809318',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809318',
- },
- userProfile: {
- userId: '4255554',
- displayName: 'Strummered',
- webUrl: 'https://profile.theguardian.com/user/id/4255554',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4255554',
- avatar: 'https://avatar.guim.co.uk/user/4255554',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4255554',
- badge: [],
- },
- },
- {
- id: 138809492,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:25pm',
- isoDateTime: '2020-03-09T19:25:02Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809492',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809492',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809445',
- isoDateTime: '2020-03-09T19:21:35Z',
- date: '09 March 2020 7:21pm',
- commentId: '138809445',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809445',
- },
- userProfile: {
- userId: '101763863',
- displayName: 'DarthRaider',
- webUrl: 'https://profile.theguardian.com/user/id/101763863',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101763863',
- avatar: 'https://avatar.guim.co.uk/user/101763863',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101763863',
- badge: [],
- },
- },
- {
- id: 138809553,
- body: 'If only we could get additional doctors and nurses from Northern Italy!
',
- date: '09 March 2020 7:28pm',
- isoDateTime: '2020-03-09T19:28:49Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809553',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809553',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809294',
- isoDateTime: '2020-03-09T19:12:10Z',
- date: '09 March 2020 7:12pm',
- commentId: '138809294',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809294',
- },
- userProfile: {
- userId: '101586975',
- displayName: 'Asifbymagic',
- webUrl: 'https://profile.theguardian.com/user/id/101586975',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101586975',
- avatar: 'https://avatar.guim.co.uk/user/101586975',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101586975',
- badge: [],
- },
- },
- {
- id: 138809617,
- body: 'They say Crises are a good time to bury bad news. The unrelenting undermining of EU/UK negotiations by this Gov is under way and no one is crying wolf- just Lisa Nandy did today mention a delay.
',
- date: '09 March 2020 7:32pm',
- isoDateTime: '2020-03-09T19:32:42Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809617',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809617',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'DismantleTrident',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809437',
- isoDateTime: '2020-03-09T19:21:23Z',
- date: '09 March 2020 7:21pm',
- commentId: '138809437',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809437',
- },
- userProfile: {
- userId: '17964816',
- displayName: 'Waterllili',
- webUrl: 'https://profile.theguardian.com/user/id/17964816',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17964816',
- avatar: 'https://avatar.guim.co.uk/user/17964816',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17964816',
- badge: [],
- },
- },
- {
- id: 138809656,
- body: 'Did de pfeffel and Cummins come up with this? Brexit first, send home the dirty furriners next followed by release the virus then hire all the unskilled, unemployed as nurses and doctors on zhc. Genius!
',
- date: '09 March 2020 7:34pm',
- isoDateTime: '2020-03-09T19:34:52Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809656',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809656',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809294',
- isoDateTime: '2020-03-09T19:12:10Z',
- date: '09 March 2020 7:12pm',
- commentId: '138809294',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809294',
- },
- userProfile: {
- userId: '12698069',
- displayName: 'simjim091011',
- webUrl: 'https://profile.theguardian.com/user/id/12698069',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12698069',
- avatar: 'https://avatar.guim.co.uk/user/12698069',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12698069',
- badge: [],
- },
- },
- {
- id: 138809661,
- body: "I'd love them to announce a delay. It'd be like the scene at the end of Kingsman with brexiteers exploding
Luckily I have 42 loo rolls to help tidy up
",
- date: '09 March 2020 7:35pm',
- isoDateTime: '2020-03-09T19:35:12Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809661',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809661',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'Waterllili',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809617',
- isoDateTime: '2020-03-09T19:32:42Z',
- date: '09 March 2020 7:32pm',
- commentId: '138809617',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809617',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138809805,
- body: ' Luckily I have 42 loo rolls to help tidy up
That would not even cover the fall out from Johnson alone let alone all the others.
',
- date: '09 March 2020 7:43pm',
- isoDateTime: '2020-03-09T19:43:23Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809805',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809805',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809661',
- isoDateTime: '2020-03-09T19:35:12Z',
- date: '09 March 2020 7:35pm',
- commentId: '138809661',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809661',
- },
- userProfile: {
- userId: '10085855',
- displayName: 'bifess',
- webUrl: 'https://profile.theguardian.com/user/id/10085855',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10085855',
- avatar: 'https://avatar.guim.co.uk/user/10085855',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10085855',
- badge: [],
- },
- },
- {
- id: 138809845,
- body: "I only picked 42 because it's hitchhiker's guide day. I have no intention of cleaning up after brexiteers :D
",
- date: '09 March 2020 7:45pm',
- isoDateTime: '2020-03-09T19:45:42Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809845',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809845',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'bifess',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809805',
- isoDateTime: '2020-03-09T19:43:23Z',
- date: '09 March 2020 7:43pm',
- commentId: '138809805',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809805',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138809866,
- body: '42 rolls? I only have 8! It is going to be a mess up here in Scotland.
',
- date: '09 March 2020 7:47pm',
- isoDateTime: '2020-03-09T19:47:03Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809866',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809866',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809661',
- isoDateTime: '2020-03-09T19:35:12Z',
- date: '09 March 2020 7:35pm',
- commentId: '138809661',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809661',
- },
- userProfile: {
- userId: '17964816',
- displayName: 'Waterllili',
- webUrl: 'https://profile.theguardian.com/user/id/17964816',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17964816',
- avatar: 'https://avatar.guim.co.uk/user/17964816',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17964816',
- badge: [],
- },
- },
- {
- id: 138809977,
- body: "to be fair, Germany and France banned exports of medical supplies. German customs officers just stopped lorries full of surgical masks at their border with Switzerland, despite they were part of a shipment going to Swiss hospitals from manufacturers in the Far East.
Don't place too much hope on European cooperation. It's all well when the weather is fine, but when it's “Germany first” when worst comes to worst.
",
- date: '09 March 2020 7:53pm',
- isoDateTime: '2020-03-09T19:53:46Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809977',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809977',
- numRecommends: 23,
- isHighlighted: false,
- responseTo: {
- displayName: 'MaoZedongInCheek',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809294',
- isoDateTime: '2020-03-09T19:12:10Z',
- date: '09 March 2020 7:12pm',
- commentId: '138809294',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809294',
- },
- userProfile: {
- userId: '16876782',
- displayName: '30624700',
- webUrl: 'https://profile.theguardian.com/user/id/16876782',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16876782',
- avatar: 'https://avatar.guim.co.uk/user/16876782',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16876782',
- badge: [],
- },
- },
- {
- id: 138810132,
- body: "I think I have nine, I bought a new pack a week or so ago. Can't remember if I've opened it yet.
So nah na nah na na
",
- date: '09 March 2020 8:02pm',
- isoDateTime: '2020-03-09T20:02:29Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810132',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810132',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'Waterllili',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809866',
- isoDateTime: '2020-03-09T19:47:03Z',
- date: '09 March 2020 7:47pm',
- commentId: '138809866',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809866',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138810223,
- body: "How can they do that, they aren't independent sovereign nations are they.
",
- date: '09 March 2020 8:07pm',
- isoDateTime: '2020-03-09T20:07:43Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810223',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: '30624700',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809977',
- isoDateTime: '2020-03-09T19:53:46Z',
- date: '09 March 2020 7:53pm',
- commentId: '138809977',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809977',
- },
- userProfile: {
- userId: '101693558',
- displayName: 'BritInStuttgart',
- webUrl: 'https://profile.theguardian.com/user/id/101693558',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101693558',
- avatar: 'https://avatar.guim.co.uk/user/101693558',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101693558',
- badge: [],
- },
- },
- {
- id: 138810401,
- body: 'Switzerland is not in Europe last time I looked
',
- date: '09 March 2020 8:16pm',
- isoDateTime: '2020-03-09T20:16:46Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810401',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810401',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: '30624700',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809977',
- isoDateTime: '2020-03-09T19:53:46Z',
- date: '09 March 2020 7:53pm',
- commentId: '138809977',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809977',
- },
- userProfile: {
- userId: '100760659',
- displayName: 'ajhisc',
- webUrl: 'https://profile.theguardian.com/user/id/100760659',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100760659',
- avatar: 'https://avatar.guim.co.uk/user/100760659',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100760659',
- badge: [],
- },
- },
- {
- id: 138810519,
- body: "I've noticed the pound has fallen 6 cents in a fortnight, despite the crap that Italy (and to a lesser extent France) are going through.
",
- date: '09 March 2020 8:23pm',
- isoDateTime: '2020-03-09T20:23:13Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810519',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810519',
- numRecommends: 6,
- isHighlighted: false,
- responseTo: {
- displayName: 'Waterllili',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809617',
- isoDateTime: '2020-03-09T19:32:42Z',
- date: '09 March 2020 7:32pm',
- commentId: '138809617',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809617',
- },
- userProfile: {
- userId: '3578530',
- displayName: 'EnviroCapitalist',
- webUrl: 'https://profile.theguardian.com/user/id/3578530',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3578530',
- avatar: 'https://avatar.guim.co.uk/user/3578530',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3578530',
- badge: [],
- },
- },
- {
- id: 138810569,
- body: 'What
',
- date: '09 March 2020 8:25pm',
- isoDateTime: '2020-03-09T20:25:34Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810569',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810569',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'ajhisc',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810401',
- isoDateTime: '2020-03-09T20:16:46Z',
- date: '09 March 2020 8:16pm',
- commentId: '138810401',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810401',
- },
- userProfile: {
- userId: '101821137',
- displayName: 'ScotchWoodcock',
- webUrl: 'https://profile.theguardian.com/user/id/101821137',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101821137',
- avatar: 'https://avatar.guim.co.uk/user/101821137',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101821137',
- badge: [],
- },
- },
- {
- id: 138810611,
- body: 'And why would we specifically want to get them from one particular part of another country?
',
- date: '09 March 2020 8:27pm',
- isoDateTime: '2020-03-09T20:27:51Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810611',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810611',
- numRecommends: 1,
- isHighlighted: false,
- responseTo: {
- displayName: 'Asifbymagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809553',
- isoDateTime: '2020-03-09T19:28:49Z',
- date: '09 March 2020 7:28pm',
- commentId: '138809553',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809553',
- },
- userProfile: {
- userId: '100789525',
- displayName: 'slimepants',
- webUrl: 'https://profile.theguardian.com/user/id/100789525',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100789525',
- avatar: 'https://avatar.guim.co.uk/user/100789525',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100789525',
- badge: [],
- },
- },
- {
- id: 138810627,
- body: "I'm presuming he/she meant the EU
",
- date: '09 March 2020 8:28pm',
- isoDateTime: '2020-03-09T20:28:44Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810627',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810627',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'ScotchWoodcock',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810569',
- isoDateTime: '2020-03-09T20:25:34Z',
- date: '09 March 2020 8:25pm',
- commentId: '138810569',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810569',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138810737,
- body: 'Oh thank god I was fucking panicking
',
- date: '09 March 2020 8:35pm',
- isoDateTime: '2020-03-09T20:35:04Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810737',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810737',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810627',
- isoDateTime: '2020-03-09T20:28:44Z',
- date: '09 March 2020 8:28pm',
- commentId: '138810627',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810627',
- },
- userProfile: {
- userId: '101821137',
- displayName: 'ScotchWoodcock',
- webUrl: 'https://profile.theguardian.com/user/id/101821137',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101821137',
- avatar: 'https://avatar.guim.co.uk/user/101821137',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101821137',
- badge: [],
- },
- },
- {
- id: 138810798,
- body: "I'm only guessing. Switzerland may have moved, I don't keep up with geographical news
",
- date: '09 March 2020 8:38pm',
- isoDateTime: '2020-03-09T20:38:19Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810798',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810798',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'ScotchWoodcock',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810737',
- isoDateTime: '2020-03-09T20:35:04Z',
- date: '09 March 2020 8:35pm',
- commentId: '138810737',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810737',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138810916,
- body: 'Taking back control, putting their country first - isn’t that want everyone voted for? And yet when another country does that you imply it is not fair?
',
- date: '09 March 2020 8:45pm',
- isoDateTime: '2020-03-09T20:45:15Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810916',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810916',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: '30624700',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809977',
- isoDateTime: '2020-03-09T19:53:46Z',
- date: '09 March 2020 7:53pm',
- commentId: '138809977',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809977',
- },
- userProfile: {
- userId: '17629940',
- displayName: 'HephzibahTurner',
- webUrl: 'https://profile.theguardian.com/user/id/17629940',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17629940',
- avatar: 'https://avatar.guim.co.uk/user/17629940',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17629940',
- badge: [],
- },
- },
- {
- id: 138811183,
- body: ' Switzerland is not in Europe last time I looked
Well, geographically it is. It\'s not a member of the EU, but as Wiki puts it: "...it participates in the Schengen Area and the European Single Market through bilateral treaties." It would be nice if the UK could negotiate similar treaties, but the demented approach of this government might well result in us crashing out with a No Deal Brexit. In which case, all bets are off.',
- date: '09 March 2020 8:59pm',
- isoDateTime: '2020-03-09T20:59:02Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811183',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811183',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'ajhisc',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810401',
- isoDateTime: '2020-03-09T20:16:46Z',
- date: '09 March 2020 8:16pm',
- commentId: '138810401',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810401',
- },
- userProfile: {
- userId: '4300010',
- displayName: 'Lycidas',
- webUrl: 'https://profile.theguardian.com/user/id/4300010',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4300010',
- avatar: 'https://avatar.guim.co.uk/user/4300010',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4300010',
- badge: [],
- },
- },
- {
- id: 138811241,
- body: ' might well
may well',
- date: '09 March 2020 9:01pm',
- isoDateTime: '2020-03-09T21:01:57Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811241',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811241',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'Lycidas',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138811183',
- isoDateTime: '2020-03-09T20:59:02Z',
- date: '09 March 2020 8:59pm',
- commentId: '138811183',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138811183',
- },
- userProfile: {
- userId: '4300010',
- displayName: 'Lycidas',
- webUrl: 'https://profile.theguardian.com/user/id/4300010',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4300010',
- avatar: 'https://avatar.guim.co.uk/user/4300010',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4300010',
- badge: [],
- },
- },
- {
- id: 138811686,
- body: 'Last time I looked it was in Europe , maybe not the EU .
',
- date: '09 March 2020 9:23pm',
- isoDateTime: '2020-03-09T21:23:52Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811686',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811686',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'ajhisc',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810401',
- isoDateTime: '2020-03-09T20:16:46Z',
- date: '09 March 2020 8:16pm',
- commentId: '138810401',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810401',
- },
- userProfile: {
- userId: '13472066',
- displayName: 'innriver',
- webUrl: 'https://profile.theguardian.com/user/id/13472066',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13472066',
- avatar: 'https://avatar.guim.co.uk/user/13472066',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/13472066',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 27,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 2,
- responseCount: 26,
- },
- },
- {
- id: 138809295,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:12pm',
- isoDateTime: '2020-03-09T19:12:21Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809295',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809295',
- numRecommends: 3,
- isHighlighted: false,
- userProfile: {
- userId: '14815427',
- displayName: 'NotWokeHere',
- webUrl: 'https://profile.theguardian.com/user/id/14815427',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14815427',
- avatar: 'https://avatar.guim.co.uk/user/14815427',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14815427',
- badge: [],
- },
- },
- {
- id: 138809314,
- body: " Take its pulse and it’s short of 100,000 doctors and nurses, with 17,000 beds lost since 2010. Germany has eight beds per 1,000 people , UK only 2.5.
It's utterly disgraceful what the Tories have done to the NHS and country these last ten years. If the NHS and the country manages to cope it will be despite them as the PM and cabinet are neither use nor ornament. In fact they should come with a health warning.
",
- date: '09 March 2020 7:13pm',
- isoDateTime: '2020-03-09T19:13:54Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809314',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- numRecommends: 115,
- isHighlighted: false,
- userProfile: {
- userId: '4255554',
- displayName: 'Strummered',
- webUrl: 'https://profile.theguardian.com/user/id/4255554',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4255554',
- avatar: 'https://avatar.guim.co.uk/user/4255554',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/4255554',
- badge: [],
- },
- responses: [
- {
- id: 138809359,
- body: 'Privatisation by stealth.
US healthcare coming to a location near you.
Soon.
',
- date: '09 March 2020 7:16pm',
- isoDateTime: '2020-03-09T19:16:43Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809359',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809359',
- numRecommends: 57,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '15685187',
- displayName: 'andersen100',
- webUrl: 'https://profile.theguardian.com/user/id/15685187',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15685187',
- avatar: 'https://avatar.guim.co.uk/user/15685187',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15685187',
- badge: [],
- },
- },
- {
- id: 138809473,
- body: 'The question is: Would the different level of ICU beds really make a differene when 10.000 patients may need one? We may see triages in both countries.
The political issue will be more ugly in UK, the demographic not.
',
- date: '09 March 2020 7:23pm',
- isoDateTime: '2020-03-09T19:23:49Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809473',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809473',
- numRecommends: 23,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '11314558',
- displayName: 'Ulenspiegel',
- webUrl: 'https://profile.theguardian.com/user/id/11314558',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11314558',
- avatar: 'https://avatar.guim.co.uk/user/11314558',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11314558',
- badge: [],
- },
- },
- {
- id: 138809522,
- body: 'Well said
',
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:11Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809522',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809522',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '12360820',
- displayName: 'drragon',
- webUrl: 'https://profile.theguardian.com/user/id/12360820',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12360820',
- avatar: 'https://avatar.guim.co.uk/user/12360820',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12360820',
- badge: [],
- },
- },
- {
- id: 138809559,
- body: 'And the rot started in 1997 when the NHS had 205,000 beds, but by 2010 had 170,000 beds.
If it is disgraceful that the conservatives lost 17,000 beds, is it disgraceful that Labour lost 35,000 beds?
https://www.kingsfund.org.uk/audio-video/key-facts-figures-nhsat
',
- date: '09 March 2020 7:29pm',
- isoDateTime: '2020-03-09T19:29:04Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809559',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809559',
- numRecommends: 28,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '2596777',
- displayName: 'thewhofan',
- webUrl: 'https://profile.theguardian.com/user/id/2596777',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2596777',
- avatar: 'https://avatar.guim.co.uk/user/2596777',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2596777',
- badge: [],
- },
- },
- {
- id: 138809581,
- body: 'How many beds were there under Labour? Would be useful to know.
',
- date: '09 March 2020 7:30pm',
- isoDateTime: '2020-03-09T19:30:25Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809581',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809581',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '14756178',
- displayName: 'hhowells',
- webUrl: 'https://profile.theguardian.com/user/id/14756178',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14756178',
- avatar: 'https://avatar.guim.co.uk/user/14756178',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14756178',
- badge: [],
- },
- },
- {
- id: 138809629,
- body: 'That is the wrong sort of fact. You know that, as always for a PT article, this is an anti-Tory rant!
I am no supporter of the Tories (or of Labour for that matter) but this is too serious a topic for points scoring.
',
- date: '09 March 2020 7:33pm',
- isoDateTime: '2020-03-09T19:33:37Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809629',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809629',
- numRecommends: 21,
- isHighlighted: false,
- responseTo: {
- displayName: 'thewhofan',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809559',
- isoDateTime: '2020-03-09T19:29:04Z',
- date: '09 March 2020 7:29pm',
- commentId: '138809559',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809559',
- },
- userProfile: {
- userId: '3298302',
- displayName: 'Swan17',
- webUrl: 'https://profile.theguardian.com/user/id/3298302',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3298302',
- avatar: 'https://avatar.guim.co.uk/user/3298302',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3298302',
- badge: [],
- },
- },
- {
- id: 138809641,
- body: 'I think the fact that ICU beds are under pressure before it even gets started is a bit of a difference.
',
- date: '09 March 2020 7:34pm',
- isoDateTime: '2020-03-09T19:34:17Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809641',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809641',
- numRecommends: 15,
- isHighlighted: false,
- responseTo: {
- displayName: 'Ulenspiegel',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809473',
- isoDateTime: '2020-03-09T19:23:49Z',
- date: '09 March 2020 7:23pm',
- commentId: '138809473',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809473',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138809684,
- body: 'I am always fascinated by all the claims and counterclaims about the NHS, and how more is always needed and how terrible it is. A little bit of googling suggest 1,500,000 people work for that organisation and it receives £145,000,000,000 per year. You can always spend more however you could probably divert all of the country’s wealth and for some that still would not be enough, however whenever I’ve come across the NHS, it is generally excellent.
',
- date: '09 March 2020 7:36pm',
- isoDateTime: '2020-03-09T19:36:15Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809684',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809684',
- numRecommends: 24,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '11840136',
- displayName: 'imnotaleftie',
- webUrl: 'https://profile.theguardian.com/user/id/11840136',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11840136',
- avatar: 'https://avatar.guim.co.uk/user/11840136',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11840136',
- badge: [],
- },
- },
- {
- id: 138809702,
- body: 'Both can be wrong, you also have to consider what is a safe stable number to stop cutting at
',
- date: '09 March 2020 7:37pm',
- isoDateTime: '2020-03-09T19:37:29Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809702',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809702',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'thewhofan',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809559',
- isoDateTime: '2020-03-09T19:29:04Z',
- date: '09 March 2020 7:29pm',
- commentId: '138809559',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809559',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138810097,
- body: 'So should you .... https://fullfact.org/health/number-hospital-beds-falling /
',
- date: '09 March 2020 8:00pm',
- isoDateTime: '2020-03-09T20:00:21Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810097',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810097',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '100945565',
- displayName: 'Ivorte',
- webUrl: 'https://profile.theguardian.com/user/id/100945565',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100945565',
- avatar: 'https://avatar.guim.co.uk/user/100945565',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100945565',
- badge: [],
- },
- },
- {
- id: 138810337,
- body: 'Read my comment, the figures are there.
What is important is the number of beds lost.
',
- date: '09 March 2020 8:13pm',
- isoDateTime: '2020-03-09T20:13:38Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810337',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810337',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'hhowells',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809581',
- isoDateTime: '2020-03-09T19:30:25Z',
- date: '09 March 2020 7:30pm',
- commentId: '138809581',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809581',
- },
- userProfile: {
- userId: '2596777',
- displayName: 'thewhofan',
- webUrl: 'https://profile.theguardian.com/user/id/2596777',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2596777',
- avatar: 'https://avatar.guim.co.uk/user/2596777',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2596777',
- badge: [],
- },
- },
- {
- id: 138810380,
- body: "I agree, but it doesn't alter the fact that under both parties, substantial numbers of hospital beds were lost between 1997 and 2020.
",
- date: '09 March 2020 8:15pm',
- isoDateTime: '2020-03-09T20:15:36Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810380',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810380',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809702',
- isoDateTime: '2020-03-09T19:37:29Z',
- date: '09 March 2020 7:37pm',
- commentId: '138809702',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809702',
- },
- userProfile: {
- userId: '2596777',
- displayName: 'thewhofan',
- webUrl: 'https://profile.theguardian.com/user/id/2596777',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2596777',
- avatar: 'https://avatar.guim.co.uk/user/2596777',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2596777',
- badge: [],
- },
- },
- {
- id: 138810413,
- body: "I agree, but if only some facts are put forward, you don't get the full picture.
",
- date: '09 March 2020 8:17pm',
- isoDateTime: '2020-03-09T20:17:34Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810413',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810413',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'Swan17',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809629',
- isoDateTime: '2020-03-09T19:33:37Z',
- date: '09 March 2020 7:33pm',
- commentId: '138809629',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809629',
- },
- userProfile: {
- userId: '2596777',
- displayName: 'thewhofan',
- webUrl: 'https://profile.theguardian.com/user/id/2596777',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2596777',
- avatar: 'https://avatar.guim.co.uk/user/2596777',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2596777',
- badge: [],
- },
- },
- {
- id: 138810421,
- body: 'Good to see the great German system that incorporates private health care (30%) working to good effect.
',
- date: '09 March 2020 8:17pm',
- isoDateTime: '2020-03-09T20:17:54Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810421',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810421',
- numRecommends: 19,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '18213257',
- displayName: 'Farcemultiplier',
- webUrl: 'https://profile.theguardian.com/user/id/18213257',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18213257',
- avatar: 'https://avatar.guim.co.uk/user/18213257',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/18213257',
- badge: [],
- },
- },
- {
- id: 138810462,
- body: 'Triage already occurs in A & E in the UK and I suspect it does in many other countries.
',
- date: '09 March 2020 8:20pm',
- isoDateTime: '2020-03-09T20:20:15Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810462',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810462',
- numRecommends: 6,
- isHighlighted: false,
- responseTo: {
- displayName: 'Ulenspiegel',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809473',
- isoDateTime: '2020-03-09T19:23:49Z',
- date: '09 March 2020 7:23pm',
- commentId: '138809473',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809473',
- },
- userProfile: {
- userId: '2596777',
- displayName: 'thewhofan',
- webUrl: 'https://profile.theguardian.com/user/id/2596777',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2596777',
- avatar: 'https://avatar.guim.co.uk/user/2596777',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2596777',
- badge: [],
- },
- },
- {
- id: 138810734,
- body: '"It\'s utterly disgraceful what the Tories have done to the NHS and country these last ten years"
I know. Increasing expenditure on NHS England every single year, despite the financial constraints placed on them by the Global Financial Crisis and by Gordon Brown spending like a drunken sailor between 2005 and 2010, leaving the economy in ruins.
',
- date: '09 March 2020 8:34pm',
- isoDateTime: '2020-03-09T20:34:41Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810734',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810734',
- numRecommends: 28,
- isHighlighted: false,
- responseTo: {
- displayName: 'Strummered',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809314',
- isoDateTime: '2020-03-09T19:13:54Z',
- date: '09 March 2020 7:13pm',
- commentId: '138809314',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809314',
- },
- userProfile: {
- userId: '15673053',
- displayName: 'fordprefect100',
- webUrl: 'https://profile.theguardian.com/user/id/15673053',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15673053',
- avatar: 'https://avatar.guim.co.uk/user/15673053',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15673053',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 17,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 16,
- },
- },
- {
- id: 138809321,
- body: "I agree we need the NHS 100% during this event. However it can not deal with this virus. The Uk does not have the resources or manpower to do what the Chinese did. No nation on earth apart from china can do that. The UK's response shpuld have been a phase before containment called prevention.
Prevention of the virus entering the UK. The scientists quoted Italy saying that suspending flights from China didn't prevent it in Italy. Well that's correct. But suspending all g;obal flights for a month mights have done something!
Our esteemed world leaders decided otherwise. The blame for this virus in the UK lies fairly and squarley with the imbediles in Govt and those advising them. They allowed it to enter the UK.
",
- date: '09 March 2020 7:14pm',
- isoDateTime: '2020-03-09T19:14:28Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809321',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809321',
- numRecommends: 15,
- isHighlighted: false,
- userProfile: {
- userId: '102156531',
- displayName: 'Leeming20',
- webUrl: 'https://profile.theguardian.com/user/id/102156531',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/102156531',
- avatar: 'https://avatar.guim.co.uk/user/102156531',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/102156531',
- badge: [],
- },
- responses: [
- {
- id: 138809388,
- body: "Great sentiment, but just not practical. There are Brits away in every country on earth, you can't just not let them come home for a month (and vice versa for other countries)
",
- date: '09 March 2020 7:18pm',
- isoDateTime: '2020-03-09T19:18:32Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809388',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809388',
- numRecommends: 22,
- isHighlighted: false,
- responseTo: {
- displayName: 'Leeming20',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809321',
- isoDateTime: '2020-03-09T19:14:28Z',
- date: '09 March 2020 7:14pm',
- commentId: '138809321',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809321',
- },
- userProfile: {
- userId: '13093174',
- displayName: 'Cricketnut',
- webUrl: 'https://profile.theguardian.com/user/id/13093174',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13093174',
- avatar: 'https://avatar.guim.co.uk/user/13093174',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/13093174',
- badge: [],
- },
- },
- {
- id: 138809562,
- body: "But China made most people stay at home - by force. They didn't have the beds or doctors. The numbers are just too big.
",
- date: '09 March 2020 7:29pm',
- isoDateTime: '2020-03-09T19:29:15Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809562',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809562',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Leeming20',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809321',
- isoDateTime: '2020-03-09T19:14:28Z',
- date: '09 March 2020 7:14pm',
- commentId: '138809321',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809321',
- },
- userProfile: {
- userId: '14756178',
- displayName: 'hhowells',
- webUrl: 'https://profile.theguardian.com/user/id/14756178',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14756178',
- avatar: 'https://avatar.guim.co.uk/user/14756178',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14756178',
- badge: [],
- },
- },
- {
- id: 138809776,
- body: 'If your are going to call somebody an imbecile it is probably a good idea to spell the word in question correctly, just a thought. Also I’d love to know how you could possible prevent the spread of a virus with a long incubation period?
',
- date: '09 March 2020 7:41pm',
- isoDateTime: '2020-03-09T19:41:32Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809776',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809776',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'Leeming20',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809321',
- isoDateTime: '2020-03-09T19:14:28Z',
- date: '09 March 2020 7:14pm',
- commentId: '138809321',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809321',
- },
- userProfile: {
- userId: '11840136',
- displayName: 'imnotaleftie',
- webUrl: 'https://profile.theguardian.com/user/id/11840136',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11840136',
- avatar: 'https://avatar.guim.co.uk/user/11840136',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11840136',
- badge: [],
- },
- },
- {
- id: 138810899,
- body: 'What are the full implications of stopping all "global" flights? (I assume by you mean with one end in the UK).
',
- date: '09 March 2020 8:44pm',
- isoDateTime: '2020-03-09T20:44:44Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810899',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810899',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Leeming20',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809321',
- isoDateTime: '2020-03-09T19:14:28Z',
- date: '09 March 2020 7:14pm',
- commentId: '138809321',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809321',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 5,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 4,
- },
- },
- {
- id: 138809347,
- body: 'Any Polly Toynbee article: read between the red lines...
',
- date: '09 March 2020 7:16pm',
- isoDateTime: '2020-03-09T19:16:11Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809347',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809347',
- numRecommends: 15,
- isHighlighted: false,
- userProfile: {
- userId: '13093174',
- displayName: 'Cricketnut',
- webUrl: 'https://profile.theguardian.com/user/id/13093174',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13093174',
- avatar: 'https://avatar.guim.co.uk/user/13093174',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/13093174',
- badge: [],
- },
- },
- {
- id: 138809350,
- body: 'To face Covid-19, unity is strength. I call on our European partners to take urgent action to coordinate health measures, research efforts and our economic response. Let us act together now.
Macron
',
- date: '09 March 2020 7:16pm',
- isoDateTime: '2020-03-09T19:16:21Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809350',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809350',
- numRecommends: 11,
- isHighlighted: false,
- userProfile: {
- userId: '12701863',
- displayName: '112131966523',
- webUrl: 'https://profile.theguardian.com/user/id/12701863',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12701863',
- avatar: 'https://avatar.guim.co.uk/user/12701863',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/12701863',
- badge: [],
- },
- responses: [
- {
- id: 138810104,
- body: 'So said the person who requisitioned every single surgical mask in France and forced a manufacturer to cancel orders from the UK NHS .
I always think UK has behaved more European than France, but French politicians have always been keener to trumpet the European ideal - without actually practising it - than their shy UK counterparts.
',
- date: '09 March 2020 8:00pm',
- isoDateTime: '2020-03-09T20:00:46Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810104',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810104',
- numRecommends: 20,
- isHighlighted: false,
- responseTo: {
- displayName: '112131966523',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809350',
- isoDateTime: '2020-03-09T19:16:21Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809350',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809350',
- },
- userProfile: {
- userId: '16876782',
- displayName: '30624700',
- webUrl: 'https://profile.theguardian.com/user/id/16876782',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16876782',
- avatar: 'https://avatar.guim.co.uk/user/16876782',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16876782',
- badge: [],
- },
- },
- {
- id: 138810226,
- body: 'Well you reap what you sow. Why not buy them from Trump. He is your lots saviour.
',
- date: '09 March 2020 8:07pm',
- isoDateTime: '2020-03-09T20:07:52Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810226',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810226',
- numRecommends: 19,
- isHighlighted: false,
- responseTo: {
- displayName: '30624700',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810104',
- isoDateTime: '2020-03-09T20:00:46Z',
- date: '09 March 2020 8:00pm',
- commentId: '138810104',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810104',
- },
- userProfile: {
- userId: '12701863',
- displayName: '112131966523',
- webUrl: 'https://profile.theguardian.com/user/id/12701863',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12701863',
- avatar: 'https://avatar.guim.co.uk/user/12701863',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12701863',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 3,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 2,
- },
- },
- {
- id: 138809351,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:16pm',
- isoDateTime: '2020-03-09T19:16:23Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809351',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809351',
- numRecommends: 2,
- isHighlighted: false,
- userProfile: {
- userId: '101763863',
- displayName: 'DarthRaider',
- webUrl: 'https://profile.theguardian.com/user/id/101763863',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101763863',
- avatar: 'https://avatar.guim.co.uk/user/101763863',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/101763863',
- badge: [],
- },
- },
- {
- id: 138809356,
- body: "We have members of the family who work for the NHS and can we just repeat what should be self evident to anyone with a brain cell right now. If you feel unwell with a fever, cough, or flu like symptoms, DO NOT go into your doctor's surgery or A&E where you will be putting health workers and vulnerable patients at risk, RING 111. In some countries there are real penalties for those who should be self isolating actually putting others at risk. I think that should be adopted here.
",
- date: '09 March 2020 7:16pm',
- isoDateTime: '2020-03-09T19:16:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809356',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809356',
- numRecommends: 160,
- isHighlighted: true,
- userProfile: {
- userId: '14293232',
- displayName: 'BabylonianSheDevil03',
- webUrl: 'https://profile.theguardian.com/user/id/14293232',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14293232',
- avatar: 'https://avatar.guim.co.uk/user/14293232',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14293232',
- badge: [],
- },
- responses: [
- {
- id: 138809402,
- body: "Have you ever rang 111? It's largely useless even without a national crisis.
",
- date: '09 March 2020 7:19pm',
- isoDateTime: '2020-03-09T19:19:20Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809402',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- numRecommends: 73,
- isHighlighted: false,
- responseTo: {
- displayName: 'BabylonianSheDevil03',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809356',
- isoDateTime: '2020-03-09T19:16:35Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809356',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809356',
- },
- userProfile: {
- userId: '2966817',
- displayName: 'philipphilip99',
- webUrl: 'https://profile.theguardian.com/user/id/2966817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2966817',
- avatar: 'https://avatar.guim.co.uk/user/2966817',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2966817',
- badge: [],
- },
- },
- {
- id: 138809455,
- body: "I hear you, but people must self isolate until they manage to get through to 111 or alternatively ring their doctor's surgery and get advice, perhaps even speak to their doctor on the phone. Nobody should be leaving their homes if they feel unwell as described in my original post.
",
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:26Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809455',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809455',
- numRecommends: 86,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- isoDateTime: '2020-03-09T19:19:20Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809402',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809402',
- },
- userProfile: {
- userId: '14293232',
- displayName: 'BabylonianSheDevil03',
- webUrl: 'https://profile.theguardian.com/user/id/14293232',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14293232',
- avatar: 'https://avatar.guim.co.uk/user/14293232',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14293232',
- badge: [],
- },
- },
- {
- id: 138809530,
- body: "Maybe, but it's still better than risking spreading any infection.
Besides they announced 700 more people to work there so I'm sure it's fixed now
",
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:37Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809530',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809530',
- numRecommends: 40,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- isoDateTime: '2020-03-09T19:19:20Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809402',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809402',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138809576,
- body: 'Yes I have. Three times in the last two months : firstly when an elderly relative collapsed on the bathroom floor, the second time concerning a possible heart attack and the third concerning an angina attack.
In each case the 111 staff were calm, professional and full of helpful advice
',
- date: '09 March 2020 7:30pm',
- isoDateTime: '2020-03-09T19:30:13Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809576',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809576',
- numRecommends: 59,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- isoDateTime: '2020-03-09T19:19:20Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809402',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809402',
- },
- userProfile: {
- userId: '16332843',
- displayName: 'dougmeyberry',
- webUrl: 'https://profile.theguardian.com/user/id/16332843',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16332843',
- avatar: 'https://avatar.guim.co.uk/user/16332843',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16332843',
- badge: [],
- },
- },
- {
- id: 138809634,
- body: 'Was it go to hospital or call 999 in all three cases?
',
- date: '09 March 2020 7:33pm',
- isoDateTime: '2020-03-09T19:33:46Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809634',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809634',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'dougmeyberry',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809576',
- isoDateTime: '2020-03-09T19:30:13Z',
- date: '09 March 2020 7:30pm',
- commentId: '138809576',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809576',
- },
- userProfile: {
- userId: '2966817',
- displayName: 'philipphilip99',
- webUrl: 'https://profile.theguardian.com/user/id/2966817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2966817',
- avatar: 'https://avatar.guim.co.uk/user/2966817',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2966817',
- badge: [],
- },
- },
- {
- id: 138809693,
- body: "We have called them when my wife thought I was having a heart attack (thankfully only a very bad chest infection). They were professional, got a qualified Nurse to talk to us almost immediately and got an ambulance dispatched.
What are your qualifications or experience to cal the 111 service 'largely useless'?
",
- date: '09 March 2020 7:36pm',
- isoDateTime: '2020-03-09T19:36:44Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809693',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809693',
- numRecommends: 37,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- isoDateTime: '2020-03-09T19:19:20Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809402',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809402',
- },
- userProfile: {
- userId: '3298302',
- displayName: 'Swan17',
- webUrl: 'https://profile.theguardian.com/user/id/3298302',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3298302',
- avatar: 'https://avatar.guim.co.uk/user/3298302',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3298302',
- badge: [],
- },
- },
- {
- id: 138809732,
- body: 'No not at all
They described in one case actions to take before the ambulance arrived, in another symptoms to look out for to see if the angina was intensifying and in the third case helped make arrangements for an emergency appointment at my local GP to have an ECG scan
Do you want me to go through the entire conversation and relive life-threatening situations for myself and my family before you believe my point of view or are you happy to accept that not everyone is deserving of your pitiful would-be withering scorn.?
',
- date: '09 March 2020 7:39pm',
- isoDateTime: '2020-03-09T19:39:00Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809732',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809732',
- numRecommends: 35,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809634',
- isoDateTime: '2020-03-09T19:33:46Z',
- date: '09 March 2020 7:33pm',
- commentId: '138809634',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809634',
- },
- userProfile: {
- userId: '16332843',
- displayName: 'dougmeyberry',
- webUrl: 'https://profile.theguardian.com/user/id/16332843',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16332843',
- avatar: 'https://avatar.guim.co.uk/user/16332843',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16332843',
- badge: [],
- },
- },
- {
- id: 138809757,
- body: "If you're wife thought you were having a heart attack she should've called 999 immediately.
OP seems to think potentially seriously ill people or their relatives will be content to call 111 and then try to deal with it at home?
",
- date: '09 March 2020 7:40pm',
- isoDateTime: '2020-03-09T19:40:22Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809757',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809757',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'Swan17',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809693',
- isoDateTime: '2020-03-09T19:36:44Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809693',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809693',
- },
- userProfile: {
- userId: '2966817',
- displayName: 'philipphilip99',
- webUrl: 'https://profile.theguardian.com/user/id/2966817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2966817',
- avatar: 'https://avatar.guim.co.uk/user/2966817',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2966817',
- badge: [],
- },
- },
- {
- id: 138809822,
- body: 'Presumably they’re just reading from a script anyway.
',
- date: '09 March 2020 7:44pm',
- isoDateTime: '2020-03-09T19:44:24Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809822',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809822',
- numRecommends: 1,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- isoDateTime: '2020-03-09T19:19:20Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809402',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809402',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138809835,
- body: 'Paranoia will help.
',
- date: '09 March 2020 7:45pm',
- isoDateTime: '2020-03-09T19:45:20Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809835',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809835',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'Delius',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809822',
- isoDateTime: '2020-03-09T19:44:24Z',
- date: '09 March 2020 7:44pm',
- commentId: '138809822',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809822',
- },
- userProfile: {
- userId: '2966817',
- displayName: 'philipphilip99',
- webUrl: 'https://profile.theguardian.com/user/id/2966817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2966817',
- avatar: 'https://avatar.guim.co.uk/user/2966817',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2966817',
- badge: [],
- },
- },
- {
- id: 138809839,
- body: 'Why not 999/112 out of interest?
',
- date: '09 March 2020 7:45pm',
- isoDateTime: '2020-03-09T19:45:33Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809839',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809839',
- numRecommends: 1,
- isHighlighted: false,
- responseTo: {
- displayName: 'Swan17',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809693',
- isoDateTime: '2020-03-09T19:36:44Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809693',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809693',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138809916,
- body: "What does calling 112 get you to in the UK?
And you call 111 as the govt and NHS advice is that 999 is for emergencies. In each of the cases I mentioned it was not clear at the outset that the event was a medical emergency, so we followed govt advice and the procedures worked well.
What's your expertise to be able to comment so carpingly? The 111 team use scripts as they have been designed by medical staff to get to a good diagnosis asap. What's your problem with that?
",
- date: '09 March 2020 7:49pm',
- isoDateTime: '2020-03-09T19:49:13Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809916',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809916',
- numRecommends: 20,
- isHighlighted: false,
- responseTo: {
- displayName: 'Delius',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809839',
- isoDateTime: '2020-03-09T19:45:33Z',
- date: '09 March 2020 7:45pm',
- commentId: '138809839',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809839',
- },
- userProfile: {
- userId: '16332843',
- displayName: 'dougmeyberry',
- webUrl: 'https://profile.theguardian.com/user/id/16332843',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16332843',
- avatar: 'https://avatar.guim.co.uk/user/16332843',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16332843',
- badge: [],
- },
- },
- {
- id: 138809944,
- body: 'I think 112 is also emergencies.
',
- date: '09 March 2020 7:51pm',
- isoDateTime: '2020-03-09T19:51:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809944',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809944',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'dougmeyberry',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809916',
- isoDateTime: '2020-03-09T19:49:13Z',
- date: '09 March 2020 7:49pm',
- commentId: '138809916',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809916',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138809950,
- body: 'Fair enough. But I suspect the helpline numbers will be the first things to crash of there is a surge of cases.
',
- date: '09 March 2020 7:51pm',
- isoDateTime: '2020-03-09T19:51:47Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809950',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809950',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'dougmeyberry',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809732',
- isoDateTime: '2020-03-09T19:39:00Z',
- date: '09 March 2020 7:39pm',
- commentId: '138809732',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809732',
- },
- userProfile: {
- userId: '2966817',
- displayName: 'philipphilip99',
- webUrl: 'https://profile.theguardian.com/user/id/2966817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2966817',
- avatar: 'https://avatar.guim.co.uk/user/2966817',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2966817',
- badge: [],
- },
- },
- {
- id: 138810150,
- body: 'As most cases are likely to be contagious but not deadly, 111 is exactly the right number to call. They will assess if testing is necessary and arrange for a test in a "pod", if need be. They can be contacted if things change and arrange for a properly equipped ambulance to take someone to a pre-warned hospital, if appropriate.
The last thing the ambulance service, A&E, or GPs need is people just turning up.
',
- date: '09 March 2020 8:03pm',
- isoDateTime: '2020-03-09T20:03:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810150',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810150',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- isoDateTime: '2020-03-09T19:19:20Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809402',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809402',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138810322,
- body: "112 is a number that will put you through to the 999 service. It seems to have been introduced so people didn't have to remember different numbers in different EU countries. I don't know that all countries have introduced it, though.
",
- date: '09 March 2020 8:12pm',
- isoDateTime: '2020-03-09T20:12:53Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810322',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810322',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'dougmeyberry',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809916',
- isoDateTime: '2020-03-09T19:49:13Z',
- date: '09 March 2020 7:49pm',
- commentId: '138809916',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809916',
- },
- userProfile: {
- userId: '11547449',
- displayName: 'starsmurf',
- webUrl: 'https://profile.theguardian.com/user/id/11547449',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11547449',
- avatar: 'https://avatar.guim.co.uk/user/11547449',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11547449',
- badge: [],
- },
- },
- {
- id: 138810369,
- body: 'Correct. 112 is the international 999.
',
- date: '09 March 2020 8:15pm',
- isoDateTime: '2020-03-09T20:15:08Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810369',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810369',
- numRecommends: 6,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809944',
- isoDateTime: '2020-03-09T19:51:35Z',
- date: '09 March 2020 7:51pm',
- commentId: '138809944',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809944',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138810579,
- body: 'In some countries there are real penalties for those who should be self isolating actually putting others at risk
UK criminal code classifies knowingly infecting someone with a potentially lethal disease as GBH. It is a criminal record offence with a maximum jail term of 50 years.
',
- date: '09 March 2020 8:26pm',
- isoDateTime: '2020-03-09T20:26:10Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810579',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810579',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'BabylonianSheDevil03',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809356',
- isoDateTime: '2020-03-09T19:16:35Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809356',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809356',
- },
- userProfile: {
- userId: '17596616',
- displayName: 'kotbegemotuk',
- webUrl: 'https://profile.theguardian.com/user/id/17596616',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17596616',
- avatar: 'https://avatar.guim.co.uk/user/17596616',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17596616',
- badge: [],
- },
- },
- {
- id: 138810657,
- body: 'Penalise the employers or benefit agency then. We have a culture of people being exposed to drag themselves into work off their death beds.
',
- date: '09 March 2020 8:30pm',
- isoDateTime: '2020-03-09T20:30:05Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810657',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810657',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'BabylonianSheDevil03',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809356',
- isoDateTime: '2020-03-09T19:16:35Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809356',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809356',
- },
- userProfile: {
- userId: '100789525',
- displayName: 'slimepants',
- webUrl: 'https://profile.theguardian.com/user/id/100789525',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100789525',
- avatar: 'https://avatar.guim.co.uk/user/100789525',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100789525',
- badge: [],
- },
- },
- {
- id: 138810871,
- body: 'It is a criminal record offence with a maximum jail term of 50 years.
Missed the "." - 5.0 years.
If it leads to death, it is manslaughter, that a nice 8.0.
',
- date: '09 March 2020 8:42pm',
- isoDateTime: '2020-03-09T20:42:52Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810871',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810871',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'kotbegemotuk',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810579',
- isoDateTime: '2020-03-09T20:26:10Z',
- date: '09 March 2020 8:26pm',
- commentId: '138810579',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810579',
- },
- userProfile: {
- userId: '17596616',
- displayName: 'kotbegemotuk',
- webUrl: 'https://profile.theguardian.com/user/id/17596616',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17596616',
- avatar: 'https://avatar.guim.co.uk/user/17596616',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17596616',
- badge: [],
- },
- },
- {
- id: 138811012,
- body: "112 is the standard emergency number for GSM mobile phones worldwide.
I've never tried it from a landline.
",
- date: '09 March 2020 8:49pm',
- isoDateTime: '2020-03-09T20:49:11Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811012',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811012',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'justamentalpatient',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810369',
- isoDateTime: '2020-03-09T20:15:08Z',
- date: '09 March 2020 8:15pm',
- commentId: '138810369',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810369',
- },
- userProfile: {
- userId: '3664141',
- displayName: 'Karl1976',
- webUrl: 'https://profile.theguardian.com/user/id/3664141',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3664141',
- avatar: 'https://avatar.guim.co.uk/user/3664141',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3664141',
- badge: [],
- },
- },
- {
- id: 138811045,
- body: 'Would also love to penalise employers, benefits agencies, believe me, and right now the government should be announcing that employers or benefit agencies insisting that employees turn up for work when feeling ill will be punished for endangering the lives of others. Bottom line, people are dying and there will more.
',
- date: '09 March 2020 8:51pm',
- isoDateTime: '2020-03-09T20:51:22Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811045',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811045',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'slimepants',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810657',
- isoDateTime: '2020-03-09T20:30:05Z',
- date: '09 March 2020 8:30pm',
- commentId: '138810657',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810657',
- },
- userProfile: {
- userId: '14293232',
- displayName: 'BabylonianSheDevil03',
- webUrl: 'https://profile.theguardian.com/user/id/14293232',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14293232',
- avatar: 'https://avatar.guim.co.uk/user/14293232',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14293232',
- badge: [],
- },
- },
- {
- id: 138811160,
- body: 'I have once rung 111. The number was chosen to reflect the number of times most people want to ring them: once. A non-medical call handler went through a vast number of questions: not fun when you are in severe pain and worried. A service I hope never to use again.
',
- date: '09 March 2020 8:57pm',
- isoDateTime: '2020-03-09T20:57:51Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811160',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811160',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- isoDateTime: '2020-03-09T19:19:20Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809402',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809402',
- },
- userProfile: {
- userId: '761674',
- displayName: 'MatthewHenson',
- webUrl: 'https://profile.theguardian.com/user/id/761674',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/761674',
- avatar: 'https://avatar.guim.co.uk/user/761674',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/761674',
- badge: [],
- },
- },
- {
- id: 138811218,
- body: 'I think it also works on landlines in most of Europe. But not sure.
',
- date: '09 March 2020 9:00pm',
- isoDateTime: '2020-03-09T21:00:45Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811218',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811218',
- numRecommends: 1,
- isHighlighted: false,
- responseTo: {
- displayName: 'Karl1976',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138811012',
- isoDateTime: '2020-03-09T20:49:11Z',
- date: '09 March 2020 8:49pm',
- commentId: '138811012',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138811012',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138811434,
- body: "Or call 111 and get advice? One Saturday afternoon I developed a pain in my left side. It got so bad that I took my daughter's advice and phoned 111. (I didn't want to bother anyone on a Saturday.) After answering a series of questions I was advised to go to the walk-in GP centre or the GP unit at the hospital. I chose the GP unit at the hospital and was given an appointment for 2 hours later. The GP saw me on time, told me I had a kidney stone and sent me to A&E on the same site. Within 3 hours I'd had morphine, a CT scan and was admitted. Things got complicated and I spent a week in hospital. I have no complaints - only gratitude.
",
- date: '09 March 2020 9:12pm',
- isoDateTime: '2020-03-09T21:12:41Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811434',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811434',
- numRecommends: 21,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809757',
- isoDateTime: '2020-03-09T19:40:22Z',
- date: '09 March 2020 7:40pm',
- commentId: '138809757',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809757',
- },
- userProfile: {
- userId: '2590067',
- displayName: 'normaleila',
- webUrl: 'https://profile.theguardian.com/user/id/2590067',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2590067',
- avatar: 'https://avatar.guim.co.uk/user/2590067',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2590067',
- badge: [],
- },
- },
- {
- id: 138811707,
- body: 'Nonsense! 111 provides a good service.
',
- date: '09 March 2020 9:25pm',
- isoDateTime: '2020-03-09T21:25:05Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811707',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811707',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809402',
- isoDateTime: '2020-03-09T19:19:20Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809402',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809402',
- },
- userProfile: {
- userId: '16300334',
- displayName: 'MaggieMaggieB',
- webUrl: 'https://profile.theguardian.com/user/id/16300334',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16300334',
- avatar: 'https://avatar.guim.co.uk/user/16300334',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16300334',
- badge: [],
- },
- },
- {
- id: 138811763,
- body: ' Paranoia will help.
Actually you are correct: if everyone washes their hands all the time thanks to paranoia and people self-isolate out of panic, the spread will be reduced enormously. I urge everyone to be paranoid.
',
- date: '09 March 2020 9:27pm',
- isoDateTime: '2020-03-09T21:27:23Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811763',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811763',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'philipphilip99',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809835',
- isoDateTime: '2020-03-09T19:45:20Z',
- date: '09 March 2020 7:45pm',
- commentId: '138809835',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809835',
- },
- userProfile: {
- userId: '10807524',
- displayName: 'RazorUser',
- webUrl: 'https://profile.theguardian.com/user/id/10807524',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10807524',
- avatar: 'https://avatar.guim.co.uk/user/10807524',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10807524',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 28,
- staffCommenterCount: 0,
- editorsPickCount: 1,
- blockedCount: 0,
- responseCount: 27,
- },
- },
- {
- id: 138809363,
- body: 'nonsense...the last thing you need is the NHS. everyone believing they should be looked after and turning up to hospitals regardless. look at how people are looting the shops - not a thought that if there isnt enough soap for evryone, it spreads.
This is a period for stoic agency. The NHS is the complete opposite.
',
- date: '09 March 2020 7:16pm',
- isoDateTime: '2020-03-09T19:16:53Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809363',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809363',
- numRecommends: 13,
- isHighlighted: false,
- userProfile: {
- userId: '15275664',
- displayName: 'Brainingtree',
- webUrl: 'https://profile.theguardian.com/user/id/15275664',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15275664',
- avatar: 'https://avatar.guim.co.uk/user/15275664',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/15275664',
- badge: [],
- },
- responses: [
- {
- id: 138809459,
- body: "Sorry I don't understand. You're saying if people are ill they should not go and see a doctor as that will make them worse? Is that some sort of joke?
",
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:37Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809459',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809459',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'Brainingtree',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809363',
- isoDateTime: '2020-03-09T19:16:53Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809363',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809363',
- },
- userProfile: {
- userId: '17406124',
- displayName: 'Jabo4523',
- webUrl: 'https://profile.theguardian.com/user/id/17406124',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17406124',
- avatar: 'https://avatar.guim.co.uk/user/17406124',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17406124',
- badge: [],
- },
- },
- {
- id: 138809683,
- body: 'There has been looting? Where?
',
- date: '09 March 2020 7:36pm',
- isoDateTime: '2020-03-09T19:36:14Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809683',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809683',
- numRecommends: 15,
- isHighlighted: false,
- responseTo: {
- displayName: 'Brainingtree',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809363',
- isoDateTime: '2020-03-09T19:16:53Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809363',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809363',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138809806,
- body: 'The DWP budget for helping those in need has been looted
',
- date: '09 March 2020 7:43pm',
- isoDateTime: '2020-03-09T19:43:27Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809806',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809806',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'justamentalpatient',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809683',
- isoDateTime: '2020-03-09T19:36:14Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809683',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809683',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138809941,
- body: 'So rather than a national health service, you believe a cure-all for medical conditions is stoicism?
',
- date: '09 March 2020 7:51pm',
- isoDateTime: '2020-03-09T19:51:23Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809941',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809941',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'Brainingtree',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809363',
- isoDateTime: '2020-03-09T19:16:53Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809363',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809363',
- },
- userProfile: {
- userId: '1330048',
- displayName: 'JekyllMoon',
- webUrl: 'https://profile.theguardian.com/user/id/1330048',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1330048',
- avatar: 'https://avatar.guim.co.uk/user/1330048',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/1330048',
- badge: [],
- },
- },
- {
- id: 138810130,
- body: 'The advice is to self isolate. Not to go into seek medical care at hospitals because of contagion. It’s hilarious you didn’t know that considering your position
',
- date: '09 March 2020 8:02pm',
- isoDateTime: '2020-03-09T20:02:10Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810130',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810130',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'Jabo4523',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809459',
- isoDateTime: '2020-03-09T19:22:37Z',
- date: '09 March 2020 7:22pm',
- commentId: '138809459',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809459',
- },
- userProfile: {
- userId: '15275664',
- displayName: 'Brainingtree',
- webUrl: 'https://profile.theguardian.com/user/id/15275664',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15275664',
- avatar: 'https://avatar.guim.co.uk/user/15275664',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15275664',
- badge: [],
- },
- },
- {
- id: 138810207,
- body: "How long have we been telling people that a five week wait for UC is no good for people on low incomes? Even now, with so many in the gig economy at risk of contracting and spreading Covid-19, UKGOV still doesn't fucking get it!
",
- date: '09 March 2020 8:07pm',
- isoDateTime: '2020-03-09T20:07:00Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810207',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810207',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809806',
- isoDateTime: '2020-03-09T19:43:27Z',
- date: '09 March 2020 7:43pm',
- commentId: '138809806',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809806',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138810327,
- body: 'This is a period of self care and personal responsibility. The nhs is finite. Now we will really experience that. After we might ask whether we could look after ourselves better. We are not the wartime generation. The opposite in fact. But This is going to be a brutal wake up call and a defining moment for our country. Either we deal with it or destroy each other and the nhs by demanding it save us.
',
- date: '09 March 2020 8:13pm',
- isoDateTime: '2020-03-09T20:13:13Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810327',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810327',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'JekyllMoon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809941',
- isoDateTime: '2020-03-09T19:51:23Z',
- date: '09 March 2020 7:51pm',
- commentId: '138809941',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809941',
- },
- userProfile: {
- userId: '15275664',
- displayName: 'Brainingtree',
- webUrl: 'https://profile.theguardian.com/user/id/15275664',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15275664',
- avatar: 'https://avatar.guim.co.uk/user/15275664',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15275664',
- badge: [],
- },
- },
- {
- id: 138810353,
- body: 'They should just use their trust fund, duh common sense ™
',
- date: '09 March 2020 8:14pm',
- isoDateTime: '2020-03-09T20:14:11Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810353',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810353',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'justamentalpatient',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810207',
- isoDateTime: '2020-03-09T20:07:00Z',
- date: '09 March 2020 8:07pm',
- commentId: '138810207',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810207',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138810392,
- body: 'If people have the symptoms, they should call 111.
',
- date: '09 March 2020 8:16pm',
- isoDateTime: '2020-03-09T20:16:21Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810392',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810392',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'Jabo4523',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809459',
- isoDateTime: '2020-03-09T19:22:37Z',
- date: '09 March 2020 7:22pm',
- commentId: '138809459',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809459',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138810438,
- body: 'Must be male.
',
- date: '09 March 2020 8:19pm',
- isoDateTime: '2020-03-09T20:19:11Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810438',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810438',
- numRecommends: 1,
- isHighlighted: false,
- responseTo: {
- displayName: 'JekyllMoon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809941',
- isoDateTime: '2020-03-09T19:51:23Z',
- date: '09 March 2020 7:51pm',
- commentId: '138809941',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809941',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138810440,
- body: 'Are you feeling ok?
',
- date: '09 March 2020 8:19pm',
- isoDateTime: '2020-03-09T20:19:15Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810440',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810440',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'Brainingtree',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809363',
- isoDateTime: '2020-03-09T19:16:53Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809363',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809363',
- },
- userProfile: {
- userId: '15739675',
- displayName: 'establishmentlies',
- webUrl: 'https://profile.theguardian.com/user/id/15739675',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15739675',
- avatar: 'https://avatar.guim.co.uk/user/15739675',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15739675',
- badge: [],
- },
- },
- {
- id: 138810587,
- body: 'How many spare icu beds are free in the Uk?
',
- date: '09 March 2020 8:26pm',
- isoDateTime: '2020-03-09T20:26:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810587',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810587',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'establishmentlies',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810440',
- isoDateTime: '2020-03-09T20:19:15Z',
- date: '09 March 2020 8:19pm',
- commentId: '138810440',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810440',
- },
- userProfile: {
- userId: '15275664',
- displayName: 'Brainingtree',
- webUrl: 'https://profile.theguardian.com/user/id/15275664',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15275664',
- avatar: 'https://avatar.guim.co.uk/user/15275664',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15275664',
- badge: [],
- },
- },
- {
- id: 138810729,
- body: " not a thought that if there isnt enough soap for evryone, it spreads.
It is still rational to stock up, since one person's actions will have little effect on the total position.
",
- date: '09 March 2020 8:34pm',
- isoDateTime: '2020-03-09T20:34:25Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810729',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810729',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Brainingtree',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809363',
- isoDateTime: '2020-03-09T19:16:53Z',
- date: '09 March 2020 7:16pm',
- commentId: '138809363',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809363',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 14,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 13,
- },
- },
- {
- id: 138809368,
- body: 'Short staffed NHS, perhaps the health of the nation should be addressed more seriously on every level than just getting in staff to shore up those who become ill from poor quality life styles. Walk more, eat less, try harder, learn how to be healthy, meditate, stress less, quit boozing, quit meat, quit sugars and wheats. I see at my local surgery people who are unfit and still under 10 years old. We do not need more healthcare we need more health training.
',
- date: '09 March 2020 7:17pm',
- isoDateTime: '2020-03-09T19:17:08Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809368',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809368',
- numRecommends: 10,
- isHighlighted: false,
- userProfile: {
- userId: '16314139',
- displayName: 'Harvestingkarma',
- webUrl: 'https://profile.theguardian.com/user/id/16314139',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16314139',
- avatar: 'https://avatar.guim.co.uk/user/16314139',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/16314139',
- badge: [],
- },
- responses: [
- {
- id: 138809434,
- body: 'Yep, if everyone helped themselves and took basic measures we would be in a lot better shape
',
- date: '09 March 2020 7:21pm',
- isoDateTime: '2020-03-09T19:21:04Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809434',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809434',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'Harvestingkarma',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809368',
- isoDateTime: '2020-03-09T19:17:08Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809368',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809368',
- },
- userProfile: {
- userId: '13093174',
- displayName: 'Cricketnut',
- webUrl: 'https://profile.theguardian.com/user/id/13093174',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13093174',
- avatar: 'https://avatar.guim.co.uk/user/13093174',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/13093174',
- badge: [],
- },
- },
- {
- id: 138809700,
- body: 'The coalition shoved public health onto LAs and then cut their budget. Go figure.
',
- date: '09 March 2020 7:37pm',
- isoDateTime: '2020-03-09T19:37:24Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809700',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809700',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'Harvestingkarma',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809368',
- isoDateTime: '2020-03-09T19:17:08Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809368',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809368',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138809878,
- body: 'I agree with much of the above, but we need to deal with the matter in hand, namely the epidemic. Giving up wheat: why, unless one has an allergy to it? Sugars? We need carbs to fuel all that walking, running and cycling that you advocate. And to hell with giving up booze. Having a few pints or the odd glass of red is the only thing keeping us sane at the moment!
',
- date: '09 March 2020 7:47pm',
- isoDateTime: '2020-03-09T19:47:44Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809878',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809878',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'Harvestingkarma',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809368',
- isoDateTime: '2020-03-09T19:17:08Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809368',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809368',
- },
- userProfile: {
- userId: '3067983',
- displayName: 'ludachris',
- webUrl: 'https://profile.theguardian.com/user/id/3067983',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3067983',
- avatar: 'https://avatar.guim.co.uk/user/3067983',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3067983',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 4,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 3,
- },
- },
- {
- id: 138809372,
- body: "There is no effective treatment for Coronavirus. The best/only defence we currently have against it is our own immune systems. That's why makes this virus scary, if you have an underlying health condition there's not much that can be done to help you, regardless of whether your country's healthcare is free at point of use or not.
",
- date: '09 March 2020 7:17pm',
- isoDateTime: '2020-03-09T19:17:31Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809372',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809372',
- numRecommends: 19,
- isHighlighted: false,
- userProfile: {
- userId: '14495786',
- displayName: 'Trumbledon',
- webUrl: 'https://profile.theguardian.com/user/id/14495786',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14495786',
- avatar: 'https://avatar.guim.co.uk/user/14495786',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14495786',
- badge: [],
- },
- responses: [
- {
- id: 138809728,
- body: "Oh, I dunno. It's probably easier to monitor and allow people to self isolate if you aren't fucking charging people to get tested!
",
- date: '09 March 2020 7:38pm',
- isoDateTime: '2020-03-09T19:38:52Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809728',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809728',
- numRecommends: 19,
- isHighlighted: false,
- responseTo: {
- displayName: 'Trumbledon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809372',
- isoDateTime: '2020-03-09T19:17:31Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809372',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809372',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138809814,
- body: 'Oh please God, enough bullshit and bollocks. If you don’t know what you are talking about, then shut up.
',
- date: '09 March 2020 7:43pm',
- isoDateTime: '2020-03-09T19:43:55Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809814',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809814',
- numRecommends: 15,
- isHighlighted: false,
- responseTo: {
- displayName: 'Trumbledon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809372',
- isoDateTime: '2020-03-09T19:17:31Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809372',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809372',
- },
- userProfile: {
- userId: '3613711',
- displayName: 'andrewcm',
- webUrl: 'https://profile.theguardian.com/user/id/3613711',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3613711',
- avatar: 'https://avatar.guim.co.uk/user/3613711',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3613711',
- badge: [],
- },
- },
- {
- id: 138809872,
- body: " That's why makes this virus scary, if you have an underlying health condition there's not much that can be done to help you, regardless of whether your country's healthcare is free at point of use or not.
Tell me if you were living from a poverty level of income in the US and you came down with a headache and fever would and did not have the money to be able to get tested would you go and get a test or would you try and wait it out to see if you got better?
",
- date: '09 March 2020 7:47pm',
- isoDateTime: '2020-03-09T19:47:20Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809872',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809872',
- numRecommends: 14,
- isHighlighted: false,
- responseTo: {
- displayName: 'Trumbledon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809372',
- isoDateTime: '2020-03-09T19:17:31Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809372',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809372',
- },
- userProfile: {
- userId: '10085855',
- displayName: 'bifess',
- webUrl: 'https://profile.theguardian.com/user/id/10085855',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10085855',
- avatar: 'https://avatar.guim.co.uk/user/10085855',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10085855',
- badge: [],
- },
- },
- {
- id: 138810371,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 8:15pm',
- isoDateTime: '2020-03-09T20:15:13Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810371',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810371',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'andrewcm',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809814',
- isoDateTime: '2020-03-09T19:43:55Z',
- date: '09 March 2020 7:43pm',
- commentId: '138809814',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809814',
- },
- userProfile: {
- userId: '14495786',
- displayName: 'Trumbledon',
- webUrl: 'https://profile.theguardian.com/user/id/14495786',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14495786',
- avatar: 'https://avatar.guim.co.uk/user/14495786',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14495786',
- badge: [],
- },
- },
- {
- id: 138810481,
- body: "I would probably wait it out and see if I got better, which might result in fewer people becoming infected than would've been the case had I gone out to get tested and infected them.
I mean frankly, even though I live in the UK and have an NHS hospital ten minutes away, I'd still probably stay at home rather than going out to get tested. I'm in my 30s and in good health, the risk of me dying of Coronavirus is quite low - certainly relative to the risk of me thinking \"I'll go and get tested. Why not, as it's free?\" and infecting a bunch of vulnerable elderly people.
",
- date: '09 March 2020 8:20pm',
- isoDateTime: '2020-03-09T20:20:56Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810481',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810481',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'bifess',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809872',
- isoDateTime: '2020-03-09T19:47:20Z',
- date: '09 March 2020 7:47pm',
- commentId: '138809872',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809872',
- },
- userProfile: {
- userId: '14495786',
- displayName: 'Trumbledon',
- webUrl: 'https://profile.theguardian.com/user/id/14495786',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14495786',
- avatar: 'https://avatar.guim.co.uk/user/14495786',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14495786',
- badge: [],
- },
- },
- {
- id: 138810664,
- body: "Which part of what I've said do you disagree with, leftist?
",
- date: '09 March 2020 8:30pm',
- isoDateTime: '2020-03-09T20:30:23Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810664',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810664',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'andrewcm',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809814',
- isoDateTime: '2020-03-09T19:43:55Z',
- date: '09 March 2020 7:43pm',
- commentId: '138809814',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809814',
- },
- userProfile: {
- userId: '14495786',
- displayName: 'Trumbledon',
- webUrl: 'https://profile.theguardian.com/user/id/14495786',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14495786',
- avatar: 'https://avatar.guim.co.uk/user/14495786',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14495786',
- badge: [],
- },
- },
- {
- id: 138810672,
- body: " That's why makes this virus scary, if you have an underlying health condition there's not much that can be done to help you,
I reckon you'd be better off in intensive care than just in bed at home.
",
- date: '09 March 2020 8:30pm',
- isoDateTime: '2020-03-09T20:30:37Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810672',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810672',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'Trumbledon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809372',
- isoDateTime: '2020-03-09T19:17:31Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809372',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809372',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- {
- id: 138810676,
- body: 'And if you have to work to survive?
',
- date: '09 March 2020 8:30pm',
- isoDateTime: '2020-03-09T20:30:44Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810676',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810676',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Trumbledon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810481',
- isoDateTime: '2020-03-09T20:20:56Z',
- date: '09 March 2020 8:20pm',
- commentId: '138810481',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810481',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138810929,
- body: "Hopefully the government will ensure you're provided for by means of forthcoming emergency legislation.
On this occasion, I feel relatively confident the government will in fact deliver. Failure to do so could be a political misstep on par with the Iraq war.
",
- date: '09 March 2020 8:45pm',
- isoDateTime: '2020-03-09T20:45:46Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810929',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810929',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'MadBloris',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810676',
- isoDateTime: '2020-03-09T20:30:44Z',
- date: '09 March 2020 8:30pm',
- commentId: '138810676',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810676',
- },
- userProfile: {
- userId: '14495786',
- displayName: 'Trumbledon',
- webUrl: 'https://profile.theguardian.com/user/id/14495786',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14495786',
- avatar: 'https://avatar.guim.co.uk/user/14495786',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14495786',
- badge: [],
- },
- },
- {
- id: 138811035,
- body: "Maybe you're right but I can't see it.
My partner has already had to have a week off due to self isolation
",
- date: '09 March 2020 8:50pm',
- isoDateTime: '2020-03-09T20:50:45Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811035',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811035',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Trumbledon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810929',
- isoDateTime: '2020-03-09T20:45:46Z',
- date: '09 March 2020 8:45pm',
- commentId: '138810929',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810929',
- },
- userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
- },
- },
- {
- id: 138811150,
- body: "The virus leaves 20% of cases in need of some level of respiratory support, whether that be full-on artificial blood oxygenation or oxygen masks. That's a large number of people who, if the hospitals are overwhelmed and can't provide that care, may end up dying or suffering life-changing injuries. This death rate of 1 - 2% isn't handed down from god - our actions can change it.
",
- date: '09 March 2020 8:57pm',
- isoDateTime: '2020-03-09T20:57:25Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811150',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811150',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'Trumbledon',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809372',
- isoDateTime: '2020-03-09T19:17:31Z',
- date: '09 March 2020 7:17pm',
- commentId: '138809372',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809372',
- },
- userProfile: {
- userId: '12611808',
- displayName: 'Shortordercook',
- webUrl: 'https://profile.theguardian.com/user/id/12611808',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12611808',
- avatar: 'https://avatar.guim.co.uk/user/12611808',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12611808',
- badge: [],
- },
- },
- {
- id: 138811178,
- body: ' Oh please God, enough bullshit and bollocks. If you don’t know what you are talking about, then shut up.
Do you have a cure or an inoculation?
',
- date: '09 March 2020 8:58pm',
- isoDateTime: '2020-03-09T20:58:51Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811178',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811178',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'andrewcm',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809814',
- isoDateTime: '2020-03-09T19:43:55Z',
- date: '09 March 2020 7:43pm',
- commentId: '138809814',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809814',
- },
- userProfile: {
- userId: '102190698',
- displayName: 'Yoriks',
- webUrl: 'https://profile.theguardian.com/user/id/102190698',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/102190698',
- avatar: 'https://avatar.guim.co.uk/user/102190698',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/102190698',
- badge: [],
- },
- },
- {
- id: 138811721,
- body: "I'd imagine his cure/inoculation is probably to vote Labour
",
- date: '09 March 2020 9:25pm',
- isoDateTime: '2020-03-09T21:25:31Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811721',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811721',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'Yoriks',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138811178',
- isoDateTime: '2020-03-09T20:58:51Z',
- date: '09 March 2020 8:58pm',
- commentId: '138811178',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138811178',
- },
- userProfile: {
- userId: '14495786',
- displayName: 'Trumbledon',
- webUrl: 'https://profile.theguardian.com/user/id/14495786',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14495786',
- avatar: 'https://avatar.guim.co.uk/user/14495786',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14495786',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 14,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 1,
- responseCount: 13,
- },
- },
- {
- id: 138809386,
- body: 'Just a suggestion. Every member of NHS management should spend 30% of their day on caring for coronavirus patients. Should solve the staffing problem in 10 minutes.
',
- date: '09 March 2020 7:18pm',
- isoDateTime: '2020-03-09T19:18:29Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809386',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809386',
- numRecommends: 19,
- isHighlighted: false,
- userProfile: {
- userId: '14349188',
- displayName: 'Sonderzug',
- webUrl: 'https://profile.theguardian.com/user/id/14349188',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14349188',
- avatar: 'https://avatar.guim.co.uk/user/14349188',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14349188',
- badge: [],
- },
- responses: [
- {
- id: 138809451,
- body: 'Please show your workings out!!
',
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:12Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809451',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809451',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'Sonderzug',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809386',
- isoDateTime: '2020-03-09T19:18:29Z',
- date: '09 March 2020 7:18pm',
- commentId: '138809386',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809386',
- },
- userProfile: {
- userId: '102204439',
- displayName: 'Oraclebyname',
- webUrl: 'https://profile.theguardian.com/user/id/102204439',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/102204439',
- avatar: 'https://avatar.guim.co.uk/user/102204439',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/102204439',
- badge: [],
- },
- },
- {
- id: 138809471,
- body: "Good idea. The last thing a hospital needs is someone knowing what's going on.
",
- date: '09 March 2020 7:23pm',
- isoDateTime: '2020-03-09T19:23:23Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809471',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809471',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'Sonderzug',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809386',
- isoDateTime: '2020-03-09T19:18:29Z',
- date: '09 March 2020 7:18pm',
- commentId: '138809386',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809386',
- },
- userProfile: {
- userId: '2966817',
- displayName: 'philipphilip99',
- webUrl: 'https://profile.theguardian.com/user/id/2966817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2966817',
- avatar: 'https://avatar.guim.co.uk/user/2966817',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2966817',
- badge: [],
- },
- },
- {
- id: 138809724,
- body: "Ridiculous. One of the NHS's biggest problem is lack of capable senior administrative staff.
As a comparative, an economically and commercially astute Finance Manager/Business Partner is offered a salary of £58K in the NHS - in the private sector, the base pay for this sort of role is around £80-£90K PLUS bonus.
Same with all support staff.
",
- date: '09 March 2020 7:38pm',
- isoDateTime: '2020-03-09T19:38:49Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809724',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809724',
- numRecommends: 11,
- isHighlighted: false,
- responseTo: {
- displayName: 'Sonderzug',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809386',
- isoDateTime: '2020-03-09T19:18:29Z',
- date: '09 March 2020 7:18pm',
- commentId: '138809386',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809386',
- },
- userProfile: {
- userId: '4019545',
- displayName: 'TheRedThreat',
- webUrl: 'https://profile.theguardian.com/user/id/4019545',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4019545',
- avatar: 'https://avatar.guim.co.uk/user/4019545',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4019545',
- badge: [],
- },
- },
- {
- id: 138809743,
- body: 'So even the unqualified administrators like my wife? What value would that have to the patients and how would the hospital run without a third of its staff (possibly more if they also get ill as they do not know how to protect themselves the way qualified staff do)?
Is there any value to your suggestion?
',
- date: '09 March 2020 7:39pm',
- isoDateTime: '2020-03-09T19:39:44Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809743',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809743',
- numRecommends: 6,
- isHighlighted: false,
- responseTo: {
- displayName: 'Sonderzug',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809386',
- isoDateTime: '2020-03-09T19:18:29Z',
- date: '09 March 2020 7:18pm',
- commentId: '138809386',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809386',
- },
- userProfile: {
- userId: '3298302',
- displayName: 'Swan17',
- webUrl: 'https://profile.theguardian.com/user/id/3298302',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3298302',
- avatar: 'https://avatar.guim.co.uk/user/3298302',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3298302',
- badge: [],
- },
- },
- {
- id: 138810424,
- body: "Yes. Amateurs, that's the answer. We'll have no experts here! But you probably don't realise that the NHS is less top heavy on the management front than most private companies.
",
- date: '09 March 2020 8:18pm',
- isoDateTime: '2020-03-09T20:18:13Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810424',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810424',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'Sonderzug',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809386',
- isoDateTime: '2020-03-09T19:18:29Z',
- date: '09 March 2020 7:18pm',
- commentId: '138809386',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809386',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138810426,
- body: "As a % of the the workforce in the NHS, management make up about 6.5% In private industry it's around 12%, nice try but massive fail... sorry.
",
- date: '09 March 2020 8:18pm',
- isoDateTime: '2020-03-09T20:18:20Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810426',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810426',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Sonderzug',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809386',
- isoDateTime: '2020-03-09T19:18:29Z',
- date: '09 March 2020 7:18pm',
- commentId: '138809386',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809386',
- },
- userProfile: {
- userId: '15739675',
- displayName: 'establishmentlies',
- webUrl: 'https://profile.theguardian.com/user/id/15739675',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15739675',
- avatar: 'https://avatar.guim.co.uk/user/15739675',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15739675',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 7,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 6,
- },
- },
- {
- id: 138809404,
- body: 'A shocking must read thread. What’s really happening in northern Italy: Silvia Stringhini @silviast9 1/ I may be repeating myself, but I want to fight this sense of security that I see outside of the epicenters, as if nothing was going to happen "here". The media in Europe are reassuring, politicians are reassuring, while there\'s little to be reassured of. #COVID19 #coronavirus
https://twitter.com/silviast9/status/1236933818654896129
',
- date: '09 March 2020 7:19pm',
- isoDateTime: '2020-03-09T19:19:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809404',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809404',
- numRecommends: 5,
- isHighlighted: false,
- userProfile: {
- userId: '12561963',
- displayName: 'foralltime',
- webUrl: 'https://profile.theguardian.com/user/id/12561963',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12561963',
- avatar: 'https://avatar.guim.co.uk/user/12561963',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/12561963',
- badge: [],
- },
- },
- {
- id: 138809405,
- body: "The NHS will have to do as its the only healthcare model we have.
This article does not contribute anything to the argument that that model is the best model.
We'll see how Japan, Australia, Canada and the Swiss perform with their various models - none of whom have a state monopoly on healthcare.
",
- date: '09 March 2020 7:19pm',
- isoDateTime: '2020-03-09T19:19:37Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809405',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809405',
- numRecommends: 34,
- isHighlighted: false,
- userProfile: {
- userId: '4019545',
- displayName: 'TheRedThreat',
- webUrl: 'https://profile.theguardian.com/user/id/4019545',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4019545',
- avatar: 'https://avatar.guim.co.uk/user/4019545',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/4019545',
- badge: [],
- },
- responses: [
- {
- id: 138809622,
- body: 'Agreed. Best defence? Well it’s all we have.
',
- date: '09 March 2020 7:33pm',
- isoDateTime: '2020-03-09T19:33:03Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809622',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809622',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'TheRedThreat',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809405',
- isoDateTime: '2020-03-09T19:19:37Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809405',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809405',
- },
- userProfile: {
- userId: '14853428',
- displayName: 'vulgarius',
- webUrl: 'https://profile.theguardian.com/user/id/14853428',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14853428',
- avatar: 'https://avatar.guim.co.uk/user/14853428',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14853428',
- badge: [],
- },
- },
- {
- id: 138811448,
- body: "you can't call anything owned and run by the state a monopoly. monopoly providers within the nhs such as the one jeremy hunt made his fortune from, yes. the nhs itself NO.
",
- date: '09 March 2020 9:13pm',
- isoDateTime: '2020-03-09T21:13:21Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811448',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811448',
- numRecommends: 6,
- isHighlighted: false,
- responseTo: {
- displayName: 'TheRedThreat',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809405',
- isoDateTime: '2020-03-09T19:19:37Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809405',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809405',
- },
- userProfile: {
- userId: '10020201',
- displayName: 'philmill',
- webUrl: 'https://profile.theguardian.com/user/id/10020201',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10020201',
- avatar: 'https://avatar.guim.co.uk/user/10020201',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10020201',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 3,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 2,
- },
- },
- {
- id: 138809408,
- body: '"Kasaraneni would “keep them in the NHS by paying off their student loans”.
So is this old Labour pledge to include ALL student loans, or just those in the medical profession?
',
- date: '09 March 2020 7:19pm',
- isoDateTime: '2020-03-09T19:19:44Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809408',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809408',
- numRecommends: 13,
- isHighlighted: false,
- userProfile: {
- userId: '101586975',
- displayName: 'Asifbymagic',
- webUrl: 'https://profile.theguardian.com/user/id/101586975',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101586975',
- avatar: 'https://avatar.guim.co.uk/user/101586975',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/101586975',
- badge: [],
- },
- responses: [
- {
- id: 138809532,
- body: "Maybe ask him that question when he's trying to stop you from dying from a collapsed respiratory system?
",
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:47Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809532',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809532',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'Asifbymagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809408',
- isoDateTime: '2020-03-09T19:19:44Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809408',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809408',
- },
- userProfile: {
- userId: '14622750',
- displayName: 'hawkeye63',
- webUrl: 'https://profile.theguardian.com/user/id/14622750',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14622750',
- avatar: 'https://avatar.guim.co.uk/user/14622750',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14622750',
- badge: [],
- },
- },
- {
- id: 138809621,
- body: "Not being an elderly person with serious underlying medical problems that's thankfully highly unlikely.
Now how about you answer my perfectly reasonable and serious question without being fatuous.
",
- date: '09 March 2020 7:32pm',
- isoDateTime: '2020-03-09T19:32:57Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809621',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809621',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'hawkeye63',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809532',
- isoDateTime: '2020-03-09T19:27:47Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809532',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809532',
- },
- userProfile: {
- userId: '101586975',
- displayName: 'Asifbymagic',
- webUrl: 'https://profile.theguardian.com/user/id/101586975',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101586975',
- avatar: 'https://avatar.guim.co.uk/user/101586975',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101586975',
- badge: [],
- },
- },
- {
- id: 138809775,
- body: 'Would that pledge come with any conditions? I would support the idea if, for example, the medical staff agreed to work for the NHS exclusively for a period of time (5 or 10 years maybe).
',
- date: '09 March 2020 7:41pm',
- isoDateTime: '2020-03-09T19:41:30Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809775',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809775',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'Asifbymagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809408',
- isoDateTime: '2020-03-09T19:19:44Z',
- date: '09 March 2020 7:19pm',
- commentId: '138809408',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809408',
- },
- userProfile: {
- userId: '3298302',
- displayName: 'Swan17',
- webUrl: 'https://profile.theguardian.com/user/id/3298302',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3298302',
- avatar: 'https://avatar.guim.co.uk/user/3298302',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3298302',
- badge: [],
- },
- },
- {
- id: 138810270,
- body: "I'd support that and suggest it could be extended to teachers too.
",
- date: '09 March 2020 8:10pm',
- isoDateTime: '2020-03-09T20:10:01Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810270',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810270',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'Swan17',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809775',
- isoDateTime: '2020-03-09T19:41:30Z',
- date: '09 March 2020 7:41pm',
- commentId: '138809775',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809775',
- },
- userProfile: {
- userId: '101586975',
- displayName: 'Asifbymagic',
- webUrl: 'https://profile.theguardian.com/user/id/101586975',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101586975',
- avatar: 'https://avatar.guim.co.uk/user/101586975',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101586975',
- badge: [],
- },
- },
- {
- id: 138810551,
- body: "I thought you were asking Dr Kasaraneni. I have no idea what's in his head. I missed the bit of the article which outlined his political affiliations.
You alighted on that one statement in the article to write an asinine disguised push about Labour's election policies on student debt. Fatuous comments deserve a fatuous reply.
",
- date: '09 March 2020 8:24pm',
- isoDateTime: '2020-03-09T20:24:33Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810551',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810551',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'Asifbymagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809621',
- isoDateTime: '2020-03-09T19:32:57Z',
- date: '09 March 2020 7:32pm',
- commentId: '138809621',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809621',
- },
- userProfile: {
- userId: '14622750',
- displayName: 'hawkeye63',
- webUrl: 'https://profile.theguardian.com/user/id/14622750',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14622750',
- avatar: 'https://avatar.guim.co.uk/user/14622750',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14622750',
- badge: [],
- },
- },
- {
- id: 138810732,
- body: "No it was an open question. Given that two paragraphs are devoted to the apparent importance and relevance of Dr Kadaraneni and his views and experiences, what's fatuous about requesting clarification of such a potentially contentious statement he's made?
",
- date: '09 March 2020 8:34pm',
- isoDateTime: '2020-03-09T20:34:40Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810732',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810732',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'hawkeye63',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810551',
- isoDateTime: '2020-03-09T20:24:33Z',
- date: '09 March 2020 8:24pm',
- commentId: '138810551',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810551',
- },
- userProfile: {
- userId: '101586975',
- displayName: 'Asifbymagic',
- webUrl: 'https://profile.theguardian.com/user/id/101586975',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101586975',
- avatar: 'https://avatar.guim.co.uk/user/101586975',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101586975',
- badge: [],
- },
- },
- {
- id: 138810888,
- body: "I don't believe you. Sorry.
",
- date: '09 March 2020 8:44pm',
- isoDateTime: '2020-03-09T20:44:04Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810888',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810888',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'Asifbymagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810732',
- isoDateTime: '2020-03-09T20:34:40Z',
- date: '09 March 2020 8:34pm',
- commentId: '138810732',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810732',
- },
- userProfile: {
- userId: '14622750',
- displayName: 'hawkeye63',
- webUrl: 'https://profile.theguardian.com/user/id/14622750',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14622750',
- avatar: 'https://avatar.guim.co.uk/user/14622750',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14622750',
- badge: [],
- },
- },
- {
- id: 138811036,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 8:50pm',
- isoDateTime: '2020-03-09T20:50:48Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811036',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811036',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'hawkeye63',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810888',
- isoDateTime: '2020-03-09T20:44:04Z',
- date: '09 March 2020 8:44pm',
- commentId: '138810888',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810888',
- },
- userProfile: {
- userId: '102190698',
- displayName: 'Yoriks',
- webUrl: 'https://profile.theguardian.com/user/id/102190698',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/102190698',
- avatar: 'https://avatar.guim.co.uk/user/102190698',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/102190698',
- badge: [],
- },
- },
- {
- id: 138811309,
- body: 'Depends how you define "highly unlikely". 20% of cases need some form of medical support for respiration ranging from oxygen masks to full-on intensive care. Even many of the 80% of "mild" cases will have pneumonia which, while not serious enough to get you a spot in hospital, will be enough to keep you in bed for up to a couple of weeks wishing you\'d never heard of coronavirus.
',
- date: '09 March 2020 9:05pm',
- isoDateTime: '2020-03-09T21:05:39Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811309',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811309',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'Asifbymagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809621',
- isoDateTime: '2020-03-09T19:32:57Z',
- date: '09 March 2020 7:32pm',
- commentId: '138809621',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809621',
- },
- userProfile: {
- userId: '12611808',
- displayName: 'Shortordercook',
- webUrl: 'https://profile.theguardian.com/user/id/12611808',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12611808',
- avatar: 'https://avatar.guim.co.uk/user/12611808',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12611808',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 10,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 1,
- responseCount: 9,
- },
- },
- {
- id: 138809409,
- body: "Thankfully we aren't like the US where you can become bankrupt without health insurance. Thankfully we still have our nhs despite it being on the ropes caused by tory ideology. Can't blame the tory gov for coronavirus, but certainly for the effect they've had on our nhs. No doubt there will be heroic efforts made by staff working within it, which is about the only thing that keeps it going since the tories came to power in 2010.
",
- date: '09 March 2020 7:19pm',
- isoDateTime: '2020-03-09T19:19:48Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809409',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809409',
- numRecommends: 40,
- isHighlighted: false,
- userProfile: {
- userId: '10127231',
- displayName: 'irreverentnurse',
- webUrl: 'https://profile.theguardian.com/user/id/10127231',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10127231',
- avatar: 'https://avatar.guim.co.uk/user/10127231',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/10127231',
- badge: [],
- },
- },
- {
- id: 138809421,
- body: "Stand by for the usual deluge of tory loving Brexiters. They just love Polly's nail on head articles.
",
- date: '09 March 2020 7:20pm',
- isoDateTime: '2020-03-09T19:20:33Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809421',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809421',
- numRecommends: 39,
- isHighlighted: false,
- userProfile: {
- userId: '16836085',
- displayName: 'HammerJ',
- webUrl: 'https://profile.theguardian.com/user/id/16836085',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16836085',
- avatar: 'https://avatar.guim.co.uk/user/16836085',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/16836085',
- badge: [],
- },
- responses: [
- {
- id: 138809736,
- body: 'And how many of those per annum are we treated to?
',
- date: '09 March 2020 7:39pm',
- isoDateTime: '2020-03-09T19:39:22Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809736',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809736',
- numRecommends: 15,
- isHighlighted: false,
- responseTo: {
- displayName: 'HammerJ',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809421',
- isoDateTime: '2020-03-09T19:20:33Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809421',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809421',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138809741,
- body: "They're heeere...
",
- date: '09 March 2020 7:39pm',
- isoDateTime: '2020-03-09T19:39:41Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809741',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809741',
- numRecommends: 21,
- isHighlighted: false,
- responseTo: {
- displayName: 'HammerJ',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809421',
- isoDateTime: '2020-03-09T19:20:33Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809421',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809421',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138809742,
- body: "There was a perfect opportunity there to comment on the NHS, the Tory's mismanagement of the NHS, the hardworking staff of the NHS...
Shame you chose not to do that, especially when there is so much to be said.
",
- date: '09 March 2020 7:39pm',
- isoDateTime: '2020-03-09T19:39:43Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809742',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809742',
- numRecommends: 11,
- isHighlighted: false,
- responseTo: {
- displayName: 'HammerJ',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809421',
- isoDateTime: '2020-03-09T19:20:33Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809421',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809421',
- },
- userProfile: {
- userId: '102241453',
- displayName: 'HarryVederci',
- webUrl: 'https://profile.theguardian.com/user/id/102241453',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/102241453',
- avatar: 'https://avatar.guim.co.uk/user/102241453',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/102241453',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 4,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 3,
- },
- },
- {
- id: 138809427,
- body: 'So if Britain defeats the virus, it will be thanks to the NHS, but if not, it will be the fault of the government, have I understood correctly?
',
- date: '09 March 2020 7:20pm',
- isoDateTime: '2020-03-09T19:20:53Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809427',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809427',
- numRecommends: 51,
- isHighlighted: false,
- userProfile: {
- userId: '15673053',
- displayName: 'fordprefect100',
- webUrl: 'https://profile.theguardian.com/user/id/15673053',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15673053',
- avatar: 'https://avatar.guim.co.uk/user/15673053',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/15673053',
- badge: [],
- },
- responses: [
- {
- id: 138809469,
- body: "Britain won't defeat the virus. Britain will pay a high price. For it's underfunded NHS.
",
- date: '09 March 2020 7:23pm',
- isoDateTime: '2020-03-09T19:23:20Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809469',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809469',
- numRecommends: 49,
- isHighlighted: false,
- responseTo: {
- displayName: 'fordprefect100',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809427',
- isoDateTime: '2020-03-09T19:20:53Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809427',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809427',
- },
- userProfile: {
- userId: '100701140',
- displayName: 'Arcais',
- webUrl: 'https://profile.theguardian.com/user/id/100701140',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100701140',
- avatar: 'https://avatar.guim.co.uk/user/100701140',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100701140',
- badge: [],
- },
- },
- {
- id: 138809717,
- body: "It's not about defeating the virus...its about minimizing its effect. Unfortunately for all pro Tories, and all those in need of the health service, the NHS is in its worst state for decades which is a political choice.
",
- date: '09 March 2020 7:38pm',
- isoDateTime: '2020-03-09T19:38:32Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809717',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809717',
- numRecommends: 38,
- isHighlighted: false,
- responseTo: {
- displayName: 'fordprefect100',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809427',
- isoDateTime: '2020-03-09T19:20:53Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809427',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809427',
- },
- userProfile: {
- userId: '12214978',
- displayName: 'SeeLifeDifferently',
- webUrl: 'https://profile.theguardian.com/user/id/12214978',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12214978',
- avatar: 'https://avatar.guim.co.uk/user/12214978',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12214978',
- badge: [],
- },
- },
- {
- id: 138809727,
- body: 'Broadly speaking yes.
',
- date: '09 March 2020 7:38pm',
- isoDateTime: '2020-03-09T19:38:52Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809727',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809727',
- numRecommends: 18,
- isHighlighted: false,
- responseTo: {
- displayName: 'fordprefect100',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809427',
- isoDateTime: '2020-03-09T19:20:53Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809427',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809427',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138809804,
- body: 'Yes. Why is that so difficult to understand? NHS is staffed by heroes go are constantly running on empty and pulling a service out of thin air. If it collapses,it will not be the staff
',
- date: '09 March 2020 7:43pm',
- isoDateTime: '2020-03-09T19:43:17Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809804',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809804',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'fordprefect100',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809427',
- isoDateTime: '2020-03-09T19:20:53Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809427',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809427',
- },
- userProfile: {
- userId: '12673774',
- displayName: 'Jim987',
- webUrl: 'https://profile.theguardian.com/user/id/12673774',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12673774',
- avatar: 'https://avatar.guim.co.uk/user/12673774',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12673774',
- badge: [],
- },
- },
- {
- id: 138809885,
- body: " So if Britain defeats the virus, it will be thanks to the NHS, but if not, it will be the fault of the government, have I understood correctly?
What's your argument exactly, that the NHS should be blamed for Coronavirus deaths?
",
- date: '09 March 2020 7:47pm',
- isoDateTime: '2020-03-09T19:47:55Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809885',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809885',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'fordprefect100',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809427',
- isoDateTime: '2020-03-09T19:20:53Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809427',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809427',
- },
- userProfile: {
- userId: '101821137',
- displayName: 'ScotchWoodcock',
- webUrl: 'https://profile.theguardian.com/user/id/101821137',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101821137',
- avatar: 'https://avatar.guim.co.uk/user/101821137',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101821137',
- badge: [],
- },
- },
- {
- id: 138810236,
- body: '"So if Britain defeats the virus, it will be thanks to the NHS, but if not, it will be the fault of the government, have I understood correctly?" Yep. I think that\'s about it.
',
- date: '09 March 2020 8:08pm',
- isoDateTime: '2020-03-09T20:08:21Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810236',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810236',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'fordprefect100',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809427',
- isoDateTime: '2020-03-09T19:20:53Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809427',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809427',
- },
- userProfile: {
- userId: '2461954',
- displayName: 'musubi',
- webUrl: 'https://profile.theguardian.com/user/id/2461954',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2461954',
- avatar: 'https://avatar.guim.co.uk/user/2461954',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2461954',
- badge: [],
- },
- },
- {
- id: 138810756,
- body: 'Makes sense, since the Govt. rations NHS resources.
',
- date: '09 March 2020 8:35pm',
- isoDateTime: '2020-03-09T20:35:42Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810756',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810756',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'fordprefect100',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809427',
- isoDateTime: '2020-03-09T19:20:53Z',
- date: '09 March 2020 7:20pm',
- commentId: '138809427',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809427',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- {
- id: 138811641,
- body: 'No, my argument is that the situation is rather more complex than - NHS: saintly, must not be criticised; Tory government: evil, to blame for every ill.
',
- date: '09 March 2020 9:21pm',
- isoDateTime: '2020-03-09T21:21:31Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811641',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811641',
- numRecommends: 18,
- isHighlighted: false,
- responseTo: {
- displayName: 'ScotchWoodcock',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809885',
- isoDateTime: '2020-03-09T19:47:55Z',
- date: '09 March 2020 7:47pm',
- commentId: '138809885',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809885',
- },
- userProfile: {
- userId: '15673053',
- displayName: 'fordprefect100',
- webUrl: 'https://profile.theguardian.com/user/id/15673053',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15673053',
- avatar: 'https://avatar.guim.co.uk/user/15673053',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15673053',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 9,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 8,
- },
- },
- {
- id: 138809438,
- body: 'Patriotic exhortations will not help. Just think of it - Lombardia hospitals, collapsing under stress of the epidemia, have five times more intensive care beds per head than the English NHS.
',
- date: '09 March 2020 7:21pm',
- isoDateTime: '2020-03-09T19:21:24Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809438',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809438',
- numRecommends: 14,
- isHighlighted: false,
- userProfile: {
- userId: '4532385',
- displayName: 'ladyga',
- webUrl: 'https://profile.theguardian.com/user/id/4532385',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4532385',
- avatar: 'https://avatar.guim.co.uk/user/4532385',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/4532385',
- badge: [],
- },
- },
- {
- id: 138809450,
- body: '18 months ago my life was saved by the wonderful NHS and I will always be in their debt for their love and care. While in hospital I got a glimpse of the terrible state of things brought about as a deliberate choice by the Tories, who are always smirking at us. This latest incarnation us an insult to us all
',
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:08Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809450',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809450',
- numRecommends: 89,
- isHighlighted: false,
- userProfile: {
- userId: '12360820',
- displayName: 'drragon',
- webUrl: 'https://profile.theguardian.com/user/id/12360820',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12360820',
- avatar: 'https://avatar.guim.co.uk/user/12360820',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/12360820',
+ userId: '10187427',
+ displayName: 'Jholder112233',
+ webUrl: 'https://profile.theguardian.com/user/id/10187427',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10187427',
+ avatar: 'https://avatar.guim.co.uk/user/10187427',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/10187427',
badge: [],
},
},
{
- id: 138809456,
- body: "It's the best because it's the only one.
",
- date: '09 March 2020 7:22pm',
- isoDateTime: '2020-03-09T19:22:28Z',
+ id: 48058272,
+ body: 'beautiful colours.
',
+ date: '25 February 2015 2:37pm',
+ isoDateTime: '2015-02-25T14:37:51Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809456',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809456',
- numRecommends: 1,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/48058272',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/48058272',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '15484688',
- displayName: 'Kropotkin72',
- webUrl: 'https://profile.theguardian.com/user/id/15484688',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15484688',
- avatar: 'https://avatar.guim.co.uk/user/15484688',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/15484688',
- badge: [],
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809470,
- body: "I tried asking Alexa what I should do, she shut down and hasn't come back
",
- date: '09 March 2020 7:23pm',
- isoDateTime: '2020-03-09T19:23:23Z',
+ id: 48058400,
+ body: 'love this bird
',
+ date: '25 February 2015 2:41pm',
+ isoDateTime: '2015-02-25T14:41:31Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809470',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809470',
- numRecommends: 11,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/48058400',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/48058400',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '11635482',
- displayName: 'MadBloris',
- webUrl: 'https://profile.theguardian.com/user/id/11635482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11635482',
- avatar: 'https://avatar.guim.co.uk/user/11635482',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/11635482',
- badge: [],
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
- {
- id: 138809476,
- body: " Germany has eight beds per 1,000 people , UK only 2.5.
Why is that? Well one reason is that with NHS and care funding in the UK ithere is complete lack of transparency. The money given to the health service and for care is entirely dependent on what politicians deem they should receive when it should really have nothing whatsoever to do with politics.
Compare NHS funding with the German (Bismarck) model whereby healthcare is funded by employee, employer and state contributions. Everyone has health insurance contributions taken out of their wages, salaries, pensions or unemployment benefits and this money, along with the employer's contribution, is paid into a state-approved health fund (Krankenkasse) of the contributor's own choice. This money can only be used for healthcare and absolutely nothing else. Care insurance is likewise also taken directly from wages, salaries, pensions or unemployment benefits and cannot be used for any other purpose but for care. Social insurance and tax are other, separate funds.
With the NHS model, national insurance is simply another tax which the government can, and does, spend as it pleases and on whatever it pleases such as roads, HS2, right to buy schemes, tax breaks for the rich etc. and the NHS is given whatever funding the government and the politicians feel they can get away with, and that is clearly wrong to everybody except some brainwashed Brits.
",
- date: '09 March 2020 7:24pm',
- isoDateTime: '2020-03-09T19:24:05Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809476',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809476',
- numRecommends: 59,
- isHighlighted: false,
- userProfile: {
- userId: '16708568',
- displayName: 'SteveInBavaria',
- webUrl: 'https://profile.theguardian.com/user/id/16708568',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16708568',
- avatar: 'https://avatar.guim.co.uk/user/16708568',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/16708568',
- badge: [],
- },
- responses: [
- {
- id: 138809503,
- body: 'Germany spend way more per capita than uk
',
- date: '09 March 2020 7:25pm',
- isoDateTime: '2020-03-09T19:25:46Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809503',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809503',
- numRecommends: 31,
- isHighlighted: false,
- responseTo: {
- displayName: 'SteveInBavaria',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809476',
- isoDateTime: '2020-03-09T19:24:05Z',
- date: '09 March 2020 7:24pm',
- commentId: '138809476',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809476',
- },
- userProfile: {
- userId: '12567954',
- displayName: 'sausageweasel',
- webUrl: 'https://profile.theguardian.com/user/id/12567954',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12567954',
- avatar: 'https://avatar.guim.co.uk/user/12567954',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12567954',
- badge: [],
- },
- },
- {
- id: 138809523,
- body: '“ With the NHS model, national insurance is simply another tax which the government can, and does, spend as it pleases and on whatever it pleases”
Utterly wrong, unfortunately. Good comment apart from that.
',
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:11Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809523',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809523',
- numRecommends: 11,
- isHighlighted: false,
- responseTo: {
- displayName: 'SteveInBavaria',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809476',
- isoDateTime: '2020-03-09T19:24:05Z',
- date: '09 March 2020 7:24pm',
- commentId: '138809476',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809476',
- },
- userProfile: {
- userId: '17639802',
- displayName: 'AstutiorTe',
- webUrl: 'https://profile.theguardian.com/user/id/17639802',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17639802',
- avatar: 'https://avatar.guim.co.uk/user/17639802',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17639802',
- badge: [],
- },
- },
- {
- id: 138809528,
- body: 'Well, looks like this could make some sense. !Way more" btw is about 20% more.
',
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809528',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809528',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'sausageweasel',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809503',
- isoDateTime: '2020-03-09T19:25:46Z',
- date: '09 March 2020 7:25pm',
- commentId: '138809503',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809503',
- },
- userProfile: {
- userId: '100701140',
- displayName: 'Arcais',
- webUrl: 'https://profile.theguardian.com/user/id/100701140',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100701140',
- avatar: 'https://avatar.guim.co.uk/user/100701140',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100701140',
- badge: [],
- },
- },
- {
- id: 138809720,
- body: 'The NHS is vastly underfunded compared to the German system. If we funded our NHS to the same level as the Germans we would have a vastly superior.
',
- date: '09 March 2020 7:38pm',
- isoDateTime: '2020-03-09T19:38:39Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809720',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809720',
- numRecommends: 15,
- isHighlighted: false,
- responseTo: {
- displayName: 'SteveInBavaria',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809476',
- isoDateTime: '2020-03-09T19:24:05Z',
- date: '09 March 2020 7:24pm',
- commentId: '138809476',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809476',
- },
- userProfile: {
- userId: '12673774',
- displayName: 'Jim987',
- webUrl: 'https://profile.theguardian.com/user/id/12673774',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12673774',
- avatar: 'https://avatar.guim.co.uk/user/12673774',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12673774',
- badge: [],
- },
- },
- {
- id: 138809750,
- body: ' Germany spend way more per capita than uk
In Germany everyone has to pay Krankenkasse contributions, even pensioners. I recently started recieving my UK pension and have to pay a 7.3% out of it to the Krankenkasse for healthcare and a 3.3% for care insurance.
',
- date: '09 March 2020 7:39pm',
- isoDateTime: '2020-03-09T19:39:52Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809750',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809750',
- numRecommends: 19,
- isHighlighted: false,
- responseTo: {
- displayName: 'sausageweasel',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809503',
- isoDateTime: '2020-03-09T19:25:46Z',
- date: '09 March 2020 7:25pm',
- commentId: '138809503',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809503',
- },
- userProfile: {
- userId: '16708568',
- displayName: 'SteveInBavaria',
- webUrl: 'https://profile.theguardian.com/user/id/16708568',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16708568',
- avatar: 'https://avatar.guim.co.uk/user/16708568',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16708568',
- badge: [],
- },
- },
- {
- id: 138809972,
- body: "''The money given to the health service and for care is entirely dependent on what politicians deem they should receive when it should really have nothing whatsoever to do with politics.''
Agree.
NHS and social care funding should be one and ringfenced.
",
- date: '09 March 2020 7:53pm',
- isoDateTime: '2020-03-09T19:53:25Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809972',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809972',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'SteveInBavaria',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809476',
- isoDateTime: '2020-03-09T19:24:05Z',
- date: '09 March 2020 7:24pm',
- commentId: '138809476',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809476',
- },
- userProfile: {
- userId: '10127231',
- displayName: 'irreverentnurse',
- webUrl: 'https://profile.theguardian.com/user/id/10127231',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10127231',
- avatar: 'https://avatar.guim.co.uk/user/10127231',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10127231',
- badge: [],
- },
- },
- {
- id: 138810520,
- body: 'S/he was Wrong De Jure, correct De Facto. The Govt. can "borrow" from the fund as it sees fit.
',
- date: '09 March 2020 8:23pm',
- isoDateTime: '2020-03-09T20:23:15Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810520',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810520',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'AstutiorTe',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809523',
- isoDateTime: '2020-03-09T19:27:11Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809523',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809523',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- {
- id: 138810621,
- body: 'more like 60% more https://data.oecd.org/healthres/health-spending.htm
',
- date: '09 March 2020 8:28pm',
- isoDateTime: '2020-03-09T20:28:15Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810621',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810621',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'Arcais',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809528',
- isoDateTime: '2020-03-09T19:27:35Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809528',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809528',
- },
- userProfile: {
- userId: '12567954',
- displayName: 'sausageweasel',
- webUrl: 'https://profile.theguardian.com/user/id/12567954',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12567954',
- avatar: 'https://avatar.guim.co.uk/user/12567954',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12567954',
- badge: [],
- },
- },
- {
- id: 138810751,
- body: 'Nnope. True.
',
- date: '09 March 2020 8:35pm',
- isoDateTime: '2020-03-09T20:35:34Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810751',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810751',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'AstutiorTe',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809523',
- isoDateTime: '2020-03-09T19:27:11Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809523',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809523',
- },
- userProfile: {
- userId: '101530003',
- displayName: 'Docklie',
- webUrl: 'https://profile.theguardian.com/user/id/101530003',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101530003',
- avatar: 'https://avatar.guim.co.uk/user/101530003',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101530003',
- badge: [],
- },
- },
- {
- id: 138811386,
- body: 'It also depends on the definition of an ICU bed - have a feeling it may be different. Also, threshold for referral is lower in Germany, whilst UK doctors are much less likely to refer to ITU.
',
- date: '09 March 2020 9:09pm',
- isoDateTime: '2020-03-09T21:09:26Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811386',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811386',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'SteveInBavaria',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809476',
- isoDateTime: '2020-03-09T19:24:05Z',
- date: '09 March 2020 7:24pm',
- commentId: '138809476',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809476',
- },
- userProfile: {
- userId: '12132582',
- displayName: 'fingerlickin',
- webUrl: 'https://profile.theguardian.com/user/id/12132582',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12132582',
- avatar: 'https://avatar.guim.co.uk/user/12132582',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12132582',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 11,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 10,
+ {
+ id: 49450704,
+ body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
+ date: '25 March 2015 3:06pm',
+ isoDateTime: '2015-03-25T15:06:53Z',
+ status: 'blocked',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/49450704',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/49450704',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809480,
- body: 'Fear not. Cummings and his incel mates are working on an AI solution.
',
- date: '09 March 2020 7:24pm',
- isoDateTime: '2020-03-09T19:24:20Z',
+ id: 49505722,
+ body: 'Test from the API 1133942872
',
+ date: '26 March 2015 4:09pm',
+ isoDateTime: '2015-03-26T16:09:13Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809480',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809480',
- numRecommends: 9,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/49505722',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/49505722',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '15834048',
- displayName: 'Pinkie123',
- webUrl: 'https://profile.theguardian.com/user/id/15834048',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15834048',
- avatar: 'https://avatar.guim.co.uk/user/15834048',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/15834048',
- badge: [],
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
- responses: [
- {
- id: 138811504,
- body: 'Any evidence that any of his mates are incels or is just a dig at geeks? Did it make you feel like one if the big kids?
',
- date: '09 March 2020 9:16pm',
- isoDateTime: '2020-03-09T21:16:09Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811504',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811504',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Pinkie123',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809480',
- isoDateTime: '2020-03-09T19:24:20Z',
- date: '09 March 2020 7:24pm',
- commentId: '138809480',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809480',
- },
- userProfile: {
- userId: '102347730',
- displayName: 'Donkeydoo',
- webUrl: 'https://profile.theguardian.com/user/id/102347730',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/102347730',
- avatar: 'https://avatar.guim.co.uk/user/102347730',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/102347730',
- badge: [],
- },
- },
- {
- id: 138811713,
- body: 'Yarp.
',
- date: '09 March 2020 9:25pm',
- isoDateTime: '2020-03-09T21:25:13Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811713',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811713',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Donkeydoo',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138811504',
- isoDateTime: '2020-03-09T21:16:09Z',
- date: '09 March 2020 9:16pm',
- commentId: '138811504',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138811504',
- },
- userProfile: {
- userId: '15834048',
- displayName: 'Pinkie123',
- webUrl: 'https://profile.theguardian.com/user/id/15834048',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15834048',
- avatar: 'https://avatar.guim.co.uk/user/15834048',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15834048',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 3,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 2,
+ },
+ {
+ id: 49773224,
+ body: 'Test from the API -2124514465
',
+ date: '01 April 2015 12:53pm',
+ isoDateTime: '2015-04-01T11:53:54Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/49773224',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/49773224',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809485,
- body: "NHS inpatient beds operate at almost 100% capacity. In order for NHS to deal with any crisis requiring more inpatient treatment it has to discharge more patients and cancel elective procedures. As each year passes and each year brings new crises the NHS slowly deteriorates. As the NHS slowly deteriorates staff morale drops. As opportunities arise for staff to go elsewhere increases, vacancies increase. The NHS is being slowly wound down. Each new crisis is slightly worse than the last. It is already de rigueur to have top up / queue jumping (those cancelled elective procedures) health insurance for those who can afford it. Eventually like slowly boiling a frog the Tory plan will come to fruition. The NHS won't be there with universal healthcare for all and a lot of insurance companies will be quids in....
",
- date: '09 March 2020 7:24pm',
- isoDateTime: '2020-03-09T19:24:34Z',
+ id: 49828269,
+ body: 'Test from the API 2008701699
',
+ date: '02 April 2015 3:17pm',
+ isoDateTime: '2015-04-02T14:17:27Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809485',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809485',
- numRecommends: 17,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/49828269',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/49828269',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '14094571',
- displayName: 'GuardianFodder',
- webUrl: 'https://profile.theguardian.com/user/id/14094571',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14094571',
- avatar: 'https://avatar.guim.co.uk/user/14094571',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14094571',
- badge: [],
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809498,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:25pm',
- isoDateTime: '2020-03-09T19:25:39Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809498',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809498',
+ id: 49835646,
+ body: 'test post
',
+ date: '02 April 2015 5:53pm',
+ isoDateTime: '2015-04-02T16:53:22Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/49835646',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/49835646',
numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '101763863',
- displayName: 'DarthRaider',
- webUrl: 'https://profile.theguardian.com/user/id/101763863',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101763863',
- avatar: 'https://avatar.guim.co.uk/user/101763863',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/101763863',
+ userId: '13068528',
+ displayName: 'User489362',
+ webUrl: 'https://profile.theguardian.com/user/id/13068528',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13068528',
+ avatar: 'https://avatar.guim.co.uk/user/13068528',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13068528',
badge: [],
},
},
{
- id: 138809509,
- body: 'Does any reasonably-sized country in the world run a health service that has sufficient beds for, say, 10% of the population? In the UK we would be looking at about 6 million. This problem is beyond the normal arguments of funding a health system.
',
- date: '09 March 2020 7:26pm',
- isoDateTime: '2020-03-09T19:26:06Z',
+ id: 50178110,
+ body: 'Test from the API 24995912
',
+ date: '09 April 2015 11:39am',
+ isoDateTime: '2015-04-09T10:39:28Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809509',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809509',
- numRecommends: 51,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50178110',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50178110',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '14756178',
- displayName: 'hhowells',
- webUrl: 'https://profile.theguardian.com/user/id/14756178',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14756178',
- avatar: 'https://avatar.guim.co.uk/user/14756178',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14756178',
- badge: [],
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
- responses: [
- {
- id: 138809557,
- body: 'Record amounts spent on the bottomless pit . Just way too much demand and pressure under numbers of people.
',
- date: '09 March 2020 7:29pm',
- isoDateTime: '2020-03-09T19:29:00Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809557',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809557',
- numRecommends: 23,
- isHighlighted: false,
- responseTo: {
- displayName: 'hhowells',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809509',
- isoDateTime: '2020-03-09T19:26:06Z',
- date: '09 March 2020 7:26pm',
- commentId: '138809509',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809509',
- },
- userProfile: {
- userId: '101763863',
- displayName: 'DarthRaider',
- webUrl: 'https://profile.theguardian.com/user/id/101763863',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101763863',
- avatar: 'https://avatar.guim.co.uk/user/101763863',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101763863',
- badge: [],
- },
- },
- {
- id: 138809602,
- body: "Enough of the bail out of bankers following 2008.
What's your take on the health situation?
",
- date: '09 March 2020 7:31pm',
- isoDateTime: '2020-03-09T19:31:41Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809602',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809602',
- numRecommends: 52,
- isHighlighted: false,
- responseTo: {
- displayName: 'DarthRaider',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809557',
- isoDateTime: '2020-03-09T19:29:00Z',
- date: '09 March 2020 7:29pm',
- commentId: '138809557',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809557',
- },
- userProfile: {
- userId: '16332843',
- displayName: 'dougmeyberry',
- webUrl: 'https://profile.theguardian.com/user/id/16332843',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16332843',
- avatar: 'https://avatar.guim.co.uk/user/16332843',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16332843',
- badge: [],
- },
- },
- {
- id: 138809639,
- body: "Absolutely daft argument. The health service has been struggling over and beyond anything seen elsewhere in western Europe for at least 10 years. Other countries are indeed better equipped but obviously they'll struggle -- just not as much as UK. Understand now?!
",
- date: '09 March 2020 7:34pm',
- isoDateTime: '2020-03-09T19:34:13Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809639',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809639',
- numRecommends: 36,
- isHighlighted: false,
- responseTo: {
- displayName: 'hhowells',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809509',
- isoDateTime: '2020-03-09T19:26:06Z',
- date: '09 March 2020 7:26pm',
- commentId: '138809509',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809509',
- },
- userProfile: {
- userId: '12214978',
- displayName: 'SeeLifeDifferently',
- webUrl: 'https://profile.theguardian.com/user/id/12214978',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12214978',
- avatar: 'https://avatar.guim.co.uk/user/12214978',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12214978',
- badge: [],
- },
- },
- {
- id: 138809658,
- body: 'How does our beds per capita compare comparable countries?
',
- date: '09 March 2020 7:35pm',
- isoDateTime: '2020-03-09T19:35:05Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809658',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809658',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'DarthRaider',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809557',
- isoDateTime: '2020-03-09T19:29:00Z',
- date: '09 March 2020 7:29pm',
- commentId: '138809557',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809557',
- },
- userProfile: {
- userId: '12673774',
- displayName: 'Jim987',
- webUrl: 'https://profile.theguardian.com/user/id/12673774',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12673774',
- avatar: 'https://avatar.guim.co.uk/user/12673774',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12673774',
- badge: [],
- },
- },
- {
- id: 138809692,
- body: ' This problem is beyond the normal arguments of funding a health system.
Still... Thanks to @Foralltime for having shared this earlier.
Number of hospital beds per 1,000 people: JAP 13.5 RUS 8.05 GER 8.0 HUN 7.O2 CZE 6.63 POL 6.62 FRA 5.98 BEL 5.76 LUX 4.66 SWI 4.53 CHI 4.34 GRE 4.21 NOR 3.6 POR 3.39 NETH 3.32 FIN 3.28 ITA 3.18 SPA 2.97 IRE 2.96 USA 2.77 DEN 2.61 UK 2.54
Source: OECD
',
- date: '09 March 2020 7:36pm',
- isoDateTime: '2020-03-09T19:36:42Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809692',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809692',
- numRecommends: 18,
- isHighlighted: false,
- responseTo: {
- displayName: 'hhowells',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809509',
- isoDateTime: '2020-03-09T19:26:06Z',
- date: '09 March 2020 7:26pm',
- commentId: '138809509',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809509',
- },
- userProfile: {
- userId: '18538747',
- displayName: 'IfItsMagic',
- webUrl: 'https://profile.theguardian.com/user/id/18538747',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18538747',
- avatar: 'https://avatar.guim.co.uk/user/18538747',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/18538747',
- badge: [],
- },
- },
- {
- id: 138809769,
- body: "SO, about the same as The Guardian's promised land of Denmark then?
What's the problem here, other than other countries seemingly wasting money on more beds than Denmark, so anyone, needs?
Also, it's silly to focus on single metrics.
Would you rather catch Covid-19 here or in Russia? Apparently you'd prefer to be in Russia.
",
- date: '09 March 2020 7:41pm',
- isoDateTime: '2020-03-09T19:41:19Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809769',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809769',
- numRecommends: 17,
- isHighlighted: false,
- responseTo: {
- displayName: 'IfItsMagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809692',
- isoDateTime: '2020-03-09T19:36:42Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809692',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809692',
- },
- userProfile: {
- userId: '16022312',
- displayName: 'Aloonatron',
- webUrl: 'https://profile.theguardian.com/user/id/16022312',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16022312',
- avatar: 'https://avatar.guim.co.uk/user/16022312',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16022312',
- badge: [],
- },
- },
- {
- id: 138809791,
- body: 'More like Daft Ada.
',
- date: '09 March 2020 7:42pm',
- isoDateTime: '2020-03-09T19:42:40Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809791',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809791',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'DarthRaider',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809557',
- isoDateTime: '2020-03-09T19:29:00Z',
- date: '09 March 2020 7:29pm',
- commentId: '138809557',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809557',
- },
- userProfile: {
- userId: '10127231',
- displayName: 'irreverentnurse',
- webUrl: 'https://profile.theguardian.com/user/id/10127231',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10127231',
- avatar: 'https://avatar.guim.co.uk/user/10127231',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10127231',
- badge: [],
- },
- },
- {
- id: 138809831,
- body: "I do not disagree with the point you make. But do all these health care systems provide the same range of services? (I don't know). And in 2010, after 13 years of Labour, there were 2.9 beds per 1000 people. It ain't just the Tories.
",
- date: '09 March 2020 7:45pm',
- isoDateTime: '2020-03-09T19:45:09Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809831',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809831',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'IfItsMagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809692',
- isoDateTime: '2020-03-09T19:36:42Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809692',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809692',
- },
- userProfile: {
- userId: '14756178',
- displayName: 'hhowells',
- webUrl: 'https://profile.theguardian.com/user/id/14756178',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14756178',
- avatar: 'https://avatar.guim.co.uk/user/14756178',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14756178',
- badge: [],
- },
- },
- {
- id: 138809858,
- body: " Also, it's silly to focus on single metrics.
Would you rather catch Covid-19 here or in Russia? Apparently you'd prefer to be in Russia.
I'm just sharing official figures. Btw maybe Denmark has a solid system to cure people at home?
",
- date: '09 March 2020 7:46pm',
- isoDateTime: '2020-03-09T19:46:24Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809858',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809858',
- numRecommends: 6,
- isHighlighted: false,
- responseTo: {
- displayName: 'Aloonatron',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809769',
- isoDateTime: '2020-03-09T19:41:19Z',
- date: '09 March 2020 7:41pm',
- commentId: '138809769',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809769',
- },
- userProfile: {
- userId: '18538747',
- displayName: 'IfItsMagic',
- webUrl: 'https://profile.theguardian.com/user/id/18538747',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18538747',
- avatar: 'https://avatar.guim.co.uk/user/18538747',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/18538747',
- badge: [],
- },
- },
- {
- id: 138809908,
- body: " I do not disagree with the point you make.
I'm not making any point.",
- date: '09 March 2020 7:49pm',
- isoDateTime: '2020-03-09T19:49:04Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809908',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809908',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'hhowells',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809831',
- isoDateTime: '2020-03-09T19:45:09Z',
- date: '09 March 2020 7:45pm',
- commentId: '138809831',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809831',
- },
- userProfile: {
- userId: '18538747',
- displayName: 'IfItsMagic',
- webUrl: 'https://profile.theguardian.com/user/id/18538747',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18538747',
- avatar: 'https://avatar.guim.co.uk/user/18538747',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/18538747',
- badge: [],
- },
- },
- {
- id: 138809931,
- body: " What's the problem here, other than other countries seemingly wasting money on more beds than Denmark, so anyone, needs?
Wasting money? Could you expand?",
- date: '09 March 2020 7:50pm',
- isoDateTime: '2020-03-09T19:50:47Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809931',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809931',
- numRecommends: 11,
- isHighlighted: false,
- responseTo: {
- displayName: 'Aloonatron',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809769',
- isoDateTime: '2020-03-09T19:41:19Z',
- date: '09 March 2020 7:41pm',
- commentId: '138809769',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809769',
- },
- userProfile: {
- userId: '18538747',
- displayName: 'IfItsMagic',
- webUrl: 'https://profile.theguardian.com/user/id/18538747',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18538747',
- avatar: 'https://avatar.guim.co.uk/user/18538747',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/18538747',
- badge: [],
- },
- },
- {
- id: 138810201,
- body: 'They are all bad if your metric of choice is whether they can count with a large-scale epidemic.
',
- date: '09 March 2020 8:06pm',
- isoDateTime: '2020-03-09T20:06:38Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810201',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810201',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Jim987',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809658',
- isoDateTime: '2020-03-09T19:35:05Z',
- date: '09 March 2020 7:35pm',
- commentId: '138809658',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809658',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138810387,
- body: 'UK almost the same as Denmark...ususally seen as a progressive socially aware country. I suspect raw numbers are not the full story.
',
- date: '09 March 2020 8:16pm',
- isoDateTime: '2020-03-09T20:16:16Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810387',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810387',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'IfItsMagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809692',
- isoDateTime: '2020-03-09T19:36:42Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809692',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809692',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- {
- id: 138810416,
- body: ' I suspect raw numbers are not the full story.
Indeed. Maybe Denmark has a solid system to cure people at home.',
- date: '09 March 2020 8:17pm',
- isoDateTime: '2020-03-09T20:17:41Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810416',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810416',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'ManuelSantiago',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810387',
- isoDateTime: '2020-03-09T20:16:16Z',
- date: '09 March 2020 8:16pm',
- commentId: '138810387',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810387',
- },
- userProfile: {
- userId: '18538747',
- displayName: 'IfItsMagic',
- webUrl: 'https://profile.theguardian.com/user/id/18538747',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18538747',
- avatar: 'https://avatar.guim.co.uk/user/18538747',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/18538747',
- badge: [],
- },
- },
- {
- id: 138810482,
- body: 'Sticking my neck out I would say how much per capital spent would be an indicator of how successful they are at fighting Coronavirus
',
- date: '09 March 2020 8:20pm',
- isoDateTime: '2020-03-09T20:20:56Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810482',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810482',
- numRecommends: 1,
- isHighlighted: false,
- responseTo: {
- displayName: 'Delius',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810201',
- isoDateTime: '2020-03-09T20:06:38Z',
- date: '09 March 2020 8:06pm',
- commentId: '138810201',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810201',
- },
- userProfile: {
- userId: '12673774',
- displayName: 'Jim987',
- webUrl: 'https://profile.theguardian.com/user/id/12673774',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12673774',
- avatar: 'https://avatar.guim.co.uk/user/12673774',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12673774',
- badge: [],
- },
- },
- {
- id: 138811550,
- body: 'https://fullfact.org/health/do-we-have-fewer-hospital-beds-most-europe/
They say one reason for the low value in the UK is increased care in the community.
',
- date: '09 March 2020 9:17pm',
- isoDateTime: '2020-03-09T21:17:56Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811550',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811550',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'IfItsMagic',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810416',
- isoDateTime: '2020-03-09T20:17:41Z',
- date: '09 March 2020 8:17pm',
- commentId: '138810416',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810416',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- {
- id: 138811754,
- body: 'Hmmm...
But thanks for the link :)
',
- date: '09 March 2020 9:27pm',
- isoDateTime: '2020-03-09T21:27:01Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811754',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811754',
- numRecommends: 1,
- isHighlighted: false,
- responseTo: {
- displayName: 'ManuelSantiago',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138811550',
- isoDateTime: '2020-03-09T21:17:56Z',
- date: '09 March 2020 9:17pm',
- commentId: '138811550',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138811550',
- },
- userProfile: {
- userId: '18538747',
- displayName: 'IfItsMagic',
- webUrl: 'https://profile.theguardian.com/user/id/18538747',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18538747',
- avatar: 'https://avatar.guim.co.uk/user/18538747',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/18538747',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 18,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 17,
+ },
+ {
+ id: 50185580,
+ body: 'Test from the API 1730167644
',
+ date: '09 April 2015 1:44pm',
+ isoDateTime: '2015-04-09T12:44:24Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50185580',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50185580',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 50230774,
+ body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
+ date: '10 April 2015 10:43am',
+ isoDateTime: '2015-04-10T09:43:27Z',
+ status: 'blocked',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50230774',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50230774',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 50438395,
+ body: 'Test from the API 672270292
',
+ date: '14 April 2015 3:30pm',
+ isoDateTime: '2015-04-14T14:30:27Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50438395',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50438395',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809512,
- body: "This is getting serious. It's time to call on the odd bods and the misfits!! It's time to call upon the super forecasters!!
",
- date: '09 March 2020 7:26pm',
- isoDateTime: '2020-03-09T19:26:14Z',
+ id: 50534761,
+ body: 'My favourite bird!
',
+ date: '16 April 2015 12:10pm',
+ isoDateTime: '2015-04-16T11:10:36Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809512',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809512',
- numRecommends: 4,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50534761',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50534761',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '102204439',
- displayName: 'Oraclebyname',
- webUrl: 'https://profile.theguardian.com/user/id/102204439',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/102204439',
- avatar: 'https://avatar.guim.co.uk/user/102204439',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/102204439',
+ userId: '14779990',
+ displayName: 'User461881',
+ webUrl: 'https://profile.theguardian.com/user/id/14779990',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14779990',
+ avatar: 'https://avatar.guim.co.uk/user/14779990',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14779990',
badge: [],
},
- responses: [
- {
- id: 138811307,
- body: " It's time to call on the odd bods and the misfits!! It's time to call upon the super forecasters!!
Could we maybe not call on the ones who defined nurses, physiotherapists etc as “unskilled workers” .",
- date: '09 March 2020 9:05pm',
- isoDateTime: '2020-03-09T21:05:33Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811307',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811307',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'Oraclebyname',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809512',
- isoDateTime: '2020-03-09T19:26:14Z',
- date: '09 March 2020 7:26pm',
- commentId: '138809512',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809512',
- },
- userProfile: {
- userId: '101956088',
- displayName: 'coultetscandi',
- webUrl: 'https://profile.theguardian.com/user/id/101956088',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101956088',
- avatar: 'https://avatar.guim.co.uk/user/101956088',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101956088',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 2,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 1,
- },
},
{
- id: 138809521,
- body: 'Another change of tune. Make up your mind.
',
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:00Z',
+ id: 50540517,
+ body: 'Cool Broadbill
',
+ date: '16 April 2015 1:53pm',
+ isoDateTime: '2015-04-16T12:53:01Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809521',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809521',
- numRecommends: 4,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50540517',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50540517',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '14976192',
- displayName: 'EbonyPericarp',
- webUrl: 'https://profile.theguardian.com/user/id/14976192',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14976192',
- avatar: 'https://avatar.guim.co.uk/user/14976192',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14976192',
+ userId: '14780375',
+ displayName: 'User435746',
+ webUrl: 'https://profile.theguardian.com/user/id/14780375',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14780375',
+ avatar: 'https://avatar.guim.co.uk/user/14780375',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14780375',
badge: [],
},
- responses: [
- {
- id: 138809605,
- body: 'At least she has a mind to make up.
',
- date: '09 March 2020 7:31pm',
- isoDateTime: '2020-03-09T19:31:47Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809605',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809605',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'EbonyPericarp',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809521',
- isoDateTime: '2020-03-09T19:27:00Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809521',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809521',
- },
- userProfile: {
- userId: '12214978',
- displayName: 'SeeLifeDifferently',
- webUrl: 'https://profile.theguardian.com/user/id/12214978',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12214978',
- avatar: 'https://avatar.guim.co.uk/user/12214978',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12214978',
- badge: [],
- },
- },
- {
- id: 138809722,
- body: "Or just makes things up and doesn't mind?
",
- date: '09 March 2020 7:38pm',
- isoDateTime: '2020-03-09T19:38:43Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809722',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809722',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'SeeLifeDifferently',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809605',
- isoDateTime: '2020-03-09T19:31:47Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809605',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809605',
- },
- userProfile: {
- userId: '16022312',
- displayName: 'Aloonatron',
- webUrl: 'https://profile.theguardian.com/user/id/16022312',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16022312',
- avatar: 'https://avatar.guim.co.uk/user/16022312',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16022312',
- badge: [],
- },
- },
- {
- id: 138809761,
- body: 'So...please inform us all which things in particular Polly has made up?? Or are you blinded by prejudice?
',
- date: '09 March 2020 7:40pm',
- isoDateTime: '2020-03-09T19:40:36Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809761',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809761',
- numRecommends: 14,
- isHighlighted: false,
- responseTo: {
- displayName: 'Aloonatron',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809722',
- isoDateTime: '2020-03-09T19:38:43Z',
- date: '09 March 2020 7:38pm',
- commentId: '138809722',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809722',
- },
- userProfile: {
- userId: '12214978',
- displayName: 'SeeLifeDifferently',
- webUrl: 'https://profile.theguardian.com/user/id/12214978',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12214978',
- avatar: 'https://avatar.guim.co.uk/user/12214978',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12214978',
- badge: [],
- },
- },
- {
- id: 138810190,
- body: 'By definition it can’t be prejudice, unless you’re suggesting they’ve never read her articles. Subjectivity perhaps. Or, shock horror, even a little joke? Examples are readily available in the archives of a misuse of statistics (try clicking the hyperlinks on a few of her articles, although she’s not as bad at this as Monbiot); human error would no doubt be the excuse there. Exaggeration aplenty too but at what point would you consider exaggeration becomes fabrication? Perhaps even for objective unprejudiced little you that depends on who wrote the price.
',
- date: '09 March 2020 8:05pm',
- isoDateTime: '2020-03-09T20:05:47Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810190',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810190',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'SeeLifeDifferently',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809761',
- isoDateTime: '2020-03-09T19:40:36Z',
- date: '09 March 2020 7:40pm',
- commentId: '138809761',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809761',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138810279,
- body: "What odds are you offering on didn't read the article? I'm in for a fiver.
",
- date: '09 March 2020 8:10pm',
- isoDateTime: '2020-03-09T20:10:30Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810279',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810279',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Delius',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810190',
- isoDateTime: '2020-03-09T20:05:47Z',
- date: '09 March 2020 8:05pm',
- commentId: '138810190',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810190',
- },
- userProfile: {
- userId: '11642858',
- displayName: 'OrangeLagoon',
- webUrl: 'https://profile.theguardian.com/user/id/11642858',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11642858',
- avatar: 'https://avatar.guim.co.uk/user/11642858',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11642858',
- badge: [],
- },
- },
- {
- id: 138810344,
- body: 'Interpretations of data can be biased by prejudices held at the time of reading.
',
- date: '09 March 2020 8:14pm',
- isoDateTime: '2020-03-09T20:14:02Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810344',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810344',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'Delius',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810190',
- isoDateTime: '2020-03-09T20:05:47Z',
- date: '09 March 2020 8:05pm',
- commentId: '138810190',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810190',
- },
- userProfile: {
- userId: '100548223',
- displayName: 'ManuelSantiago',
- webUrl: 'https://profile.theguardian.com/user/id/100548223',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100548223',
- avatar: 'https://avatar.guim.co.uk/user/100548223',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/100548223',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 7,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 6,
+ },
+ {
+ id: 50540563,
+ body: 'Cool broadbill
',
+ date: '16 April 2015 1:53pm',
+ isoDateTime: '2015-04-16T12:53:43Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50540563',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50540563',
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '14780375',
+ displayName: 'User435746',
+ webUrl: 'https://profile.theguardian.com/user/id/14780375',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14780375',
+ avatar: 'https://avatar.guim.co.uk/user/14780375',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14780375',
+ badge: [],
},
},
{
- id: 138809524,
- body: "I've tried hard to remain rational and circumspect but, as time passes, and we watch the epidemic/pandemic unfold, my anxiety levels are escalating.
In short, I'm becoming frightened.
I'm frightened by reports out of Italy indicating that Covid-19 has a higher mortality rate than we've been advised.
I'm frightened by data suggesting that roughly 10 percent of infected people will need ICU treatment.
I'm frightened that the risks to younger people appear more elevated than initially asserted.
Most of all, I'm frightened for my parents, who fit every category for elevated risk identified.
Leo Varadkar has announced sick pay levels roughly three times the rate of our own statutory sick pay. Furthermore, Varadkar's guaranteed this will be paid to all workers who fall ill.
Everywhere we look, leaders are taking more strident measures than the UK to protect their people.
We're going to need a Hurculean effort from our wonderful NHS staff, because I have little faith in our government. I'm so very grateful that our NHS staff are there.
",
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:29Z',
+ id: 50543198,
+ body: 'Nice bill!
',
+ date: '16 April 2015 2:44pm',
+ isoDateTime: '2015-04-16T13:44:21Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809524',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809524',
- numRecommends: 110,
- isHighlighted: true,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50543198',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50543198',
+ numRecommends: 1,
+ isHighlighted: false,
userProfile: {
- userId: '18080588',
- displayName: 'Smolker',
- webUrl: 'https://profile.theguardian.com/user/id/18080588',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18080588',
- avatar: 'https://avatar.guim.co.uk/user/18080588',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/18080588',
+ userId: '14780616',
+ displayName: 'User727613',
+ webUrl: 'https://profile.theguardian.com/user/id/14780616',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14780616',
+ avatar: 'https://avatar.guim.co.uk/user/14780616',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14780616',
badge: [],
},
- responses: [
- {
- id: 138809697,
- body: 'Keep trying to remain rational; fear, and especially dwelling on it, doesn’t do any good.
',
- date: '09 March 2020 7:37pm',
- isoDateTime: '2020-03-09T19:37:04Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809697',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809697',
- numRecommends: 36,
- isHighlighted: false,
- responseTo: {
- displayName: 'Smolker',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809524',
- isoDateTime: '2020-03-09T19:27:29Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809524',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809524',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138810338,
- body: 'On the bright side: - Young people appear to be not very effected - Most healthy people recover - Even in Wuhan, only a small proportion of the population caught the illness (or lots more caught it, which means the death rate is lower) - Local precautions can reduce the chance of catching the illness.
',
- date: '09 March 2020 8:13pm',
- isoDateTime: '2020-03-09T20:13:51Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810338',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810338',
- numRecommends: 33,
- isHighlighted: false,
- responseTo: {
- displayName: 'Smolker',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809524',
- isoDateTime: '2020-03-09T19:27:29Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809524',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809524',
- },
- userProfile: {
- userId: '3578530',
- displayName: 'EnviroCapitalist',
- webUrl: 'https://profile.theguardian.com/user/id/3578530',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3578530',
- avatar: 'https://avatar.guim.co.uk/user/3578530',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3578530',
- badge: [],
- },
- },
- {
- id: 138810472,
- body: 'I think people panicking too much are causing further problems unnecessarily. This virus is not that bad. Many people have already made full recovery.
',
- date: '09 March 2020 8:20pm',
- isoDateTime: '2020-03-09T20:20:34Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810472',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810472',
- numRecommends: 25,
- isHighlighted: false,
- responseTo: {
- displayName: 'Smolker',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809524',
- isoDateTime: '2020-03-09T19:27:29Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809524',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809524',
- },
- userProfile: {
- userId: '17989970',
- displayName: 'Omarvellous',
- webUrl: 'https://profile.theguardian.com/user/id/17989970',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/17989970',
- avatar: 'https://avatar.guim.co.uk/user/17989970',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/17989970',
- badge: [],
- },
- },
- {
- id: 138810475,
- body: " Everywhere we look, leaders are taking more strident measures than the UK to protect their people.
Come to America, where our bloviated shitgibbon in chief's lies grow ever more delusional pathetic by the day and the guy he put in charge of overseeing the US's fight against the virus thinks you can pray away gay.
",
- date: '09 March 2020 8:20pm',
- isoDateTime: '2020-03-09T20:20:41Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810475',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810475',
- numRecommends: 28,
- isHighlighted: false,
- responseTo: {
- displayName: 'Smolker',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809524',
- isoDateTime: '2020-03-09T19:27:29Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809524',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809524',
- },
- userProfile: {
- userId: '10936148',
- displayName: 'ObstreperousRabbit',
- webUrl: 'https://profile.theguardian.com/user/id/10936148',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10936148',
- avatar: 'https://avatar.guim.co.uk/user/10936148',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10936148',
- badge: [],
- },
- },
- {
- id: 138810521,
- body: "I think dwelling on it for as long as you need to to make a plan does do good. The only way you can face this is by looking at the risks you can mitigate (not those you can't) and working out a plan for dealing with them.
How can you protect your parents, what can you do for them, arrange for them? What are their thoughts about how to protect themselves? What matters, and what doesn't?
People should probably start to re-think their lives and responsibilities in an ordered way, and in the context of a post-Covid landscape.
For instance, if you miss your rent, mortgage, council tax, because you need to pay for food and utility bills, you will only be the same as millions of others. So focus on having enough money for bare essentials, because the banks and councils won't even have the staff to chase you and the millions of others. Not to say you won't pay your way in the end, but leave it til after the whole thing has died down - don't stress about it and force yourself into an unsafe work scenario, or put your parents at risk by keeping yourself on the hamster wheel.
It looks like we will end up having a break from capitalism, economics - everything we know. So focus on staying alive. Take your kids out of school when you feel the risk of them bringing something home is greater than the benefit of their education. Don't wait for the school to close - choose your moment. Do what feels right - nobody will blame you.
Fear comes from thinking that you have no control over the situation, so take control, and prepare to step outside the bounds of how we normally do things. Make your own plan.
",
- date: '09 March 2020 8:23pm',
- isoDateTime: '2020-03-09T20:23:17Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810521',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810521',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'Smolker',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809524',
- isoDateTime: '2020-03-09T19:27:29Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809524',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809524',
- },
- userProfile: {
- userId: '10340595',
- displayName: 'ValerieSelden',
- webUrl: 'https://profile.theguardian.com/user/id/10340595',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10340595',
- avatar: 'https://avatar.guim.co.uk/user/10340595',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10340595',
- badge: [],
- },
- },
- {
- id: 138810542,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 8:24pm',
- isoDateTime: '2020-03-09T20:24:00Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810542',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810542',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'ObstreperousRabbit',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810475',
- isoDateTime: '2020-03-09T20:20:41Z',
- date: '09 March 2020 8:20pm',
- commentId: '138810475',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810475',
- },
- userProfile: {
- userId: '10936148',
- displayName: 'ObstreperousRabbit',
- webUrl: 'https://profile.theguardian.com/user/id/10936148',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10936148',
- avatar: 'https://avatar.guim.co.uk/user/10936148',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/10936148',
- badge: [],
- },
- },
- {
- id: 138810741,
- body: 'Good advice thank you.
',
- date: '09 March 2020 8:35pm',
- isoDateTime: '2020-03-09T20:35:09Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810741',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810741',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'ValerieSelden',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810521',
- isoDateTime: '2020-03-09T20:23:17Z',
- date: '09 March 2020 8:23pm',
- commentId: '138810521',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810521',
- },
- userProfile: {
- userId: '101509753',
- displayName: 'PatMc1984',
- webUrl: 'https://profile.theguardian.com/user/id/101509753',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101509753',
- avatar: 'https://avatar.guim.co.uk/user/101509753',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101509753',
- badge: [],
- },
- },
- {
- id: 138810812,
- body: " Fear comes from thinking that you have no control over the situation
Thanks for your considered post.
I think the level of control we have is limited. We can take some measures but, in truth, it's a game of roulette.
In extremis I could lock down for 3-4 months and completely self-isolate. That makes me more fortunate then most, perhaps.
I'd likely have no job afterwards. Even then there would be no guarantee I'd avoid exposure and infection. Moreover, locking down for 3-4 months would do nothing to help my parents, or my disabled brother.
Looking out for (and after) each other is probably the best we can do, particularly since we can't rely on government to place people before capital interests. That's what lies behind government inaction.
",
- date: '09 March 2020 8:38pm',
- isoDateTime: '2020-03-09T20:38:55Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810812',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810812',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'ValerieSelden',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810521',
- isoDateTime: '2020-03-09T20:23:17Z',
- date: '09 March 2020 8:23pm',
- commentId: '138810521',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810521',
- },
- userProfile: {
- userId: '18080588',
- displayName: 'Smolker',
- webUrl: 'https://profile.theguardian.com/user/id/18080588',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18080588',
- avatar: 'https://avatar.guim.co.uk/user/18080588',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/18080588',
- badge: [],
- },
- },
- {
- id: 138811215,
- body: 'It is entirely rational to be afraid. Smolker has touched— with impeccable clarity — on several good reasons to be afraid. This level of articulacy, it does help people think straight, instead of feeling an inchoate dread every time we hear the word “virus” or hear a cough. It helps us think through the issues and think before we respond, instead of rushing outto buy a hundred rolls of bogpaper or Pay £25 for a bottle of alcohol gel that is less effective than a dod of Fairy Liquid and a bottle of water over the gutter in the supermarket car park.
Smolker identified fears that are in a sense irreducible and fears that we can take action, not to merely assuage, but to make ourselves as individuals and as a society safer.
The paltry, and in about a fifth of cases non-existent, statutory sick pay, for example: less than £100 a week, or zilch, for the nation’s commuter-conveyors, providers of food and shovellers of shit, in comparison with c£265 guaranteed in Ireland.
It makes me think, hang on, what was that Johnson was saying about fundamental economic robustness? Why, then, is he doing nothing to enable people in key virus-opportunity roles to refrain from being super-spreaders?
These are things we can act upon to make less dangerous, not just less scary.
Smolker, and people like Smolker play an important role in identifying and articulating elephants in rooms that our leaders are either blind to (which, given that our Genius poshboy wanktankers conflate low-paid, low-skilled and low-strategic-value workers, wouldn’t surprise me) or which they don’t want us to think about. Being the party of shock doctrine as they are.
',
- date: '09 March 2020 9:00pm',
- isoDateTime: '2020-03-09T21:00:30Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811215',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811215',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'Delius',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809697',
- isoDateTime: '2020-03-09T19:37:04Z',
- date: '09 March 2020 7:37pm',
- commentId: '138809697',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809697',
- },
- userProfile: {
- userId: '101956088',
- displayName: 'coultetscandi',
- webUrl: 'https://profile.theguardian.com/user/id/101956088',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101956088',
- avatar: 'https://avatar.guim.co.uk/user/101956088',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101956088',
- badge: [],
- },
- },
- {
- id: 138811323,
- body: "Many have, but a huge number have not recovered (yet). I find this worrying. If you look at today's global figures there are currently 113,584 confirmed cases. Of those 62,496 have recovered. So not much more than half have recovered so far in an outbreak which has been going on since late last year. Of course hopefully most will recover, but the time taken and the medical support needed to do so in many cases is clearly significant
",
- date: '09 March 2020 9:06pm',
- isoDateTime: '2020-03-09T21:06:17Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811323',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811323',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'Omarvellous',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810472',
- isoDateTime: '2020-03-09T20:20:34Z',
- date: '09 March 2020 8:20pm',
- commentId: '138810472',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810472',
- },
- userProfile: {
- userId: '4332161',
- displayName: 'jessthecrip',
- webUrl: 'https://profile.theguardian.com/user/id/4332161',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4332161',
- avatar: 'https://avatar.guim.co.uk/user/4332161',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4332161',
- badge: [],
- },
- },
- {
- id: 138811436,
- body: "Please ignore all those telling you not to panic. I see no panic in your post. You are simply stating the current concerning issues correctly. I am in the age group supposed to react in the worst way to this. I am taking every precaution. There is nothing else I can do ie staying away from crowds, wearing gloves on public transport, frequent hand washing etc.. If I was younger and not retired I would consider working from home if I could and would be extra cautious on my commute if not. A key point you make is that our Government is amateurish and incompetent and many of us already know that. So we have to look after ourselves. But some people seem to need to be terrified and in panic mode before they are even prepared to remember to wash their hands. So if that's what they need I'm happy to supply it (We're all gonna die!!) I don't need that I see the logic and act on it but hey! Best of luck to you and your parents. You'll probably all be fine because you are taking it seriously and following advice.
",
- date: '09 March 2020 9:12pm',
- isoDateTime: '2020-03-09T21:12:55Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811436',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811436',
- numRecommends: 6,
- isHighlighted: false,
- responseTo: {
- displayName: 'Smolker',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809524',
- isoDateTime: '2020-03-09T19:27:29Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809524',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809524',
- },
- userProfile: {
- userId: '4085816',
- displayName: 'geraldinemitchell',
- webUrl: 'https://profile.theguardian.com/user/id/4085816',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4085816',
- avatar: 'https://avatar.guim.co.uk/user/4085816',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4085816',
- badge: [],
- },
- },
- {
- id: 138811585,
- body: 'People saying, against all evidence, that this virus is "not that bad" are far, far more dangerous than anyone supposedly causing panic by saying they\'re worried about it.
Our response to the virus, which will determine whether the health service is able to cope or not and hence the rates of death and life-changing injury, is to a large extent dependent on people following government advice on self-isolation, avoiding social contact, hygiene and other things.
If people think "oh, it\'s not that bad", they won\'t do the things the health service needs them to do and the epidemic will be worse than it would otherwise be.
Please think about that before the next time you post about this virus.
',
- date: '09 March 2020 9:19pm',
- isoDateTime: '2020-03-09T21:19:13Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811585',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811585',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'Omarvellous',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810472',
- isoDateTime: '2020-03-09T20:20:34Z',
- date: '09 March 2020 8:20pm',
- commentId: '138810472',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810472',
- },
- userProfile: {
- userId: '12611808',
- displayName: 'Shortordercook',
- webUrl: 'https://profile.theguardian.com/user/id/12611808',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12611808',
- avatar: 'https://avatar.guim.co.uk/user/12611808',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12611808',
- badge: [],
- },
- },
- {
- id: 138811762,
- body: "I'm sorry for your situation and I feel your fear, it sounds awful; but you should seek help for the anxiety because it certainly won't help your situation.
I've been chronic anxiety sufferer for much of my life, though thankfully on an upward curve these days. For other health reasons I'm in high risk group, however from personal history I know worrying about covid19 is probably the worst thing I can do.
The one thing I can affirm is that anxiety prevents us from making good, reasoned decisions, and obsessing about things that might get done in an ideal world but which we both know won't happen here, is really not going to help. Go and to talk to someone, and get your real fears whatever they are (having to care for your parent?) off your chest. And best of luck!
",
- date: '09 March 2020 9:27pm',
- isoDateTime: '2020-03-09T21:27:20Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811762',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811762',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'Smolker',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809524',
- isoDateTime: '2020-03-09T19:27:29Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809524',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809524',
- },
- userProfile: {
- userId: '11130177',
- displayName: 'michaelmichael',
- webUrl: 'https://profile.theguardian.com/user/id/11130177',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11130177',
- avatar: 'https://avatar.guim.co.uk/user/11130177',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/11130177',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 14,
- staffCommenterCount: 0,
- editorsPickCount: 1,
- blockedCount: 1,
- responseCount: 13,
+ },
+ {
+ id: 50789974,
+ body: 'Test from the API -1474918202
',
+ date: '21 April 2015 11:36am',
+ isoDateTime: '2015-04-21T10:36:59Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50789974',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50789974',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809534,
- body: 'It makes a change to see so much impotent rage on here.
',
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:50Z',
+ id: 50793031,
+ body: 'Test from the API -932163313
',
+ date: '21 April 2015 12:26pm',
+ isoDateTime: '2015-04-21T11:26:42Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809534',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809534',
- numRecommends: 13,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/50793031',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/50793031',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '102219459',
- displayName: 'Antiindoctrntn',
- webUrl: 'https://profile.theguardian.com/user/id/102219459',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/102219459',
- avatar: 'https://avatar.guim.co.uk/user/102219459',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/102219459',
- badge: [],
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809537,
- body: 'Is there any way of bringing those politicians to justice? Surely what they did must fit the profile of some crime.
',
- date: '09 March 2020 7:27pm',
- isoDateTime: '2020-03-09T19:27:58Z',
+ id: 51153735,
+ body: 'What glorious plumage!
',
+ date: '28 April 2015 9:48am',
+ isoDateTime: '2015-04-28T08:48:07Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809537',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809537',
- numRecommends: 18,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/51153735',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/51153735',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '1353727',
- displayName: 'MichaelBulley',
- webUrl: 'https://profile.theguardian.com/user/id/1353727',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1353727',
- avatar: 'https://avatar.guim.co.uk/user/1353727',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/1353727',
+ userId: '14802426',
+ displayName: 'User941136',
+ webUrl: 'https://profile.theguardian.com/user/id/14802426',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14802426',
+ avatar: 'https://avatar.guim.co.uk/user/14802426',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14802426',
badge: [],
},
- responses: [
- {
- id: 138809705,
- body: "Yes, arrest all politicians that you don't agree with.
You are the last bastion of freedom.... to agree with The Guardian or else.
",
- date: '09 March 2020 7:37pm',
- isoDateTime: '2020-03-09T19:37:43Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809705',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809705',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'MichaelBulley',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809537',
- isoDateTime: '2020-03-09T19:27:58Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809537',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809537',
- },
- userProfile: {
- userId: '16022312',
- displayName: 'Aloonatron',
- webUrl: 'https://profile.theguardian.com/user/id/16022312',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16022312',
- avatar: 'https://avatar.guim.co.uk/user/16022312',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16022312',
- badge: [],
- },
- },
- {
- id: 138809820,
- body: 'There should be a way of holding them to account when they fuck up. Or they will continue to spaff money up the wall on invisible bridges, probation fuck ups, and pizza ferries.
',
- date: '09 March 2020 7:44pm',
- isoDateTime: '2020-03-09T19:44:08Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809820',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809820',
- numRecommends: 18,
- isHighlighted: false,
- responseTo: {
- displayName: 'Aloonatron',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809705',
- isoDateTime: '2020-03-09T19:37:43Z',
- date: '09 March 2020 7:37pm',
- commentId: '138809705',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809705',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138809904,
- body: "It's not about agreement, it's if a decision has real consequences. I disagree completely with Vince Cable selling off Royal Mail, but his punishment should be the voters rejecting his party.
However why should Grayling get away with pissing away loads of money? Or Truss allowing breaches of the law to sell more arms to the Saudis? And no doubt there will be similar examples during Labour's run in power.
",
- date: '09 March 2020 7:48pm',
- isoDateTime: '2020-03-09T19:48:54Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809904',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809904',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'Aloonatron',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809705',
- isoDateTime: '2020-03-09T19:37:43Z',
- date: '09 March 2020 7:37pm',
- commentId: '138809705',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809705',
- },
- userProfile: {
- userId: '101851698',
- displayName: 'ShipShipShipShip',
- webUrl: 'https://profile.theguardian.com/user/id/101851698',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/101851698',
- avatar: 'https://avatar.guim.co.uk/user/101851698',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/101851698',
- badge: [],
- },
- },
- {
- id: 138810114,
- body: 'Some political actions can be considered from a legal standpoint. There have been politicians who have been judged guilty of crimes against their own citizens and against humanity. I think you can argue that the avoidable policy of recent Conservative governments caused the deaths of people who, but for those policies, would have lived much longer. That seems to me to getting into legal waters. Your approach would lead to saying that Nazism, for example, was just a political choice that you might agree with or disagree with, with no moral aspect to it.
',
- date: '09 March 2020 8:01pm',
- isoDateTime: '2020-03-09T20:01:14Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810114',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810114',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'Aloonatron',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809705',
- isoDateTime: '2020-03-09T19:37:43Z',
- date: '09 March 2020 7:37pm',
- commentId: '138809705',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809705',
- },
- userProfile: {
- userId: '1353727',
- displayName: 'MichaelBulley',
- webUrl: 'https://profile.theguardian.com/user/id/1353727',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1353727',
- avatar: 'https://avatar.guim.co.uk/user/1353727',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/1353727',
- badge: [],
- },
- },
- {
- id: 138810138,
- body: 'You can vote them out.
',
- date: '09 March 2020 8:02pm',
- isoDateTime: '2020-03-09T20:02:49Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810138',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810138',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'MichaelBulley',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809537',
- isoDateTime: '2020-03-09T19:27:58Z',
- date: '09 March 2020 7:27pm',
- commentId: '138809537',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809537',
- },
- userProfile: {
- userId: '4085816',
- displayName: 'geraldinemitchell',
- webUrl: 'https://profile.theguardian.com/user/id/4085816',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4085816',
- avatar: 'https://avatar.guim.co.uk/user/4085816',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4085816',
- badge: [],
- },
- },
- {
- id: 138811039,
- body: 'I think the point is that, once you have voted them in, they have a responsibility to act in the interests of the nation. No one voted for the policies that Toynbee is criticising in her article. Sadly, once in, a government in Britain is pretty much free to do whatever it likes.
',
- date: '09 March 2020 8:50pm',
- isoDateTime: '2020-03-09T20:50:57Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811039',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811039',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'geraldinemitchell',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810138',
- isoDateTime: '2020-03-09T20:02:49Z',
- date: '09 March 2020 8:02pm',
- commentId: '138810138',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810138',
- },
- userProfile: {
- userId: '1353727',
- displayName: 'MichaelBulley',
- webUrl: 'https://profile.theguardian.com/user/id/1353727',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1353727',
- avatar: 'https://avatar.guim.co.uk/user/1353727',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/1353727',
- badge: [],
- },
- },
- {
- id: 138811173,
- body: "But they have voted in one who is well documented as not 'doing' responsibility in any area of his life. Their personal psychological protection system against their stupidity , with which they must be familiar, is to cry 'Project Fear' and 'Fake News' and finally , pathetically ' Why didn't anyone tell us?'
",
- date: '09 March 2020 8:58pm',
- isoDateTime: '2020-03-09T20:58:36Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811173',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811173',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'MichaelBulley',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138811039',
- isoDateTime: '2020-03-09T20:50:57Z',
- date: '09 March 2020 8:50pm',
- commentId: '138811039',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138811039',
- },
- userProfile: {
- userId: '4085816',
- displayName: 'geraldinemitchell',
- webUrl: 'https://profile.theguardian.com/user/id/4085816',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4085816',
- avatar: 'https://avatar.guim.co.uk/user/4085816',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4085816',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 8,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 7,
- },
},
{
- id: 138809587,
- body: ' Prof John Appleby, chief economist at the Nuffield Trust, asks: “A blank cheque, really? Does the Treasury ever?” He rehearses the financial tourniquet that has strangled the NHS: it’s had 1.5% a year, compared with an average 4% since 1948, in a decade when over-65s rose by 25%.
And the majority of over-65s think that Brexit is a great idea for the economy. LOL
',
- date: '09 March 2020 7:30pm',
- isoDateTime: '2020-03-09T19:30:54Z',
+ id: 51153843,
+ body: 'Indeed
',
+ date: '28 April 2015 9:49am',
+ isoDateTime: '2015-04-28T08:49:53Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809587',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809587',
- numRecommends: 20,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/51153843',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/51153843',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '16376046',
- displayName: 'Soufflet',
- webUrl: 'https://profile.theguardian.com/user/id/16376046',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16376046',
- avatar: 'https://avatar.guim.co.uk/user/16376046',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/16376046',
+ userId: '14802426',
+ displayName: 'User941136',
+ webUrl: 'https://profile.theguardian.com/user/id/14802426',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14802426',
+ avatar: 'https://avatar.guim.co.uk/user/14802426',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14802426',
badge: [],
},
- responses: [
- {
- id: 138811105,
- body: "Well, I'm not 65 yet and I never thought Brexit was good for the economy by any means, but I am gobsmacked at a government who doesn't appear to realise that people age. It isn't like they didn't see it coming. What a poor excuse for not funding the NHS properly.
",
- date: '09 March 2020 8:54pm',
- isoDateTime: '2020-03-09T20:54:53Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811105',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811105',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'Soufflet',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809587',
- isoDateTime: '2020-03-09T19:30:54Z',
- date: '09 March 2020 7:30pm',
- commentId: '138809587',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809587',
- },
- userProfile: {
- userId: '2850963',
- displayName: 'Bluejil',
- webUrl: 'https://profile.theguardian.com/user/id/2850963',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2850963',
- avatar: 'https://avatar.guim.co.uk/user/2850963',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2850963',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 2,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 1,
- },
},
{
- id: 138809592,
- body: '£350m p/w should fix it ... err ...
',
- date: '09 March 2020 7:31pm',
- isoDateTime: '2020-03-09T19:31:07Z',
+ id: 51177701,
+ body: 'Test
',
+ date: '28 April 2015 4:29pm',
+ isoDateTime: '2015-04-28T15:29:05Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809592',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809592',
- numRecommends: 14,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/51177701',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/51177701',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '4772503',
- displayName: 'dirtygumshield',
- webUrl: 'https://profile.theguardian.com/user/id/4772503',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4772503',
- avatar: 'https://avatar.guim.co.uk/user/4772503',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/4772503',
+ userId: '14802426',
+ displayName: 'User941136',
+ webUrl: 'https://profile.theguardian.com/user/id/14802426',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14802426',
+ avatar: 'https://avatar.guim.co.uk/user/14802426',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14802426',
badge: [],
},
- responses: [
- {
- id: 138809659,
- body: 'How many millions per week does the recently announced additional investment in the NHS amount to? Have you done the sums?
',
- date: '09 March 2020 7:35pm',
- isoDateTime: '2020-03-09T19:35:07Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809659',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809659',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'dirtygumshield',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809592',
- isoDateTime: '2020-03-09T19:31:07Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809592',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809592',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138810105,
- body: 'The Conservatives have committed to building 40 new hospitals in England by 2030. Only six of these – which will receive £2.7bn and should be ready by 2025 – have been identified so far.
LOL
',
- date: '09 March 2020 8:00pm',
- isoDateTime: '2020-03-09T20:00:51Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810105',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810105',
- numRecommends: 13,
- isHighlighted: false,
- responseTo: {
- displayName: 'Delius',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809659',
- isoDateTime: '2020-03-09T19:35:07Z',
- date: '09 March 2020 7:35pm',
- commentId: '138809659',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809659',
- },
- userProfile: {
- userId: '16376046',
- displayName: 'Soufflet',
- webUrl: 'https://profile.theguardian.com/user/id/16376046',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16376046',
- avatar: 'https://avatar.guim.co.uk/user/16376046',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16376046',
- badge: [],
- },
- },
- {
- id: 138810240,
- body: 'Morons are still blaming Labour.
',
- date: '09 March 2020 8:08pm',
- isoDateTime: '2020-03-09T20:08:38Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810240',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810240',
- numRecommends: 10,
- isHighlighted: false,
- responseTo: {
- displayName: 'dirtygumshield',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809592',
- isoDateTime: '2020-03-09T19:31:07Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809592',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809592',
- },
- userProfile: {
- userId: '15463361',
- displayName: 'Daniel Oneill',
- webUrl: 'https://profile.theguardian.com/user/id/15463361',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15463361',
- avatar: 'https://avatar.guim.co.uk/user/15463361',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15463361',
- badge: [],
- },
- },
- {
- id: 138810394,
- body: 'Not what I was talking about though is it?
',
- date: '09 March 2020 8:16pm',
- isoDateTime: '2020-03-09T20:16:24Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810394',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810394',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'Soufflet',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810105',
- isoDateTime: '2020-03-09T20:00:51Z',
- date: '09 March 2020 8:00pm',
- commentId: '138810105',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810105',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138811675,
- body: 'Perhaps your sums should extend to the years of deliberate under-funding of the NHS. The recent monies allocated are a drop in the ocean of need.
',
- date: '09 March 2020 9:23pm',
- isoDateTime: '2020-03-09T21:23:12Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811675',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811675',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'Delius',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138810394',
- isoDateTime: '2020-03-09T20:16:24Z',
- date: '09 March 2020 8:16pm',
- commentId: '138810394',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138810394',
- },
- userProfile: {
- userId: '15127769',
- displayName: 'JerryPymer',
- webUrl: 'https://profile.theguardian.com/user/id/15127769',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15127769',
- avatar: 'https://avatar.guim.co.uk/user/15127769',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15127769',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 6,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 5,
- },
},
{
- id: 138809603,
- body: "Given the calamitous list of historic upreparedness by a neglected and resource starved NHS waiting to fight the coronavirus threat - as gloriously and enthusiastically paraded here....it really does make you wonder why the Labour party thought it prudent to deliberately increase immigration from a 20,000 per year norm to over 300,000 and rising without any thought to the country's infrastructure, housing, social services, wage depression, society cohesion and NHS resources to manage such an influx? We are now at 500,000 and Polly thinks the problem with the NHS is money. Here's an idea....how about making the NHS a National Health Service and not an International Health Service which liberals everywhere think is desirable? Once you have re-organised the NHS to what a country can actually cope with you can write articles like this.
",
- date: '09 March 2020 7:31pm',
- isoDateTime: '2020-03-09T19:31:41Z',
+ id: 51177755,
+ body: 'Test Post
',
+ date: '28 April 2015 4:30pm',
+ isoDateTime: '2015-04-28T15:30:02Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809603',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809603',
- numRecommends: 30,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/51177755',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/51177755',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '14692190',
- displayName: 'LarryClackety',
- webUrl: 'https://profile.theguardian.com/user/id/14692190',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14692190',
- avatar: 'https://avatar.guim.co.uk/user/14692190',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14692190',
+ userId: '14802426',
+ displayName: 'User941136',
+ webUrl: 'https://profile.theguardian.com/user/id/14802426',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14802426',
+ avatar: 'https://avatar.guim.co.uk/user/14802426',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14802426',
badge: [],
},
- responses: [
- {
- id: 138809825,
- body: 'You have, of course, made a detailed study of both how much those immigrants benefit our economy compared to the benefits they extract and, too, how many of them work not only for the NHS but also in social care?
',
- date: '09 March 2020 7:44pm',
- isoDateTime: '2020-03-09T19:44:36Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809825',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809825',
- numRecommends: 32,
- isHighlighted: false,
- responseTo: {
- displayName: 'LarryClackety',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809603',
- isoDateTime: '2020-03-09T19:31:41Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809603',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809603',
- },
- userProfile: {
- userId: '13952083',
- displayName: 'fraser48',
- webUrl: 'https://profile.theguardian.com/user/id/13952083',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13952083',
- avatar: 'https://avatar.guim.co.uk/user/13952083',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/13952083',
- badge: [],
- },
- },
- {
- id: 138809836,
- body: 'The NHS is abused more by non-resident Brits than Johnny Foreigner
',
- date: '09 March 2020 7:45pm',
- isoDateTime: '2020-03-09T19:45:21Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809836',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809836',
- numRecommends: 16,
- isHighlighted: false,
- responseTo: {
- displayName: 'LarryClackety',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809603',
- isoDateTime: '2020-03-09T19:31:41Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809603',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809603',
- },
- userProfile: {
- userId: '12197200',
- displayName: 'justamentalpatient',
- webUrl: 'https://profile.theguardian.com/user/id/12197200',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12197200',
- avatar: 'https://avatar.guim.co.uk/user/12197200',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12197200',
- badge: [],
- },
- },
- {
- id: 138809853,
- body: "Without high levels of immigration our economy would collapse. Combination of ageing population and lack of state investment in training. And if you told the immigrants who are here they can't use the NHS, that increases societal issues tenfold. But it's easier not to think of that - or think at all. Just blame immigrants and a Labour party 10 years out of power for the state of the NHS, rather than the party you repeatedly vote into government.
",
- date: '09 March 2020 7:46pm',
- isoDateTime: '2020-03-09T19:46:09Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809853',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809853',
- numRecommends: 29,
- isHighlighted: false,
- responseTo: {
- displayName: 'LarryClackety',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809603',
- isoDateTime: '2020-03-09T19:31:41Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809603',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809603',
- },
- userProfile: {
- userId: '1330048',
- displayName: 'JekyllMoon',
- webUrl: 'https://profile.theguardian.com/user/id/1330048',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1330048',
- avatar: 'https://avatar.guim.co.uk/user/1330048',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/1330048',
- badge: [],
- },
- },
- {
- id: 138810155,
- body: ' Here\'s an idea....how about making the NHS a National Health Service and not an International Health Service which liberals everywhere think is desirable
I assume you know how the Immigrant Health Surcharge works? Immigrants from outside the EEA have to pay into the NHS as part of their visa application; it is in no way a free service for them.
',
- date: '09 March 2020 8:03pm',
- isoDateTime: '2020-03-09T20:03:49Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810155',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810155',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'LarryClackety',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809603',
- isoDateTime: '2020-03-09T19:31:41Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809603',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809603',
- },
- userProfile: {
- userId: '57038',
- displayName: 'AdamTut',
- webUrl: 'https://profile.theguardian.com/user/id/57038',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/57038',
- avatar: 'https://avatar.guim.co.uk/user/57038',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/57038',
- badge: [],
- },
- },
- {
- id: 138810221,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 8:07pm',
- isoDateTime: '2020-03-09T20:07:41Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810221',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810221',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'LarryClackety',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809603',
- isoDateTime: '2020-03-09T19:31:41Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809603',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809603',
- },
- userProfile: {
- userId: '15463361',
- displayName: 'Daniel Oneill',
- webUrl: 'https://profile.theguardian.com/user/id/15463361',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15463361',
- avatar: 'https://avatar.guim.co.uk/user/15463361',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15463361',
- badge: [],
- },
- },
- {
- id: 138810290,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 8:11pm',
- isoDateTime: '2020-03-09T20:11:06Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810290',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810290',
- numRecommends: 0,
- isHighlighted: false,
- responseTo: {
- displayName: 'LarryClackety',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809603',
- isoDateTime: '2020-03-09T19:31:41Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809603',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809603',
- },
- userProfile: {
- userId: '15739675',
- displayName: 'establishmentlies',
- webUrl: 'https://profile.theguardian.com/user/id/15739675',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15739675',
- avatar: 'https://avatar.guim.co.uk/user/15739675',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/15739675',
- badge: [],
- },
- },
- {
- id: 138810468,
- body: "i'm so sorry to sorry have to tell you this, there is no cure for your kind of stupid, regardless of how the NHS is doing.
",
- date: '09 March 2020 8:20pm',
- isoDateTime: '2020-03-09T20:20:28Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810468',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810468',
- numRecommends: 12,
- isHighlighted: false,
- responseTo: {
- displayName: 'LarryClackety',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809603',
- isoDateTime: '2020-03-09T19:31:41Z',
- date: '09 March 2020 7:31pm',
- commentId: '138809603',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809603',
- },
- userProfile: {
- userId: '3302412',
- displayName: 'grammyc',
- webUrl: 'https://profile.theguardian.com/user/id/3302412',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3302412',
- avatar: 'https://avatar.guim.co.uk/user/3302412',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3302412',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 8,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 2,
- responseCount: 7,
+ },
+ {
+ id: 51213229,
+ body: 'Test 6751
',
+ date: '29 April 2015 9:21am',
+ isoDateTime: '2015-04-29T08:21:42Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/51213229',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/51213229',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '14802426',
+ displayName: 'User941136',
+ webUrl: 'https://profile.theguardian.com/user/id/14802426',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14802426',
+ avatar: 'https://avatar.guim.co.uk/user/14802426',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14802426',
+ badge: [],
},
},
{
- id: 138809625,
- body: 'Polly Toynbee thank you for a rational article explaining clearly and precisely the situation within the NHS to cope with coronavirus. A stark contrast to John Snow on Channel 4 news going out now who seems to be in a state of hysterical excitement. Thank goodness that the people he is interviewing are, like yourself, rational, sensible and do understand what they are talking about.
',
- date: '09 March 2020 7:33pm',
- isoDateTime: '2020-03-09T19:33:22Z',
+ id: 51214557,
+ body: 'Test 8067
',
+ date: '29 April 2015 9:44am',
+ isoDateTime: '2015-04-29T08:44:15Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809625',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809625',
- numRecommends: 7,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/51214557',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/51214557',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '16502817',
- displayName: 'BritInEurope',
- webUrl: 'https://profile.theguardian.com/user/id/16502817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16502817',
- avatar: 'https://avatar.guim.co.uk/user/16502817',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/16502817',
+ userId: '10455474',
+ displayName: 'User174774',
+ webUrl: 'https://profile.theguardian.com/user/id/10455474',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10455474',
+ avatar: 'https://avatar.guim.co.uk/user/10455474',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/10455474',
badge: [],
},
- responses: [
- {
- id: 138809685,
- body: 'Snow is now comparing the outbreak with Embola!!!!! Snow would be well advised to focus on the facts.
',
- date: '09 March 2020 7:36pm',
- isoDateTime: '2020-03-09T19:36:18Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809685',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809685',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: 'BritInEurope',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809625',
- isoDateTime: '2020-03-09T19:33:22Z',
- date: '09 March 2020 7:33pm',
- commentId: '138809625',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809625',
- },
- userProfile: {
- userId: '16502817',
- displayName: 'BritInEurope',
- webUrl: 'https://profile.theguardian.com/user/id/16502817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16502817',
- avatar: 'https://avatar.guim.co.uk/user/16502817',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16502817',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 2,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 1,
- },
},
{
- id: 138809633,
- body: 'This virus will teach us the value of our public services. It will also brutally expose the idiocy of the free-market fundamentalists who have dominated thinking for so long. Good.
',
- date: '09 March 2020 7:33pm',
- isoDateTime: '2020-03-09T19:33:42Z',
+ id: 52013677,
+ body: 'Acknowledgement Test
',
+ date: '12 May 2015 10:39am',
+ isoDateTime: '2015-05-12T09:39:07Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809633',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809633',
- numRecommends: 20,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/52013677',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/52013677',
+ numRecommends: 1,
isHighlighted: false,
userProfile: {
- userId: '3265666',
- displayName: 'Skybluewater',
- webUrl: 'https://profile.theguardian.com/user/id/3265666',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3265666',
- avatar: 'https://avatar.guim.co.uk/user/3265666',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/3265666',
+ userId: '14802426',
+ displayName: 'User941136',
+ webUrl: 'https://profile.theguardian.com/user/id/14802426',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14802426',
+ avatar: 'https://avatar.guim.co.uk/user/14802426',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/14802426',
badge: [],
},
- responses: [
- {
- id: 138809850,
- body: 'Ironic then that the free-market fundamentalists\' B/Wankers were saved by State Aid in the form of Quantitative Easing - a monetary laxative.
',
- date: '09 March 2020 7:45pm',
- isoDateTime: '2020-03-09T19:45:56Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809850',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809850',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'Skybluewater',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809633',
- isoDateTime: '2020-03-09T19:33:42Z',
- date: '09 March 2020 7:33pm',
- commentId: '138809633',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809633',
- },
- userProfile: {
- userId: '14118384',
- displayName: 'Speak4Self',
- webUrl: 'https://profile.theguardian.com/user/id/14118384',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14118384',
- avatar: 'https://avatar.guim.co.uk/user/14118384',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/14118384',
- badge: [],
- },
- },
- {
- id: 138811079,
- body: 'Ironic indeed, because those same beneficiaries of state aid denounce it as socialism if applied to other sectors.
',
- date: '09 March 2020 8:53pm',
- isoDateTime: '2020-03-09T20:53:35Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811079',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811079',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'Speak4Self',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809850',
- isoDateTime: '2020-03-09T19:45:56Z',
- date: '09 March 2020 7:45pm',
- commentId: '138809850',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809850',
- },
- userProfile: {
- userId: '12298092',
- displayName: '_jhfta_',
- webUrl: 'https://profile.theguardian.com/user/id/12298092',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12298092',
- avatar: 'https://avatar.guim.co.uk/user/12298092',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12298092',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 3,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 2,
+ },
+ {
+ id: 52412694,
+ body: 'I love this bird
',
+ date: '19 May 2015 10:56am',
+ isoDateTime: '2015-05-19T09:56:02Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/52412694',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/52412694',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '1186733',
+ displayName: 'GideonGoldberg',
+ webUrl: 'https://profile.theguardian.com/user/id/1186733',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1186733',
+ avatar: 'https://avatar.guim.co.uk/user/1186733',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/1186733',
+ badge: [],
},
},
{
- id: 138809649,
+ id: 52412721,
body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:34pm',
- isoDateTime: '2020-03-09T19:34:36Z',
+ date: '19 May 2015 10:56am',
+ isoDateTime: '2015-05-19T09:56:47Z',
status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809649',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809649',
- numRecommends: 4,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/52412721',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/52412721',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '10127231',
- displayName: 'irreverentnurse',
- webUrl: 'https://profile.theguardian.com/user/id/10127231',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/10127231',
- avatar: 'https://avatar.guim.co.uk/user/10127231',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/10127231',
+ userId: '1186733',
+ displayName: 'GideonGoldberg',
+ webUrl: 'https://profile.theguardian.com/user/id/1186733',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1186733',
+ avatar: 'https://avatar.guim.co.uk/user/1186733',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/1186733',
badge: [],
},
},
{
- id: 138809672,
- body: 'NHS can barely cope with seasonal flu, this will not be pretty
',
- date: '09 March 2020 7:35pm',
- isoDateTime: '2020-03-09T19:35:36Z',
+ id: 52412791,
+ body: 'Test from the API 1236505540
',
+ date: '19 May 2015 10:58am',
+ isoDateTime: '2015-05-19T09:58:34Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809672',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809672',
- numRecommends: 21,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/52412791',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/52412791',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '1475398',
- displayName: 'sadbowler',
- webUrl: 'https://profile.theguardian.com/user/id/1475398',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1475398',
- avatar: 'https://avatar.guim.co.uk/user/1475398',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/1475398',
- badge: [],
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
- responses: [
- {
- id: 138811574,
- body: "Obviously attention is going to be focussed on Tory failures with the NHS over the coming weeks and it definitely should be. There is also an argument that no one is really prepared for a pandemic like this. You just cannot have thousands of extra workers and capacity on stand by for a once-in-a-century event.
What makes me nervous about this is when you run the numbers on it. Let's say only 1% of the population catches it. That's 600,000 people. Let's say 20% of them are critically ill and hospitalised. That's 120,000 new critically ill patients requiring beds. Where the hell is that going to come from? And that is only at a meagre 1% of the population getting infected.
",
- date: '09 March 2020 9:18pm',
- isoDateTime: '2020-03-09T21:18:55Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811574',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811574',
- numRecommends: 8,
- isHighlighted: false,
- responseTo: {
- displayName: 'sadbowler',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809672',
- isoDateTime: '2020-03-09T19:35:36Z',
- date: '09 March 2020 7:35pm',
- commentId: '138809672',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809672',
- },
- userProfile: {
- userId: '4579967',
- displayName: 'csjjl1',
- webUrl: 'https://profile.theguardian.com/user/id/4579967',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4579967',
- avatar: 'https://avatar.guim.co.uk/user/4579967',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/4579967',
- badge: [],
- },
- },
- {
- id: 138811794,
- body: "The real shortage is intensive care. Italy currently has 800 patients in intensive care with the virus. That's equal to the total number of normally free intensive care beds in the whole of the UK. From just 7000 cases.
Obviously more beds can be freed up, but basically it looks like the entire intensive care system and more is going to be completely taken up for several months.
Don't get run over or have a heart attack is my advice.
",
- date: '09 March 2020 9:28pm',
- isoDateTime: '2020-03-09T21:28:37Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811794',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811794',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'csjjl1',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138811574',
- isoDateTime: '2020-03-09T21:18:55Z',
- date: '09 March 2020 9:18pm',
- commentId: '138811574',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138811574',
- },
- userProfile: {
- userId: '12611808',
- displayName: 'Shortordercook',
- webUrl: 'https://profile.theguardian.com/user/id/12611808',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/12611808',
- avatar: 'https://avatar.guim.co.uk/user/12611808',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/12611808',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 3,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 0,
- responseCount: 2,
+ },
+ {
+ id: 53902608,
+ body: 'nice article
',
+ date: '16 June 2015 1:54pm',
+ isoDateTime: '2015-06-16T12:54:05Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/53902608',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/53902608',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809690,
- body: "Yup - Labour's PFI gutted the finances of the NHS like many a public body. We can but thank RLB for her efforts there.
You might have thought too our 250k a year GP's would invest a few quid in their businesses too. No chance of that - they are too busy giving up on this or that segment of care.
Much better to live somewhere with a proper health system somewhere in the EU.
",
- date: '09 March 2020 7:36pm',
- isoDateTime: '2020-03-09T19:36:39Z',
+ id: 53980488,
+ body: 'very interesting article
',
+ date: '17 June 2015 4:59pm',
+ isoDateTime: '2015-06-17T15:59:12Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809690',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809690',
- numRecommends: 6,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/53980488',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/53980488',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '14893509',
- displayName: 'Liberclown',
- webUrl: 'https://profile.theguardian.com/user/id/14893509',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/14893509',
- avatar: 'https://avatar.guim.co.uk/user/14893509',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/14893509',
- badge: [],
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
responses: [
{
- id: 138809800,
- body: "up - Labour's PFI gutted the finances of the NHS like many a public body
PFI was taken on board under Majors tory government , however you seem to have forgotten the last 10 years of tory under funding for the NHS ,the lack of nurses and doctors .
Yes read that again ............10 whole years of neglect
",
- date: '09 March 2020 7:43pm',
- isoDateTime: '2020-03-09T19:43:09Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809800',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809800',
- numRecommends: 15,
- isHighlighted: false,
- responseTo: {
- displayName: 'Liberclown',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809690',
- isoDateTime: '2020-03-09T19:36:39Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809690',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809690',
- },
- userProfile: {
- userId: '3869480',
- displayName: 'jazzdrum',
- webUrl: 'https://profile.theguardian.com/user/id/3869480',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3869480',
- avatar: 'https://avatar.guim.co.uk/user/3869480',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3869480',
- badge: [],
- },
- },
- {
- id: 138809807,
- body: "You might have thought our 500K a year business folk and 500M a year businesses would pay their fair share of tax to help shoulder the burden...but no, it's all Attlee's fault as per.
",
- date: '09 March 2020 7:43pm',
- isoDateTime: '2020-03-09T19:43:33Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809807',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809807',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'Liberclown',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809690',
- isoDateTime: '2020-03-09T19:36:39Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809690',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809690',
- },
- userProfile: {
- userId: '16332843',
- displayName: 'dougmeyberry',
- webUrl: 'https://profile.theguardian.com/user/id/16332843',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16332843',
- avatar: 'https://avatar.guim.co.uk/user/16332843',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16332843',
- badge: [],
- },
- },
- {
- id: 138809817,
- body: ' somewhere with a proper health system somewhere in the EU.
Guardian: French medics warn health service is on brink of collapse Guardian: Romanian hospitals in crisis as emigration takes its toll ',
- date: '09 March 2020 7:44pm',
- isoDateTime: '2020-03-09T19:44:05Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809817',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809817',
- numRecommends: 9,
- isHighlighted: false,
- responseTo: {
- displayName: 'Liberclown',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809690',
- isoDateTime: '2020-03-09T19:36:39Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809690',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809690',
- },
- userProfile: {
- userId: '3596416',
- displayName: '1nn1t',
- webUrl: 'https://profile.theguardian.com/user/id/3596416',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3596416',
- avatar: 'https://avatar.guim.co.uk/user/3596416',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3596416',
- badge: [],
- },
- },
- {
- id: 138810033,
- body: " Yup - Labour's PFI gutted the finances of the NHS like many a public body
PFI payments represent 2% of the annual NHS budget, if that's what you mean by gutted.
",
- date: '09 March 2020 7:56pm',
- isoDateTime: '2020-03-09T19:56:56Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810033',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810033',
- numRecommends: 7,
- isHighlighted: false,
- responseTo: {
- displayName: 'Liberclown',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809690',
- isoDateTime: '2020-03-09T19:36:39Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809690',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809690',
- },
- userProfile: {
- userId: '16376046',
- displayName: 'Soufflet',
- webUrl: 'https://profile.theguardian.com/user/id/16376046',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16376046',
- avatar: 'https://avatar.guim.co.uk/user/16376046',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/16376046',
- badge: [],
- },
- },
- {
- id: 138810048,
- body: 'If you know of “500K a year business folk” who’ve been skipping their taxes (actually up rather a lot since the Tories came in) then please do your civic duty and report them to HMRC.
',
- date: '09 March 2020 7:57pm',
- isoDateTime: '2020-03-09T19:57:32Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810048',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810048',
- numRecommends: 2,
- isHighlighted: false,
- responseTo: {
- displayName: 'dougmeyberry',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809807',
- isoDateTime: '2020-03-09T19:43:33Z',
- date: '09 March 2020 7:43pm',
- commentId: '138809807',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809807',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138810057,
- body: 'Has anyone ever suggested Romania has a “proper health service”?
',
- date: '09 March 2020 7:58pm',
- isoDateTime: '2020-03-09T19:58:14Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810057',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810057',
- numRecommends: 5,
- isHighlighted: false,
- responseTo: {
- displayName: '1nn1t',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809817',
- isoDateTime: '2020-03-09T19:44:05Z',
- date: '09 March 2020 7:44pm',
- commentId: '138809817',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809817',
- },
- userProfile: {
- userId: '2611744',
- displayName: 'Delius',
- webUrl: 'https://profile.theguardian.com/user/id/2611744',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2611744',
- avatar: 'https://avatar.guim.co.uk/user/2611744',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2611744',
- badge: [],
- },
- },
- {
- id: 138810855,
- body: "GP's don't get £250k a year.
NAH figures show the minimum salary is £60,000 or so up to an average £113,000 a year.
Frankly, I doubt if anyone would complain if GP 's did get £250,000 a year, if they were able to do their jobs without interferenc e.
",
- date: '09 March 2020 8:41pm',
- isoDateTime: '2020-03-09T20:41:48Z',
- status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138810855',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138810855',
- numRecommends: 3,
- isHighlighted: false,
- responseTo: {
- displayName: 'Liberclown',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809690',
- isoDateTime: '2020-03-09T19:36:39Z',
- date: '09 March 2020 7:36pm',
- commentId: '138809690',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809690',
- },
- userProfile: {
- userId: '2596777',
- displayName: 'thewhofan',
- webUrl: 'https://profile.theguardian.com/user/id/2596777',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2596777',
- avatar: 'https://avatar.guim.co.uk/user/2596777',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2596777',
- badge: [],
- },
- },
- {
- id: 138811205,
- body: "PFI might have been devised by Major's government, but Blair and Brown's 3 governments set up over 700 PFI deals, most of which are in the NHS.
One notable example was the trust that included my constituency where two hospitals with A & E's were closed in order to fund the PFI hospital built under Labour, whose own A & E was designed to serve a city and ended up serving a county.
Still, we pointed out to Labour what we thought of their actions and booted the incumbent Labour MP out for two terms and elected a retired Doctor who tried to get some services restored.
Sadly, he coukdn't, and we ended up with the odious Mark Garnier as NO who'd done nothing to help.
",
- date: '09 March 2020 9:00pm',
- isoDateTime: '2020-03-09T21:00:02Z',
+ id: 53980521,
+ body: 'although that was just for testing commenting
',
+ date: '17 June 2015 4:59pm',
+ isoDateTime: '2015-06-17T15:59:53Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138811205',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138811205',
- numRecommends: 1,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/53980521',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/53980521',
+ numRecommends: 0,
isHighlighted: false,
responseTo: {
- displayName: 'jazzdrum',
+ displayName: 'John Duffell',
commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809800',
- isoDateTime: '2020-03-09T19:43:09Z',
- date: '09 March 2020 7:43pm',
- commentId: '138809800',
+ 'https://discussion.guardianapis.com/discussion-api/comment/53980488',
+ isoDateTime: '2015-06-17T15:59:12Z',
+ date: '17 June 2015 4:59pm',
+ commentId: '53980488',
commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809800',
+ 'https://discussion.theguardian.com/comment-permalink/53980488',
},
userProfile: {
- userId: '2596777',
- displayName: 'thewhofan',
- webUrl: 'https://profile.theguardian.com/user/id/2596777',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2596777',
- avatar: 'https://avatar.guim.co.uk/user/2596777',
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/2596777',
- badge: [],
+ 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
],
metaData: {
- commentCount: 9,
- staffCommenterCount: 0,
+ commentCount: 2,
+ staffCommenterCount: 1,
editorsPickCount: 0,
blockedCount: 0,
- responseCount: 8,
+ responseCount: 1,
},
},
{
- id: 138809696,
+ id: 53984125,
body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:37pm',
- isoDateTime: '2020-03-09T19:37:00Z',
+ date: '17 June 2015 6:08pm',
+ isoDateTime: '2015-06-17T17:08:32Z',
status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809696',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809696',
- numRecommends: 2,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/53984125',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/53984125',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '100078210',
- displayName: 'glasshalffull2',
- webUrl: 'https://profile.theguardian.com/user/id/100078210',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/100078210',
- avatar: 'https://avatar.guim.co.uk/user/100078210',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/100078210',
- badge: [],
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
- responses: [
- {
- id: 138809754,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:40pm',
- isoDateTime: '2020-03-09T19:40:13Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809754',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809754',
- numRecommends: 4,
- isHighlighted: false,
- responseTo: {
- displayName: 'glasshalffull2',
- commentApiUrl:
- 'https://discussion.guardianapis.com/discussion-api/comment/138809696',
- isoDateTime: '2020-03-09T19:37:00Z',
- date: '09 March 2020 7:37pm',
- commentId: '138809696',
- commentWebUrl:
- 'https://discussion.theguardian.com/comment-permalink/138809696',
- },
- userProfile: {
- userId: '3869480',
- displayName: 'jazzdrum',
- webUrl: 'https://profile.theguardian.com/user/id/3869480',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3869480',
- avatar: 'https://avatar.guim.co.uk/user/3869480',
- secureAvatarUrl:
- 'https://avatar.guim.co.uk/user/3869480',
- badge: [],
- },
- },
- ],
- metaData: {
- commentCount: 2,
- staffCommenterCount: 0,
- editorsPickCount: 0,
- blockedCount: 2,
- responseCount: 1,
+ },
+ {
+ id: 53984175,
+ body: "It's nice to comment on an article again
",
+ date: '17 June 2015 6:09pm',
+ isoDateTime: '2015-06-17T17:09:51Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/53984175',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/53984175',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809699,
- body: 'Unless they can create ICU beds out of thin air when this gets in full swing then anyone considered ready for scrap heap is screwed im afraid. If Italy - a country with more ICU beds per capita in the EU - is on the verge of a crisis we are well and truly fecked. You’re safest best is working from home and hoping for the best.
',
- date: '09 March 2020 7:37pm',
- isoDateTime: '2020-03-09T19:37:11Z',
+ id: 54096779,
+ body: 'interesting article
',
+ date: '19 June 2015 2:07pm',
+ isoDateTime: '2015-06-19T13:07:13Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809699',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809699',
- numRecommends: 9,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54096779',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54096779',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '15463361',
- displayName: 'Daniel Oneill',
- webUrl: 'https://profile.theguardian.com/user/id/15463361',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/15463361',
- avatar: 'https://avatar.guim.co.uk/user/15463361',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/15463361',
- badge: [],
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809709,
- body: 'In honesty and fairness you cannot design and support an NHS appropriately equipped to deal with what may be coming down the line. But the fact is it is currently NOT adequately supported or equipped to deal with the normal demands made upon it. Our heroes are likely to "fall in the battle" when it commences. The intensity of exposure may well put many in self isolation.. at best. A HUGE responsibility lies with the "worried"public to stay well away from medics and their workplaces. The virally very sick, the accident victims, the heart attack and stroke victims etc desperately need as many of our medics and nurses to keep being able to turn up for work.
',
- date: '09 March 2020 7:37pm',
- isoDateTime: '2020-03-09T19:37:59Z',
+ id: 54096834,
+ body: 'this article is quite good
',
+ date: '19 June 2015 2:08pm',
+ isoDateTime: '2015-06-19T13:08:02Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809709',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809709',
- numRecommends: 6,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54096834',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54096834',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '16408524',
- displayName: 'GayeMurray',
- webUrl: 'https://profile.theguardian.com/user/id/16408524',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/16408524',
- avatar: 'https://avatar.guim.co.uk/user/16408524',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/16408524',
- badge: [],
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809729,
- body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
- date: '09 March 2020 7:38pm',
- isoDateTime: '2020-03-09T19:38:54Z',
- status: 'blocked',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809729',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809729',
- numRecommends: 2,
+ id: 54297937,
+ body: 'nice article
',
+ date: '23 June 2015 12:48pm',
+ isoDateTime: '2015-06-23T11:48:17Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54297937',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54297937',
+ numRecommends: 1,
isHighlighted: false,
userProfile: {
- userId: '11920192',
- displayName: 'billcody',
- webUrl: 'https://profile.theguardian.com/user/id/11920192',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/11920192',
- avatar: 'https://avatar.guim.co.uk/user/11920192',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/11920192',
- badge: [],
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
{
- id: 138809733,
- body: "Again, a lot of war vocabulary. Shouldn't be the case should it
",
- date: '09 March 2020 7:39pm',
- isoDateTime: '2020-03-09T19:39:03Z',
+ id: 54304818,
+ body: 'Test from the API -1673717805
',
+ date: '23 June 2015 2:49pm',
+ isoDateTime: '2015-06-23T13:49:30Z',
status: 'visible',
- webUrl: 'https://discussion.theguardian.com/comment-permalink/138809733',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/138809733',
- numRecommends: 9,
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54304818',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54304818',
+ numRecommends: 0,
isHighlighted: false,
userProfile: {
- userId: '18538747',
- displayName: 'IfItsMagic',
- webUrl: 'https://profile.theguardian.com/user/id/18538747',
- apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/18538747',
- avatar: 'https://avatar.guim.co.uk/user/18538747',
- secureAvatarUrl: 'https://avatar.guim.co.uk/user/18538747',
- badge: [],
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 54305016,
+ body: 'this article is cool
',
+ date: '23 June 2015 2:53pm',
+ isoDateTime: '2015-06-23T13:53:29Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54305016',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54305016',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 54305061,
+ body: "I'd like to make a comment here
",
+ date: '23 June 2015 2:54pm',
+ isoDateTime: '2015-06-23T13:54:22Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54305061',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54305061',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 54305123,
+ body: 'lovely stuff
',
+ date: '23 June 2015 2:55pm',
+ isoDateTime: '2015-06-23T13:55:32Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54305123',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54305123',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 54305139,
+ body: 'testing dicussion
',
+ date: '23 June 2015 2:55pm',
+ isoDateTime: '2015-06-23T13:55:46Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54305139',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54305139',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 54305287,
+ body: 'testing again
',
+ date: '23 June 2015 2:58pm',
+ isoDateTime: '2015-06-23T13:58:51Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54305287',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54305287',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '13552794',
+ displayName: 'User780375',
+ webUrl: 'https://profile.theguardian.com/user/id/13552794',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/13552794',
+ avatar: 'https://avatar.guim.co.uk/user/13552794',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/13552794',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 54351807,
+ body: 'Test from the API 1634173951
',
+ date: '24 June 2015 10:31am',
+ isoDateTime: '2015-06-24T09:31:02Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/54351807',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/54351807',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4339939',
+ displayName: 'GideonGoldberg1',
+ webUrl: 'https://profile.theguardian.com/user/id/4339939',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4339939',
+ avatar: 'https://avatar.guim.co.uk/user/4339939',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4339939',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
},
},
],
diff --git a/dotcom-rendering/fixtures/manual/discussionWithNoComments.ts b/dotcom-rendering/fixtures/manual/discussionWithNoComments.ts
new file mode 100644
index 00000000000..58f7716b286
--- /dev/null
+++ b/dotcom-rendering/fixtures/manual/discussionWithNoComments.ts
@@ -0,0 +1,19 @@
+export const discussionWithNoComments = {
+ status: 'ok',
+ page: 1,
+ pages: 0,
+ pageSize: 100,
+ orderBy: 'oldest',
+ discussion: {
+ key: '/p/39f5x',
+ webUrl: 'https://www.theguardian.com/science/grrlscientist/2012/aug/07/3',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/discussion//p/39f5x',
+ commentCount: 0,
+ topLevelCommentCount: 0,
+ isClosedForComments: false,
+ isClosedForRecommendation: false,
+ isThreaded: true,
+ title: 'Mystery bird: black-and-red broadbill, Cymbirhynchus macrorhynchos story',
+ comments: [],
+ },
+};
diff --git a/dotcom-rendering/fixtures/manual/discussionWithTwoComments.ts b/dotcom-rendering/fixtures/manual/discussionWithTwoComments.ts
new file mode 100644
index 00000000000..c5ce0274883
--- /dev/null
+++ b/dotcom-rendering/fixtures/manual/discussionWithTwoComments.ts
@@ -0,0 +1,64 @@
+export const discussionWithTwoComments = {
+ status: 'ok',
+ page: 1,
+ pages: 0,
+ pageSize: 100,
+ orderBy: 'oldest',
+ discussion: {
+ key: '/p/39f5x',
+ webUrl: 'https://www.theguardian.com/science/grrlscientist/2012/aug/07/3',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/discussion//p/39f5x',
+ commentCount: 0,
+ topLevelCommentCount: 0,
+ isClosedForComments: false,
+ isClosedForRecommendation: false,
+ isThreaded: true,
+ title: 'Mystery bird: black-and-red broadbill, Cymbirhynchus macrorhynchos story',
+ comments: [
+ {
+ id: 37772513,
+ body: 'Lovely chickens! https://www.supersupersuperlongdomainnameImeanitneverstopsatallevereveritmakesyouwonderiftheremightbealimittothesethings.com
',
+ date: '04 July 2014 1:57pm',
+ isoDateTime: '2014-07-04T12:57:48Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/37772513',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/37772513',
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2310959',
+ displayName: 'jamesgorrie',
+ webUrl: 'https://profile.theguardian.com/user/id/2310959',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2310959',
+ avatar: 'https://avatar.guim.co.uk/user/2310959',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2310959',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 42979860,
+ body: 'test
',
+ date: '30 October 2014 5:24pm',
+ isoDateTime: '2014-10-30T17:24:16Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/42979860',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/42979860',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '1186733',
+ displayName: 'GideonGoldberg',
+ webUrl: 'https://profile.theguardian.com/user/id/1186733',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1186733',
+ avatar: 'https://avatar.guim.co.uk/user/1186733',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/1186733',
+ badge: [],
+ },
+ },
+ ],
+ },
+};
diff --git a/dotcom-rendering/fixtures/manual/legacyDiscussionWithoutThreading.ts b/dotcom-rendering/fixtures/manual/legacyDiscussionWithoutThreading.ts
new file mode 100644
index 00000000000..6d229ab39b0
--- /dev/null
+++ b/dotcom-rendering/fixtures/manual/legacyDiscussionWithoutThreading.ts
@@ -0,0 +1,969 @@
+export const legacyDiscussionWithoutThreading = {
+ status: 'ok',
+ page: 1,
+ pages: 1,
+ pageSize: 100,
+ orderBy: 'oldest',
+ discussion: {
+ key: '/p/32255',
+ webUrl: 'https://www.theguardian.com/environment/2011/sep/19/richard-benyon-ragwort',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/discussion//p/32255',
+ commentCount: 45,
+ topLevelCommentCount: 45,
+ isClosedForComments: true,
+ isClosedForRecommendation: false,
+ isThreaded: false,
+ title: "Richard Benyon's Facebook 'war on ragwort' sparks spat with ecologists",
+ comments: [
+ {
+ id: 12468508,
+ body: 'He is not being lobbied by a herbicide company is he?
',
+ date: '19 September 2011 1:01pm',
+ isoDateTime: '2011-09-19T12:01:11Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12468508',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12468508',
+ numResponses: 0,
+ numRecommends: 13,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2479941',
+ displayName: 'madmonty',
+ webUrl: 'https://profile.theguardian.com/user/id/2479941',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2479941',
+ avatar: 'https://avatar.guim.co.uk/user/2479941',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2479941',
+ badge: [],
+ },
+ },
+ {
+ id: 12468646,
+ body: 'The very thought!
',
+ date: '19 September 2011 1:08pm',
+ isoDateTime: '2011-09-19T12:08:12Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12468646',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12468646',
+ numResponses: 0,
+ numRecommends: 5,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2870517',
+ displayName: 'GSC82',
+ webUrl: 'https://profile.theguardian.com/user/id/2870517',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2870517',
+ avatar: 'https://avatar.guim.co.uk/user/2870517',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2870517',
+ badge: [],
+ },
+ },
+ {
+ id: 12469052,
+ body: "The Minister for huntin' and shootin' strikes again...
On an aside though, I am also interested to see how often the 'folk knowledge' of those who work on the land (or in the city or anywhere else) is so often wrong...
",
+ date: '19 September 2011 1:29pm',
+ isoDateTime: '2011-09-19T12:29:05Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12469052',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12469052',
+ numResponses: 0,
+ numRecommends: 12,
+ isHighlighted: false,
+ userProfile: {
+ userId: '794075',
+ displayName: 'Alasdairca',
+ webUrl: 'https://profile.theguardian.com/user/id/794075',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/794075',
+ avatar: 'https://avatar.guim.co.uk/user/794075',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/794075',
+ badge: [],
+ },
+ },
+ {
+ id: 12469251,
+ body: "I am also interested to see how often the 'folk knowledge' of those who work on the land (or in the city or anywhere else) is so often wrong... Indeed. http://www.ragwortfacts.com/ragwort-myths.html
",
+ date: '19 September 2011 1:39pm',
+ isoDateTime: '2011-09-19T12:39:22Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12469251',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12469251',
+ numResponses: 0,
+ numRecommends: 2,
+ isHighlighted: false,
+ userProfile: {
+ userId: '3111076',
+ displayName: 'philstyle',
+ webUrl: 'https://profile.theguardian.com/user/id/3111076',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3111076',
+ avatar: 'https://avatar.guim.co.uk/user/3111076',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3111076',
+ badge: [],
+ },
+ },
+ {
+ id: 12469484,
+ body: "Newbury MP Benyon, whose family's estates earn around £200,000 a year in EU farm subsidies...
Not earn. Are paid.
",
+ date: '19 September 2011 1:49pm',
+ isoDateTime: '2011-09-19T12:49:37Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12469484',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12469484',
+ numResponses: 0,
+ numRecommends: 9,
+ isHighlighted: false,
+ userProfile: {
+ userId: '1331497',
+ displayName: 'DoctorDark',
+ webUrl: 'https://profile.theguardian.com/user/id/1331497',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1331497',
+ avatar: 'https://avatar.guim.co.uk/user/1331497',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/1331497',
+ badge: [],
+ },
+ },
+ {
+ id: 12469659,
+ body: 'when I was farming I had one field which was full of ragwort. It is dangerous to cattle and horses. At the end of the school holidays I got hold of six or seven boys of about 10 or 11, gave them an empty fertilizer sack and promised to pay them a half-penny for every plant they pulled up. (this was in 1962 or 3). Ragwort cannot be killled by any known selective weed-killer, It has to be pulled up by the roots. Thwe boys got an average of 40 plants each and we werre very happy to be given 1/8d.
',
+ date: '19 September 2011 1:57pm',
+ isoDateTime: '2011-09-19T12:57:11Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12469659',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12469659',
+ numResponses: 0,
+ numRecommends: 5,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4279254',
+ displayName: 'bordighera1',
+ webUrl: 'https://profile.theguardian.com/user/id/4279254',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4279254',
+ avatar: 'https://avatar.guim.co.uk/user/4279254',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4279254',
+ badge: [],
+ },
+ },
+ {
+ id: 12469806,
+ body: "Ragwort is everywhere. It can be a problem, but is also a part of our habitat.
There. All sorted.
Do we have to have this typical English hype,rant and posturing?
The English press whip everything up for copy and the public lap up the phoney drama.Then people wonder why politicians are so phoney and insincere. They daren't be anything else. Political correctness rules.
",
+ date: '19 September 2011 2:03pm',
+ isoDateTime: '2011-09-19T13:03:27Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12469806',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12469806',
+ numResponses: 0,
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4530494',
+ displayName: 'jobrian',
+ webUrl: 'https://profile.theguardian.com/user/id/4530494',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4530494',
+ avatar: 'https://avatar.guim.co.uk/user/4530494',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4530494',
+ badge: [],
+ },
+ },
+ {
+ id: 12469934,
+ body: 'And they attacked his ecological knowledge
This is the sort of thing that happens when ministers have to be picked from among MPs. It is amazing that almost nobody treats this as a problem.
There might be one or two Westminister MPs in total with the necessary knowledge of ecology. It is mad we expect MPs to be appointed ministers and within a year to be speaking with the expertise of people with several years of university study plus years on the job.
There are many European countries where ministers are appointed by the prime minister and are usually so choosen because of recognised expertise in the field. Cases like this show the UK needs to change. This sort of amateurism might have been fine for the Victorians but it is out of place today.
',
+ date: '19 September 2011 2:09pm',
+ isoDateTime: '2011-09-19T13:09:36Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12469934',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12469934',
+ numResponses: 0,
+ numRecommends: 11,
+ isHighlighted: false,
+ userProfile: {
+ userId: '1954291',
+ displayName: 'drabacus',
+ webUrl: 'https://profile.theguardian.com/user/id/1954291',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1954291',
+ avatar: 'https://avatar.guim.co.uk/user/1954291',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/1954291',
+ badge: [],
+ },
+ },
+ {
+ id: 12469981,
+ body: 'I\'ve long been aware of this attitude to Ragwort, and other so called "weeds". It is irrational thinking of a similar nature to racism and all the other stupid irrational hatreds people have.
Within hours of the post about the "vile weed", more than 30 people had complained that he was ecologically illiterate , plain wrong or perpetuating myths put out about the plant by herbicide companies.
This is precisely the problem, "ecological illiteracy". That it is the government\'s Minister for the Natural Environment and Fisheries, Richard Benyon expressing these views is nothing short of incredible. After all, presumably his department have enough advisers who could have quickly explained that he was a being a buffoon expressing his ignorance, before putting both feet in it - highlighting his ignorance and unsuitability for the position.
From what I understand the main problem with Ragwort poisoning in horses is being fed hay with dried Ragwort in it. They normally avoid eating live Ragwort in pastures.
Benyon struck back, saying his critics were being "unnecessarily aggressive", and that he wasn\'t advocating ethnic cleansing of ragwort but that he wanted to deal with "a severe infestation of a poisonous plant".
This is laughable, and clearly Richard Benyon has a problem with joined up thinking. He uses aggressive phrases like "vile weed" and "a severe infestation of a poisonous plant", whilst risibly accusing other of being "unnecessarily aggressive".
Matt Shardlow, the director of Buglife is very right when he says "a critically important nectar source for hundreds of species of butterflies, bees, moths, flies and other invertebrates". I tend to specialise in photographing feeding insects feeding in flowers, and I can confirm that Ragwort is an extremely important plant in sustaining pollinators. It is important not only because it is an attractive plant to pollinators, but because of the volume of it. I would describe it as one of our most important native plants for sustaining pollinator populations.
It is bizarre in the extreme, that there is a well recognised problem with the decline of pollinators, not just in the UK, but internationally. And here we have an uneducated buffoon, who has somehow found himself Minister for the Natural Environment and Fisheries, declaring war on an important native wildflower, which is of major importance in sustaining these species in serious decline. Species which are actually very important to farmers. This is why Richard Benyon is clearly "ecological illiteracy". I suggest that if Richard Benyon wants to do this job, then he urgently needs to educate himself about the subject.
',
+ date: '19 September 2011 2:12pm',
+ isoDateTime: '2011-09-19T13:12:32Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12469981',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12469981',
+ numResponses: 0,
+ numRecommends: 12,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4311896',
+ displayName: 'SteB1',
+ webUrl: 'https://profile.theguardian.com/user/id/4311896',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4311896',
+ avatar: 'https://avatar.guim.co.uk/user/4311896',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4311896',
+ badge: [],
+ },
+ },
+ {
+ id: 12470128,
+ body: "Shame he can't get so aerated about the Rhododendron that invades and destroys anywhere its shoots spread or seeds land and his voters keep planting in their large gardens.
",
+ date: '19 September 2011 2:18pm',
+ isoDateTime: '2011-09-19T13:18:36Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12470128',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12470128',
+ numResponses: 0,
+ numRecommends: 8,
+ isHighlighted: false,
+ userProfile: {
+ userId: '1301439',
+ displayName: 'WaitForPete',
+ webUrl: 'https://profile.theguardian.com/user/id/1301439',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1301439',
+ avatar: 'https://avatar.guim.co.uk/user/1301439',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/1301439',
+ badge: [],
+ },
+ },
+ {
+ id: 12470152,
+ body: '@ bordighera:
Ragwort cannot be killled by any known selective weed-killer, It has to be pulled up by the roots.
Not necessarily true. Pulling up by the roots can be one of the worst things you can do - remember this is a plant that loves to colonise bare ground, which is what you create when pulling existing plants up. This creates perfect oportunities for seed in the soil, or new seed rain to colonise those areas making it seem like the ragwort never went away. I have seen this happen many times.
As for other control methods, I am not an expert on herbicides, but it would appear there are numerous to choose from that will do the job - see the Defra code of practice, or for example the Centre for ecology and Hydrology information sheet on ragwort http://www.ceh.ac.uk/sci_programmes/documents/Ragwort.pdf (to name but two sources) for more info.
',
+ date: '19 September 2011 2:20pm',
+ isoDateTime: '2011-09-19T13:20:06Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12470152',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12470152',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '3596779',
+ displayName: 'Ecoboy1980',
+ webUrl: 'https://profile.theguardian.com/user/id/3596779',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3596779',
+ avatar: 'https://avatar.guim.co.uk/user/3596779',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3596779',
+ badge: [],
+ },
+ },
+ {
+ id: 12470272,
+ body: '@SteB1
Right as rain as usual :)
',
+ date: '19 September 2011 2:25pm',
+ isoDateTime: '2011-09-19T13:25:45Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12470272',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12470272',
+ numResponses: 0,
+ numRecommends: 4,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4387033',
+ displayName: 'Atomant77',
+ webUrl: 'https://profile.theguardian.com/user/id/4387033',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4387033',
+ avatar: 'https://avatar.guim.co.uk/user/4387033',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4387033',
+ badge: [],
+ },
+ },
+ {
+ id: 12471548,
+ body: "The stupid thing about using hebicides on ragwort is that the weed is easy to control by pulling.
Like bordighera1 I had a field full of ragwort with cattle and horses on it.
As vets warn it is a poison, I used to go out and pull a sackful every day when out walking.
They are easy to pull, especially after rain.
Ragworts are now a rarity in that field. Other weeds are caused by overfertilising.
When we went organic and stopped using mineral fertiliser, one surprising side effect was that weeds died out and clovers flourished. The mineral imbalance causes the weeds. A coating of dried seaweed fertiliser worked wonders. The meadow is full of bees, dragon flys butterflys and all kinds of insect life, a joy to visit on a summer's day.
",
+ date: '19 September 2011 3:34pm',
+ isoDateTime: '2011-09-19T14:34:07Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12471548',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12471548',
+ numResponses: 0,
+ numRecommends: 2,
+ isHighlighted: false,
+ userProfile: {
+ userId: '1268926',
+ displayName: 'kvms',
+ webUrl: 'https://profile.theguardian.com/user/id/1268926',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/1268926',
+ avatar: 'https://avatar.guim.co.uk/user/1268926',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/1268926',
+ badge: [],
+ },
+ },
+ {
+ id: 12471828,
+ body: 'Government minister shown to be clueless, ignorant of portfolio, reactionary and protectionist idiot shocker. What an absolute prick and sadly so full of hubris he is unlikely to be embarrassed.
@SteB1 and @drabacus - spot on by the way.
',
+ date: '19 September 2011 3:52pm',
+ isoDateTime: '2011-09-19T14:52:35Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12471828',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12471828',
+ numResponses: 0,
+ numRecommends: 5,
+ isHighlighted: false,
+ userProfile: {
+ userId: '3874929',
+ displayName: 'carnaptious99',
+ webUrl: 'https://profile.theguardian.com/user/id/3874929',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3874929',
+ avatar: 'https://avatar.guim.co.uk/user/3874929',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3874929',
+ badge: [],
+ },
+ },
+ {
+ id: 12471872,
+ body: 'Another ill informed, arrogant minster who gets found out when he actually tries to interact with voters.
',
+ date: '19 September 2011 3:54pm',
+ isoDateTime: '2011-09-19T14:54:54Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12471872',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12471872',
+ numResponses: 0,
+ numRecommends: 2,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4568262',
+ displayName: 'JimmerInManila',
+ webUrl: 'https://profile.theguardian.com/user/id/4568262',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4568262',
+ avatar: 'https://avatar.guim.co.uk/user/4568262',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4568262',
+ badge: [],
+ },
+ },
+ {
+ id: 12472026,
+ body: '@kvms ragwort is *not* "controlled" by pulling. First, you can\'t pull the rosette stage. Second, pulling the plant simply means that next year you\'ll have loads more plants to pull. The root system is quite complex even above ground. If you like pulling up ragwort, congratulations - you\'ve kept yourself in a job.
I wouldn\'t trust that "ragwort facts" site as it doesn\'t link out. Instead use PubMed where you can find some raw data, such as from this search .
@SteB1 "From what I understand the main problem with Ragwort poisoning in horses is being fed hay with dried Ragwort in it. They normally avoid eating live Ragwort in pastures."
That\'s because the ragwort has a bitter taste (because of the alkalinoids). Once dried, the taste is lost. So the argument really is about controlling ragwort in fields that will be used for hay, and perhaps also for human food (I don\'t think you really want phlebotoxic contaminants in your basic food supply).
Ragwort quickly colonises bare ground (another reason why pulling, which leaves bare patches, isn\'t so clever); I think that\'s why Benyon is so frustrated with the Highways Agency, which is great at digging up roads but no so good at chucking grass seed over the bits once repaired.
',
+ date: '19 September 2011 4:02pm',
+ isoDateTime: '2011-09-19T15:02:57Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12472026',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12472026',
+ numResponses: 0,
+ numRecommends: 5,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2427181',
+ displayName: 'CharlesArthur',
+ webUrl: 'https://profile.theguardian.com/user/id/2427181',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2427181',
+ avatar: 'https://avatar.guim.co.uk/user/2427181',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2427181',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 12472059,
+ body: 'Richard Benyon shoots himself in the foot, good, saves others the bother of doing it for him.
Scary to think someone ignorant is in this Government position of power, though.
',
+ date: '19 September 2011 4:04pm',
+ isoDateTime: '2011-09-19T15:04:19Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12472059',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12472059',
+ numResponses: 0,
+ numRecommends: 3,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4188282',
+ displayName: 'sparclear',
+ webUrl: 'https://profile.theguardian.com/user/id/4188282',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4188282',
+ avatar: 'https://avatar.guim.co.uk/user/4188282',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4188282',
+ badge: [],
+ },
+ },
+ {
+ id: 12473125,
+ body: 'Just be sure you are not confusing Senecio jacobaea with Tanacetum vulgare.
',
+ date: '19 September 2011 5:03pm',
+ isoDateTime: '2011-09-19T16:03:22Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12473125',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12473125',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4573193',
+ displayName: 'PanYanPickle',
+ webUrl: 'https://profile.theguardian.com/user/id/4573193',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4573193',
+ avatar: 'https://avatar.guim.co.uk/user/4573193',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4573193',
+ badge: [],
+ },
+ },
+ {
+ id: 12473463,
+ body: "@CharlesArthur
\"From what I understand the main problem with Ragwort poisoning in horses is being fed hay with dried Ragwort in it. They normally avoid eating live Ragwort in pastures.\"\n That's because the ragwort has a bitter taste (because of the alkalinoids). Once dried, the taste is lost. So the argument really is about controlling ragwort in fields that will be used for hay, and perhaps also for human food (I don't think you really want phlebotoxic contaminants in your basic food supply).
Ragwort quickly colonises bare ground (another reason why pulling, which leaves bare patches, isn't so clever); I think that's why Benyon is so frustrated with the Highways Agency, which is great at digging up roads but no so good at chucking grass seed over the bits once repaired.
Yes I'm well aware of some of the compounds in Ragwort and why horses supposedly avoid Ragwort in fields, but may eat it in hay. Although I think much of it is to do with the difference between the way horses selectively browse in fields, and the way they eat hay. Horses simply do not have the equipment to disentangle different plants from hay they are fed, so they are forced to eat whole, and not selectively as when thy browse. I should also add that I have formally studied herbivory, how some toxins operate biologically, and the secondary metabolites which inhibit herbivory. I was bought up in a rural area and I have known horsey people for most of my life. So I appreciate these aspects and have a good grasp of the rural attitude to Ragwort. I also understand the ecological prefererences of Ragwort, which is also important in understanding it's ecological importance in the modern era.
The main bit you miss out is that the wish to control Ragwort everywhere is because it has wind blown seed. In the countryside there is a traditional annoyance with landowners who don't control Ragwort as it is perceived that the seed from the Ragwort in their fields spreads elsewhere.
I admit it's quite some time since I have done specific reading on the toxicity of Ragwort. However, from what I can remember most of the literature appeared to imply that the dangers of Ragwort toxicity were somewhat exaggerated. This backs up my own experience. where I can't even think of an example of Ragwort toxicity in a horse. Although I have been personally aware of quite a few examples where people's horses have died or become ill with acorn poisoning. This has always what has struck me, horse owners are a bit obsessed with Ragwort, even though most of the things that effect horses aren't Ragwort poisoning.
I find that there is a very distorted view about \"poisonous plants\". Those that have these concerns often do not realise what a huge variety of our native plants species have pretty potent toxins in them. This tends to result in hysteria about some plants, where most people are not even aware that other plants they consider safe, are even more toxic.
Without doing a fair bit of reading to get up to date, my impression is that the toxicity of Ragwort is an overblown concern. The pre-occupation with Ragwort appears to be because it is a named plant in the 1959 Weeds Act. But the other named weeds are 2 Dock species and 2 Thistle species. This was a time of the green revolution and where our pasture was being turned into \"improved grassland\". In such grassland normally only one species of grass (usually a Ryegrass sp.) is welcome, and 2 Clover species. Typically such grassland only contains about 5 species. The other species being those named in the Weeds Act, which farmers want to eliminate to increase yield. Species rich grassland can contain 80 species. We have lost over 90% of our species rich grassland. In other words, I personally think it's far more about Ragwort being one of the few species to invade \"improved grassland\", than it is about toxicity or danger.
The notion that there are good species, and bad species which need to be demomized, and war waged on them has done massive damage to the biodiversity our countryside. To see our countryside as containing bad, or enemy species, which have to be controlled at all costs is really a bit of an uninformed Victorian attitude. As I explained before, Ragwort is an important native plant for sustaining pollinator populations, which have been in serious decline. This is what makes these simplistic views about good and bad species problematic. Often the species seen as bad, had an unacknowledged positive role to play in the ecology of our countryside.
I have also seen little evidence to suggest Ragwort is any sort of real threat to human health.
",
+ date: '19 September 2011 5:22pm',
+ isoDateTime: '2011-09-19T16:22:08Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12473463',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12473463',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4311896',
+ displayName: 'SteB1',
+ webUrl: 'https://profile.theguardian.com/user/id/4311896',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4311896',
+ avatar: 'https://avatar.guim.co.uk/user/4311896',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4311896',
+ badge: [],
+ },
+ },
+ {
+ id: 12473866,
+ body: 'This site appears to provide proper sources for its statements:http://www.ragwort.org.uk/
',
+ date: '19 September 2011 5:50pm',
+ isoDateTime: '2011-09-19T16:50:45Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12473866',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12473866',
+ numResponses: 0,
+ numRecommends: 3,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4368868',
+ displayName: 'kitenet',
+ webUrl: 'https://profile.theguardian.com/user/id/4368868',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4368868',
+ avatar: 'https://avatar.guim.co.uk/user/4368868',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4368868',
+ badge: [],
+ },
+ },
+ {
+ id: 12473958,
+ body: 'To most of us, there is no story at all here, just a photo of a man pulling up some weeds and having a rant about them. My neighbours, colleagues, friends,... do the same thing every single weekend.
And he even has the sense of humour to laugh at himself in the comments on that facebook page.
But a few people want to make a fuss and vandalise his facebook page. Unfortunately that is all to common these days too. That says more about those people though than it does about the Minister.
',
+ date: '19 September 2011 5:57pm',
+ isoDateTime: '2011-09-19T16:57:16Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12473958',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12473958',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '3699054',
+ displayName: 'NeverMindTheBollocks',
+ webUrl: 'https://profile.theguardian.com/user/id/3699054',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3699054',
+ avatar: 'https://avatar.guim.co.uk/user/3699054',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3699054',
+ badge: [],
+ },
+ },
+ {
+ id: 12473992,
+ body: 'cinnebar moths are beautiful pink moths and are a natural way of reducing ragwort since the caterpillars can be seen in abundance feeding on them, little yellow and balck striped beauties that can decimate a whole plant in hours apparently.
ignorant people irritate when they talk about stuff they know nothing about. me i try and enjoy the beauty that is there.http://www.flickr.com/photos/martin_black/5967445057/in/set-72157622416904918
',
+ date: '19 September 2011 5:59pm',
+ isoDateTime: '2011-09-19T16:59:24Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12473992',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12473992',
+ numResponses: 0,
+ numRecommends: 2,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4212243',
+ displayName: 'grumpygrowlygirlie',
+ webUrl: 'https://profile.theguardian.com/user/id/4212243',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4212243',
+ avatar: 'https://avatar.guim.co.uk/user/4212243',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4212243',
+ badge: [],
+ },
+ },
+ {
+ id: 12474633,
+ body: '@kitenet
This site appears to provide proper sources for its statements:http://www.ragwort.org.uk/
Thanks very much for this useful link. It confirms many of my impressions. I\'ve have been baffled by Ragwort hysteria for a long time. Whilst it is a bit of a pre-occupation in equine circles, I was always a bit baffled because I wasn\'t aware of any specific cases where horses had definitely become ill due to Ragwort poisoning. Whereas I was aware of many examples of other types of poisoning such as horses eating large amounts of acorns. Although I am wary of these diagnoses, because often it appears to be more of a guess, and is often not confirmed by a post-morten.
A particular problem with concerns about plant toxicity, is that just because compounds are in plants, does not necessarily mean that they will be ingested in high enough levels to cause illness.
',
+ date: '19 September 2011 6:56pm',
+ isoDateTime: '2011-09-19T17:56:40Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12474633',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12474633',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4311896',
+ displayName: 'SteB1',
+ webUrl: 'https://profile.theguardian.com/user/id/4311896',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4311896',
+ avatar: 'https://avatar.guim.co.uk/user/4311896',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4311896',
+ badge: [],
+ },
+ },
+ {
+ id: 12474814,
+ body: 'I am the author of the http://www.ragwort.org.uk/ , I did a lot research because I was made scared by press and repeated misinformation and I am a horse owner, I asked experts to help my cause some didn\'t look right for me, this expersts did help me with my website to discover facts and/or myths. ( most was myths) I also made a picture gallery of the importance for biodiversity ( that is only visible on my Dutch website) There are a lot of insects, butterflys etc feeding at ragwort, I think a lot more than catlle http://www.jakobskruiskruid.com/website/index.php?option=com_rsgallery2&Itemid=48 On the gallery tehere are also a lot of yellow plants where people make mistakes, some very common plant, but also some rare. Not any yellow is ragwort.
',
+ date: '19 September 2011 7:15pm',
+ isoDateTime: '2011-09-19T18:15:28Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12474814',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12474814',
+ numResponses: 0,
+ numRecommends: 6,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4741862',
+ displayName: 'EstherHegt',
+ webUrl: 'https://profile.theguardian.com/user/id/4741862',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4741862',
+ avatar: 'https://avatar.guim.co.uk/user/4741862',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4741862',
+ badge: [],
+ },
+ },
+ {
+ id: 12475107,
+ body: "@NMTB
To most of us, there is no story at all here, just a photo of a man pulling up some weeds and having a rant about them. My neighbours, colleagues, friends,... do the same thing every single weekend.
That's not really accurate is it? The man pulling up the \"weeds\" happened to be the Minister resonsible for biodiversity, and here he was calling a native wildflower, which supports a significant amount of biodiversity, a \"vile weed\" - saying \"I hate ragwort. It may not be the issue of the moment but I am on the warpath for those who let this vile weed spread\". These comments were made in a public context on his facebook page which makes his ministerial role clear.
Additionally, both my experience, and what I have read in the scientific literature in the past, indicates that the supposed problems Ragwort causes are grossly over-exaggerated, with there being little evidence for the widespread problems attributed to it.
But a few people want to make a fuss and vandalise his facebook page. Unfortunately that is all to common these days too. That says more about those people though than it does about the Minister.
You don't explain exactly what you mean by vandalise his facebook page. We can't cross check this because he removed the thread, presumably to hide his embarrassment. Do you just mean people pointed out that Richard Benyon doesn't appear to have any understanding of the ecological role Ragwort plays in supporting biodiversity? As he is the Minister responsible for biodiversity it was incumbent on those who understand the subject to point out that the Minister's comments were ill-informed, and showed an incredible degree ecological illiteracy for someone in such a role - a clear matter of public concern. Your comment is more like spin for the Minister than anything else. After all you've not said anything to support the validity of the Minister's ill-informed rant.
",
+ date: '19 September 2011 7:44pm',
+ isoDateTime: '2011-09-19T18:44:27Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12475107',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12475107',
+ numResponses: 0,
+ numRecommends: 4,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4311896',
+ displayName: 'SteB1',
+ webUrl: 'https://profile.theguardian.com/user/id/4311896',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4311896',
+ avatar: 'https://avatar.guim.co.uk/user/4311896',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4311896',
+ badge: [],
+ },
+ },
+ {
+ id: 12475117,
+ body: 'If, as has been suggests that 2000+ horse suffered from liver failure last year and died due to Ragwort consumption then someone needs to drop this chap a line for the facts..
If ragwort is poisonous and horses eat it and die that is not a good thing.
This is not hysteria.
The horses and their owners will be very grateful if someone gets to the truth here. I haven\'t set up a website. But the equation would seem to be,
Ragwort + ragwort munching horse = dead horse not munching anything.
',
+ date: '19 September 2011 7:45pm',
+ isoDateTime: '2011-09-19T18:45:49Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12475117',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12475117',
+ numResponses: 0,
+ numRecommends: 3,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4641408',
+ displayName: 'MrRatfan1976',
+ webUrl: 'https://profile.theguardian.com/user/id/4641408',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4641408',
+ avatar: 'https://avatar.guim.co.uk/user/4641408',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4641408',
+ badge: [],
+ },
+ },
+ {
+ id: 12475461,
+ body: '"There is very very clear science on meta-population dynamics that shows that habitat loss with in a patchwork of habitats has a very severe effect"
YAWN.
',
+ date: '19 September 2011 8:25pm',
+ isoDateTime: '2011-09-19T19:25:51Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12475461',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12475461',
+ numResponses: 0,
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4487660',
+ displayName: 'MrPiggles',
+ webUrl: 'https://profile.theguardian.com/user/id/4487660',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4487660',
+ avatar: 'https://avatar.guim.co.uk/user/4487660',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4487660',
+ badge: [],
+ },
+ },
+ {
+ id: 12475751,
+ body: 'Ragwort is a noxious weed in agricultural situations.
http://www.sac.ac.uk/mainrep/pdfs/tn570ragwortpoisoning.pdf
Although it is also important for biodiversity, its not exactly a rare plant.
I would far rather pull it, as Benyon is doing, when infestations in problem areas are light and easily controlled, rather than allow things to get out of hand and then use herbicides which will needlessly cause huge collateral damage on many harmless and beneficial grassland species.
',
+ date: '19 September 2011 8:58pm',
+ isoDateTime: '2011-09-19T19:58:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12475751',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12475751',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2411079',
+ displayName: 'antipodean1',
+ webUrl: 'https://profile.theguardian.com/user/id/2411079',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2411079',
+ avatar: 'https://avatar.guim.co.uk/user/2411079',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2411079',
+ badge: [],
+ },
+ },
+ {
+ id: 12475801,
+ body: '@ MrRatfan1976
If, as has been suggests that 2000+ horse suffered from liver failure last year and died due to Ragwort consumption then someone needs to drop this chap a line for the facts..
We did, we wrote the chap a email and that is our page about the myth of skin absorption http://www.ragwort.org.uk/facts-or-myths/7-i/13-ragwort-poisoning-through-skin-absorption-fact-or-fiction
',
+ date: '19 September 2011 9:02pm',
+ isoDateTime: '2011-09-19T20:02:42Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12475801',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12475801',
+ numResponses: 0,
+ numRecommends: 4,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4741862',
+ displayName: 'EstherHegt',
+ webUrl: 'https://profile.theguardian.com/user/id/4741862',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4741862',
+ avatar: 'https://avatar.guim.co.uk/user/4741862',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4741862',
+ badge: [],
+ },
+ },
+ {
+ id: 12475922,
+ body: "I was one of those who posted comments on the minister's Facebook page. I don't believe I was 'aggressive' but I was most certainly was alarmed by Mr Benyon's total lack of knowledge.
One of the worst problems with ragwort is that people don't read the code of practice. Since his own department is responsible for the COP it is not unreasonable to expect Mr Benyon to have read it.
The photograph makes it clear he hasn't because there are five ways in which what he is doing is not in accordance with the advice in the COP. I blogged about all five the other day.
",
+ date: '19 September 2011 9:14pm',
+ isoDateTime: '2011-09-19T20:14:33Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12475922',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12475922',
+ numResponses: 0,
+ numRecommends: 4,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4323663',
+ displayName: 'thepoisongarden',
+ webUrl: 'https://profile.theguardian.com/user/id/4323663',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4323663',
+ avatar: 'https://avatar.guim.co.uk/user/4323663',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4323663',
+ badge: [],
+ },
+ },
+ {
+ id: 12476305,
+ body: "At first , I'm a horse owner and have no fear for ragwort at all !!
<quote>MrRatfan1976\n\n19 September 2011 7:45PM\n\nIf, as has been suggests that 2000+ horse suffered from liver failure last year and died due to Ragwort consumption then someone needs to drop this chap a line for the facts.. </quote>
That's done as you can see above...by EstherHegt and her experts
By the way... Did you know , in those time's and also today there is still NO test that can make you sure it is ragwort that has killed a horse? Besides... the guy Knottenbelt in you're link isn't even a toxicologist, and the same guy admitted in an other site that those numbers where.... a gamble.
",
+ date: '19 September 2011 9:47pm',
+ isoDateTime: '2011-09-19T20:47:08Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12476305',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12476305',
+ numResponses: 0,
+ numRecommends: 2,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4742115',
+ displayName: 'NickAltena',
+ webUrl: 'https://profile.theguardian.com/user/id/4742115',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4742115',
+ avatar: 'https://avatar.guim.co.uk/user/4742115',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4742115',
+ badge: [],
+ },
+ },
+ {
+ id: 12476413,
+ body: "It's just another myth that any flowering Ragwortplant wil grow overnight, the majority of ragwortplants needs 2 full growing seasons to get in a flowering state, it takes a bit more of skills to regognise the vegetative state , but an important one, because this is also the most effective state to use succesfully in destroying the plant, bij apropiate chemical herbicides.
it will allways be the horseowners who puts a horse in a certain field, horses can't speak for themselfs, keep them safe from contact with poisionous plants is just one of many, many horsemanship tasks to put in good practice! Ragwort is just one of many not to tollerate plants in a horsefield or paddock, and it is one of many you don't want in hay or other feed.
",
+ date: '19 September 2011 9:57pm',
+ isoDateTime: '2011-09-19T20:57:51Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12476413',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12476413',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4741862',
+ displayName: 'EstherHegt',
+ webUrl: 'https://profile.theguardian.com/user/id/4741862',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4741862',
+ avatar: 'https://avatar.guim.co.uk/user/4741862',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4741862',
+ badge: [],
+ },
+ },
+ {
+ id: 12476758,
+ body: '@antipodean1
Ragwort is a noxious weed in agricultural situations.
http://www.sac.ac.uk/mainrep/pdfs/tn570ragwortpoisoning.pdf Although it is also important for biodiversity, its not exactly a rare plant.
I would far rather pull it, as Benyon is doing, when infestations in problem areas are light and easily controlled, rather than allow things to get out of hand and then use herbicides which will needlessly cause huge collateral damage on many harmless and beneficial grassland species.
I don\'t often find myself disagreeing with you. The reference you gave just gives a series of assertions and doesn\'t support or reference them.
I\'ve known about the supposed toxicity of Ragwort throughout most of my life. Several people in my family have been horse owners, and it is a big pre-occupation in the equine world. Also I knew about it because the caterpillars of Cinnabar moths supposedly were unpalatable because of a concentration of the Ragworts toxins. Initially I just accepted this as fact because it was repeated so much. However I started become sceptical because despite the equine world\'s pre-occupation with Ragwort I never knew of a definite Ragwort poisoning case. Yet I knew of other cases of horses being poisoned by eating other things, but not Ragwort. This was baffling given the prevalence of Ragwort in fields grazed by horses and in pasture cut for hay. I started to become suspicious that this was a "factoid" - an inaccurate assertion that gains credence over time by its repetition.
When I tried reading up on it some while back when I had access to an academic library I could find very little direct information about the supposed problem of Ragwort toxicity. Most of it just appeared to be unsupported assertions, and the anecdotal accounts weren\'t backed up by post-morten results. However, it was not enough of an issue for me to pursue it any further.
This is why I find @EstherHegt\'s comments and website so interesting, because it confirms my suspicions. At the very least the problem appears to be somewhat overstated.http://www.ragwort.org.uk/
On the subject of Ragwort\'s importance for supporting biodiversity. Yes you are right that it is not a rare plant. However, the groups of pollinating insects, to which Ragwort is important, are in serious decline. So it is the volume of food sources (flowers) important to this biodiversity component, and not just whether it is there or not. Photographing flower feeding insects has given me a lot of insight into which flower food sources are the most popular with feeding insects, and which are the most widespread and used. In my experience Ragwort is one of the most important single plants. In my experience perhaps only Hogweed supports more feeding insects, and is more widespread. I think the shot below is of a hoverfly on Ragwort. Although I don\'t use Ragwort too much for my photography as I use flash, and the smaller flowers mean you tend to get a black background. Here I managed to get a few flowers behind to prevent this.http://farm5.static.flickr.com/4018/4396328430_78f4045739_o.jpg
',
+ date: '19 September 2011 10:31pm',
+ isoDateTime: '2011-09-19T21:31:48Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12476758',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12476758',
+ numResponses: 0,
+ numRecommends: 3,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4311896',
+ displayName: 'SteB1',
+ webUrl: 'https://profile.theguardian.com/user/id/4311896',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4311896',
+ avatar: 'https://avatar.guim.co.uk/user/4311896',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4311896',
+ badge: [],
+ },
+ },
+ {
+ id: 12476847,
+ body: 'I have no fear of ragwort but for the sake of the nice old horses i ask the key question.
Is ragwort a risk for horses?
Can someone qualified pitch in with an answer. Otherwise we\'ll be chewing on the question for days, unlike the horses who wont know.
I don\'t really give a monkey\'s about this old boy tory and his facebook troll hell. However 30 years ago i was removing ragwort from fields so the old horsie wasn\'t at any risk, i was brought up with "Ragwort is poisonous for the horse"
@Esher "horses can\'t speak for themselves, keep them safe". Spot on.
Can we have some science please. Is Ragwort a danger to a horse and if it is what are we going to do about it. Defra, NFU, BHF, Mr Toxicologist. What is your best guideline?
',
+ date: '19 September 2011 10:41pm',
+ isoDateTime: '2011-09-19T21:41:03Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12476847',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12476847',
+ numResponses: 0,
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4641408',
+ displayName: 'MrRatfan1976',
+ webUrl: 'https://profile.theguardian.com/user/id/4641408',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4641408',
+ avatar: 'https://avatar.guim.co.uk/user/4641408',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4641408',
+ badge: [],
+ },
+ },
+ {
+ id: 12477021,
+ body: "Just to clarify the point I am making. I'm not suggesting that those with livestock and who want to take precautions shouldn't control Ragwort in their pastures. What I am concerned about is the demonization of plants like Ragwort. This can lead to pointless wars waged against certain plants everywhere, with little thought about what this is meant to achieve, or the effect it has on other biodiversity. I often find interesting places to photograph insects. I return and everything has been cut down or sprayed (not particularly Ragwort). There doesn't appear to be any clear rationale for this, as often these places have no other purpose to serve, that the vegetation cut down or sprayed prevents. When I have asked about this, I often get puzzled looks, and told they are weeds, or need to be tidied up. A weed is only a plant growing where someone doesn't want it to grow. Unfortunately, many people who don't understand this concept appear to believe that being a weed, makes a plant inherently bad wherever it is, and it is necessary to wage constant war on weeds, regardless of where they are growing.
",
+ date: '19 September 2011 10:59pm',
+ isoDateTime: '2011-09-19T21:59:44Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12477021',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12477021',
+ numResponses: 0,
+ numRecommends: 3,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4311896',
+ displayName: 'SteB1',
+ webUrl: 'https://profile.theguardian.com/user/id/4311896',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4311896',
+ avatar: 'https://avatar.guim.co.uk/user/4311896',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4311896',
+ badge: [],
+ },
+ },
+ {
+ id: 12477166,
+ body: 'Common ragwort (Senecio jacobaea), a risk to the livers of both horses and cows too folks.
Keep it away from them and them away from it would seem to be a wise move.
Here\'s the science - bit.
A wise move from Mr Benyon here and that cow up there is moost grateful.
',
+ date: '19 September 2011 11:14pm',
+ isoDateTime: '2011-09-19T22:14:23Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12477166',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12477166',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4641408',
+ displayName: 'MrRatfan1976',
+ webUrl: 'https://profile.theguardian.com/user/id/4641408',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4641408',
+ avatar: 'https://avatar.guim.co.uk/user/4641408',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4641408',
+ badge: [],
+ },
+ },
+ {
+ id: 12477257,
+ body: 'There are 6000 plantspecies who produce PAs (3 % of all flowering plants.
',
+ date: '19 September 2011 11:23pm',
+ isoDateTime: '2011-09-19T22:23:06Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12477257',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12477257',
+ numResponses: 0,
+ numRecommends: 3,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4741862',
+ displayName: 'EstherHegt',
+ webUrl: 'https://profile.theguardian.com/user/id/4741862',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4741862',
+ avatar: 'https://avatar.guim.co.uk/user/4741862',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4741862',
+ badge: [],
+ },
+ },
+ {
+ id: 12477258,
+ body: 'Ragwort can be poison for a horse! It should not be in the pasture...it should not be in de hey.... However,...the horse also should not get both of it from the owner ;)
This "minister" is a joker, but not responsible. The only person who is responsible (in MY eye\'s) is the owner of the horse who puts the horse in a pasture with a lot of ragwort or giving them hay with this ragwort in it ! A piece of ragwort doesn\'t hurt...but a lot of it or regular is dangerous.
',
+ date: '19 September 2011 11:23pm',
+ isoDateTime: '2011-09-19T22:23:12Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12477258',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12477258',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4742115',
+ displayName: 'NickAltena',
+ webUrl: 'https://profile.theguardian.com/user/id/4742115',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4742115',
+ avatar: 'https://avatar.guim.co.uk/user/4742115',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4742115',
+ badge: [],
+ },
+ },
+ {
+ id: 12477552,
+ body: '@SteB1
I don\'t often find myself disagreeing with you.
If you read my post carefully - I dont think we actually disagree much on this. The link i gave was merely illustrative of the agricultural approach.
Farmers and horse-keepers understandably wish to control ragwort on their land, so that their valuable animals, their source of income (and often their lifetimes work) are not put in jeopardy by an unfortunate poisoning incident.
Yes - demonisation of plants is silly.
The code of practise is detailed & IMHO pretty good.
http://www.defra.gov.uk/publications/files/pb9840-cop-ragwort.pdf
A careful eye and judicious pulling of ragwort where there are low populations, can prevent a major issue arising and unnecessary herbicide use.
',
+ date: '19 September 2011 11:55pm',
+ isoDateTime: '2011-09-19T22:55:39Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12477552',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12477552',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2411079',
+ displayName: 'antipodean1',
+ webUrl: 'https://profile.theguardian.com/user/id/2411079',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2411079',
+ avatar: 'https://avatar.guim.co.uk/user/2411079',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2411079',
+ badge: [],
+ },
+ },
+ {
+ id: 12478723,
+ body: "I'm no supporter of Benyon, but at least, I assume, he thinks he is doing the right thing? Seems harsh from Dusty, et al, given it is still a widespread practice.
Many conservation organisations are still pulling ragwort on SSSIs so DEFRA will know that this is happening. If it is unnecessary why isn't the guidance flitering down to on the ground staff?
There may also be an issue that in order to get grazing, you have to remove ragwort otherwise grazers won't allow their stock on site.
",
+ date: '20 September 2011 6:30am',
+ isoDateTime: '2011-09-20T05:30:36Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12478723',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12478723',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '3237256',
+ displayName: 'PizzaRe',
+ webUrl: 'https://profile.theguardian.com/user/id/3237256',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3237256',
+ avatar: 'https://avatar.guim.co.uk/user/3237256',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3237256',
+ badge: [],
+ },
+ },
+ {
+ id: 12479039,
+ body: 'MrRatfan1976
You say you want the science and then link to two sites offering some of the information.
It\'s far easier to get the DEFRA Code of Practice and follow the advice given there.
That is what Mr Benyon didn\'t do and that is why he has been criticised.
',
+ date: '20 September 2011 8:13am',
+ isoDateTime: '2011-09-20T07:13:14Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12479039',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12479039',
+ numResponses: 0,
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4323663',
+ displayName: 'thepoisongarden',
+ webUrl: 'https://profile.theguardian.com/user/id/4323663',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4323663',
+ avatar: 'https://avatar.guim.co.uk/user/4323663',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4323663',
+ badge: [],
+ },
+ },
+ {
+ id: 12480749,
+ body: 'His advisor probably thought that killing Japanese knotweed might be perceived as racist? Putting it on Facebook, eh? Oh yes, that viral branding stuff central office is always going on about.
',
+ date: '20 September 2011 10:44am',
+ isoDateTime: '2011-09-20T09:44:50Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12480749',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12480749',
+ numResponses: 0,
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2456210',
+ displayName: 'paulhs',
+ webUrl: 'https://profile.theguardian.com/user/id/2456210',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2456210',
+ avatar: 'https://avatar.guim.co.uk/user/2456210',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2456210',
+ badge: [],
+ },
+ },
+ {
+ id: 12482898,
+ body: "SteB1
To most of us, there is no story at all here, just a photo of a man pulling up some weeds and having a rant about them. My neighbours, colleagues, friends,... do the same thing every single weekend.
That's not really accurate is it?
Which bit isn't accurate?
It is a photo of a man pulling up weeds He did have a rant about them. And lots of people do the same thing every single weekend.
You don't explain exactly what you mean by vandalise his facebook page. We can't cross check this because he removed the thread, presumably to hide his embarrassment
How ironic!
So my comment, following on examples from above, is incorrect, whereas your \"presumption\" that he removed (some of) the comments because you allege he was embarrassed and wanted to hide this has some validity.
",
+ date: '20 September 2011 12:45pm',
+ isoDateTime: '2011-09-20T11:45:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12482898',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12482898',
+ numResponses: 0,
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '3699054',
+ displayName: 'NeverMindTheBollocks',
+ webUrl: 'https://profile.theguardian.com/user/id/3699054',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3699054',
+ avatar: 'https://avatar.guim.co.uk/user/3699054',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3699054',
+ badge: [],
+ },
+ },
+ {
+ id: 12483012,
+ body: 'Can we have a campaign against Japanese Knotweed. This stuff is a real pest and many people are unaware of the damage it causes, taking over whole areas of land, wiping out other plants.
Fortunately a few of us locally who know of the issue, spray and cut it down where we find it, helped by the local children who also have some fun trampling it down.
',
+ date: '20 September 2011 12:50pm',
+ isoDateTime: '2011-09-20T11:50:38Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12483012',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12483012',
+ numResponses: 0,
+ numRecommends: 2,
+ isHighlighted: false,
+ userProfile: {
+ userId: '3938636',
+ displayName: 'lxy001',
+ webUrl: 'https://profile.theguardian.com/user/id/3938636',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3938636',
+ avatar: 'https://avatar.guim.co.uk/user/3938636',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3938636',
+ badge: [],
+ },
+ },
+ {
+ id: 12491080,
+ body: "As a horse owner I would say o the minister and horse owners Ragwort seeding from joining fields have their own excellent law in the UK, that's what the act of parliament is about. but don't blame this when it isn't the solution, your own fields could have a seedbank from the years beyond. even then there is a good posibility to make this a lesser problem for new growth of ragwort. So taken care of your neighbours land doesn't mean allways your problem is over, covering every empty spot and reseeding with grass is a good working way to go. There are excellent ways to use spot on chemicals to spare any other plants. don't look for excuses, spend your energy in solutions!
When you blame only ragwort for all causes of liverproblems in horses, you taken a risk with the horses that stay behind, what if it is just one of many other causes or options you could treat. Knowledge could spare other animals, assumptions can let others die unnecessary. With ragwort there is a easy way out, don't let it go near a horse or other grazing animals, where it can be eaten!
",
+ date: '20 September 2011 9:55pm',
+ isoDateTime: '2011-09-20T20:55:45Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/12491080',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/12491080',
+ numResponses: 0,
+ numRecommends: 2,
+ isHighlighted: false,
+ userProfile: {
+ userId: '4741862',
+ displayName: 'EstherHegt',
+ webUrl: 'https://profile.theguardian.com/user/id/4741862',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/4741862',
+ avatar: 'https://avatar.guim.co.uk/user/4741862',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/4741862',
+ badge: [],
+ },
+ },
+ ],
+ },
+};
diff --git a/dotcom-rendering/fixtures/manual/noTopPicks.ts b/dotcom-rendering/fixtures/manual/noTopPicks.ts
new file mode 100644
index 00000000000..fd9a93ca71c
--- /dev/null
+++ b/dotcom-rendering/fixtures/manual/noTopPicks.ts
@@ -0,0 +1,19 @@
+export const noTopPicks = {
+ status: 'ok',
+ page: 1,
+ pages: 1,
+ pageSize: 50,
+ orderBy: 'oldest',
+ discussion: {
+ key: '/p/39f5z',
+ webUrl: 'https://www.theguardian.com/science/grrlscientist/2012/aug/07/3',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/discussion//p/39f5z',
+ commentCount: 496,
+ topLevelCommentCount: 405,
+ isClosedForComments: false,
+ isClosedForRecommendation: false,
+ isThreaded: true,
+ title: 'Mystery bird: black-and-red broadbill, Cymbirhynchus macrorhynchos story',
+ comments: [],
+ },
+};
diff --git a/dotcom-rendering/fixtures/manual/topPicks.ts b/dotcom-rendering/fixtures/manual/topPicks.ts
new file mode 100644
index 00000000000..6dc729de2f1
--- /dev/null
+++ b/dotcom-rendering/fixtures/manual/topPicks.ts
@@ -0,0 +1,68 @@
+export const topPicks = {
+ status: 'ok',
+ page: 1,
+ pages: 1,
+ pageSize: 50,
+ orderBy: 'oldest',
+ discussion: {
+ key: '/p/39f5z',
+ webUrl: 'https://www.theguardian.com/science/grrlscientist/2012/aug/07/3',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/discussion//p/39f5z',
+ commentCount: 496,
+ topLevelCommentCount: 405,
+ isClosedForComments: false,
+ isClosedForRecommendation: false,
+ isThreaded: true,
+ title: 'Mystery bird: black-and-red broadbill, Cymbirhynchus macrorhynchos story',
+ comments: [
+ {
+ id: 37678414,
+ body: 'This is how code
looks. And this is how strikethrough looks
strong
italic
blockquote
link to mydomain.com
And this is what get withareallyreallyreallylonglonglongwordthatissupersuperlonglikelonnnnngggggggggImeanreallylong
',
+ date: '02 July 2014 11:20am',
+ isoDateTime: '2014-07-02T10:20:56Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/37678414',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/37678414',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2310959',
+ displayName: 'jamesgorrie',
+ webUrl: 'https://profile.theguardian.com/user/id/2310959',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2310959',
+ avatar: 'https://avatar.guim.co.uk/user/2310959',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2310959',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ {
+ id: 37772513,
+ body: 'Lovely chickens! https://www.supersupersuperlongdomainnameImeanitneverstopsatallevereveritmakesyouwonderiftheremightbealimittothesethings.com
',
+ date: '04 July 2014 1:57pm',
+ isoDateTime: '2014-07-04T12:57:48Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/37772513',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/37772513',
+ numRecommends: 1,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2310959',
+ displayName: 'jamesgorrie',
+ webUrl: 'https://profile.theguardian.com/user/id/2310959',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2310959',
+ avatar: 'https://avatar.guim.co.uk/user/2310959',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2310959',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+ },
+ ],
+ },
+};
diff --git a/dotcom-rendering/fixtures/manual/trails.ts b/dotcom-rendering/fixtures/manual/trails.ts
index a6df1cfe974..8cc2343d63d 100644
--- a/dotcom-rendering/fixtures/manual/trails.ts
+++ b/dotcom-rendering/fixtures/manual/trails.ts
@@ -71,7 +71,7 @@ export const trails: [
kickerText: 'Kicker',
},
],
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -87,11 +87,25 @@ export const trails: [
design: ArticleDesign.Video,
display: ArticleDisplay.Standard,
},
- mediaType: 'Video',
- mediaDuration: 378,
dataLinkName: 'news | group-0 | card-@2',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: {
+ type: 'Video',
+ elementId: 'abcdef',
+ videoId: 'abcd',
+ title: 'some title',
+ duration: 378,
+ width: 480,
+ height: 288,
+ origin: 'The Guardian',
+ expired: false,
+ images: [
+ {
+ url: 'https://i.guim.co.uk/img/media/e060e9b7c92433b3dfeccc98b9206778cda8b8e8/0_180_6680_4009/master/6680.jpg?width=600&quality=45&dpr=2&s=none',
+ width: 600,
+ },
+ ],
+ },
isExternalLink: false,
showLivePlayable: false,
},
@@ -110,7 +124,7 @@ export const trails: [
kickerText: 'Live',
dataLinkName: 'news | group-0 | card-@3',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -128,7 +142,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@4',
showQuotedHeadline: true,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -146,7 +160,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@5',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -165,7 +179,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@6',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -185,7 +199,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@7',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -204,7 +218,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@8',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -225,7 +239,7 @@ export const trails: [
'UK Covid live: England lockdown to be eased in stages, says PM, amid reports of nationwide mass testing',
dataLinkName: 'news | group-0 | card-@9',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -245,7 +259,7 @@ export const trails: [
'UK to infect up to 90 healthy volunteers with Covid in world first trial',
dataLinkName: 'news | group-0 | card-@10',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -265,7 +279,7 @@ export const trails: [
'Scottish government inadequately prepared for Covid, says watchdog',
dataLinkName: 'news | group-0 | card-@11',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -285,7 +299,7 @@ export const trails: [
'‘Encouraging’ signs for Covid vaccine as over-80s deaths fall in England',
dataLinkName: 'news | group-0 | card-@12',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -305,7 +319,7 @@ export const trails: [
'Contact tracing alone has little impact on curbing Covid spread, report finds',
dataLinkName: 'news | group-0 | card-@1',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -325,7 +339,7 @@ export const trails: [
'Ethnicity and poverty are Covid risk factors, new Oxford modelling tool shows',
dataLinkName: 'news | group-0 | card-@13',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -345,7 +359,7 @@ export const trails: [
'UK Covid: 799 more deaths and 10,625 new cases reported; Scottish schools in phased return from Monday – as it happened',
dataLinkName: 'news | group-0 | card-@14',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -365,7 +379,7 @@ export const trails: [
'QCovid: how improved algorithm can identify more higher-risk adults',
dataLinkName: 'news | group-0 | card-@1',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -383,7 +397,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@15',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -402,7 +416,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@16',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -421,7 +435,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@17',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
@@ -440,7 +454,7 @@ export const trails: [
},
dataLinkName: 'news | group-0 | card-@18',
showQuotedHeadline: false,
- showMainVideo: false,
+ mainMedia: undefined,
isExternalLink: false,
showLivePlayable: false,
},
diff --git a/dotcom-rendering/index.d.ts b/dotcom-rendering/index.d.ts
index 2cc3669c7b1..feacf018066 100644
--- a/dotcom-rendering/index.d.ts
+++ b/dotcom-rendering/index.d.ts
@@ -277,27 +277,6 @@ interface FENavType {
type StageType = 'DEV' | 'CODE' | 'PROD';
-/**
- * BlocksRequest is the expected body format for POST requests made to /Blocks
- */
-interface FEBlocksRequest {
- blocks: Block[];
- format: FEFormat;
- host?: string;
- pageId: string;
- webTitle: string;
- ajaxUrl: string;
- isAdFreeUser: boolean;
- isSensitive: boolean;
- edition: string;
- section: string;
- sharedAdTargeting: Record;
- adUnit: string;
- videoDuration?: number;
- switches: { [key: string]: boolean };
- keywordIds: string;
-}
-
/**
* KeyEventsRequest is the expected body format for POST requests made to /KeyEvents
*/
@@ -307,7 +286,12 @@ interface FEKeyEventsRequest {
filterKeyEvents: boolean;
}
-type CardImageType = 'mainMedia' | 'avatar' | 'crossword' | 'slideshow';
+type CardImageType =
+ | 'picture'
+ | 'avatar'
+ | 'crossword'
+ | 'slideshow'
+ | 'video';
type SmallHeadlineSize =
| 'tiny'
diff --git a/dotcom-rendering/makefile b/dotcom-rendering/makefile
index a2c8c01ee64..dd4a8550c28 100644
--- a/dotcom-rendering/makefile
+++ b/dotcom-rendering/makefile
@@ -99,6 +99,12 @@ dev-debug: clear clean-dist install
$(call log, "Open chrome://inspect in Chrome to attach to the debugger")
@NODE_ENV=development NODE_OPTIONS="--inspect" webpack serve --config ./scripts/webpack/webpack.config.js
+# storybook #########################################
+
+storybook-dev: clear clean-dist install
+ $(call log, "starting Storybook DEV server")
+ yarn storybook
+
# tests #####################################
cypress: clear clean-dist install build
@@ -200,6 +206,7 @@ gen-schema:
@git add src/model/article-schema.json
@git add src/model/front-schema.json
@git add src/model/block-schema.json
+ @git add src/model/tag-front-schema.json
check-stories:
$(call log, "Checking Storybook stories")
diff --git a/dotcom-rendering/package.json b/dotcom-rendering/package.json
index 75d1adff5e1..55bc292dff2 100644
--- a/dotcom-rendering/package.json
+++ b/dotcom-rendering/package.json
@@ -39,7 +39,7 @@
},
"dependencies": {
"@aws-sdk/client-cloudwatch": "3.350.0",
- "@babel/core": "7.22.5",
+ "@babel/core": "7.22.6",
"@babel/helper-compilation-targets": "7.20.0",
"@babel/helper-create-regexp-features-plugin": "7.20.5",
"@babel/plugin-proposal-class-properties": "7.18.6",
@@ -49,7 +49,7 @@
"@babel/plugin-syntax-dynamic-import": "7.8.3",
"@babel/plugin-transform-react-jsx": "7.20.13",
"@babel/plugin-transform-runtime": "7.19.6",
- "@babel/preset-env": "7.20.2",
+ "@babel/preset-env": "7.22.6",
"@babel/preset-react": "7.18.6",
"@babel/preset-typescript": "7.18.6",
"@babel/runtime": "7.20.13",
@@ -57,32 +57,31 @@
"@creditkarma/thrift-server-core": "1.0.4",
"@cypress/skip-test": "2.6.1",
"@cypress/webpack-preprocessor": "5.17.1",
- "@emotion/babel-plugin": "11.10.5",
- "@emotion/cache": "11.10.5",
- "@emotion/react": "11.10.5",
- "@emotion/server": "11.10.0",
- "@guardian/ab-core": "4.0.0",
- "@guardian/atoms-rendering": "31.0.0",
+ "@emotion/babel-plugin": "11.11.0",
+ "@emotion/cache": "11.11.0",
+ "@emotion/react": "11.11.1",
+ "@emotion/server": "11.11.0",
+ "@guardian/ab-core": "5.0.0",
+ "@guardian/atoms-rendering": "32.2.0",
"@guardian/braze-components": "13.3.0",
"@guardian/bridget": "2.3.0",
"@guardian/browserslist-config": "5.0.0",
"@guardian/cdk": "49.5.0",
- "@guardian/commercial": "10.1.0",
+ "@guardian/commercial": "10.1.1",
"@guardian/consent-management-platform": "13.5.0",
- "@guardian/core-web-vitals": "4.0.0",
- "@guardian/discussion-rendering": "14.0.0",
- "@guardian/eslint-config": "3.0.0",
- "@guardian/eslint-config-typescript": "5.0.0",
- "@guardian/eslint-plugin-source-react-components": "14.0.0",
+ "@guardian/core-web-vitals": "5.0.0",
+ "@guardian/eslint-config": "4.1.0",
+ "@guardian/eslint-config-typescript": "6.0.1",
+ "@guardian/eslint-plugin-source-react-components": "17.0.0",
"@guardian/identity-auth": "0.1.2",
- "@guardian/libs": "14.1.0",
- "@guardian/prettier": "3.0.0",
+ "@guardian/libs": "15.1.0",
+ "@guardian/prettier": "4.0.0",
"@guardian/shimport": "1.0.2",
- "@guardian/source-foundations": "11.0.0",
- "@guardian/source-react-components": "14.0.2",
- "@guardian/source-react-components-development-kitchen": "11.0.0",
+ "@guardian/source-foundations": "12.0.0",
+ "@guardian/source-react-components": "15.0.1",
+ "@guardian/source-react-components-development-kitchen": "13.0.1",
"@guardian/support-dotcom-components": "1.0.7",
- "@guardian/tsconfig": "0.1.6",
+ "@guardian/tsconfig": "0.2.0",
"@percy/cli": "1.18.0",
"@percy/cypress": "3.1.2",
"@sentry/browser": "7.37.2",
@@ -94,7 +93,7 @@
"@storybook/core-events": "7.0.2",
"@storybook/react": "7.0.2",
"@storybook/react-webpack5": "7.0.2",
- "@storybook/testing-library": "0.0.14-next.2",
+ "@storybook/testing-library": "0.2.0",
"@storybook/theming": "7.0.10",
"@swc/cli": "0.1.62",
"@swc/core": "1.3.38",
@@ -117,12 +116,13 @@
"@types/he": "1.2.0",
"@types/html-minifier-terser": "7.0.0",
"@types/jest": "27.5.2",
- "@types/jsdom": "20.0.1",
+ "@types/jsdom": "21.1.1",
"@types/lodash": "4.14.191",
"@types/lodash.debounce": "4.0.7",
"@types/lodash.get": "4.4.7",
"@types/node": "18.16.18",
"@types/node-fetch": "2.6.2",
+ "@types/parse5": "7.0.0",
"@types/prop-types": "15.7.5",
"@types/qs": "6.9.7",
"@types/react": "18.2.0",
@@ -132,7 +132,7 @@
"@types/relateurl": "0.2.29",
"@types/response-time": "2.3.5",
"@types/rimraf": "3.0.2",
- "@types/sanitize-html": "2.8.0",
+ "@types/sanitize-html": "2.9.0",
"@types/scheduler": "0.16.2",
"@types/serve-static": "1.15.0",
"@types/testing-library__jest-dom": "5.14.5",
@@ -142,7 +142,7 @@
"@types/uuid": "8.3.4",
"@types/webpack-bundle-analyzer": "4.6.0",
"@types/webpack-env": "1.18.0",
- "@types/webpack-node-externals": "2.5.3",
+ "@types/webpack-node-externals": "3.0.0",
"@types/yarnpkg__lockfile": "1.1.5",
"@types/youtube": "0.0.46",
"@typescript-eslint/eslint-plugin": "5.52.0",
@@ -156,7 +156,6 @@
"aws-cdk-lib": "2.68.0",
"babel-core": "7.0.0-bridge.0",
"babel-loader": "8.3.0",
- "babel-plugin-module-resolver": "5.0.0",
"babel-plugin-polyfill-corejs3": "0.6.0",
"babel-plugin-px-to-rem": "https://github.com/guardian/babel-plugin-px-to-rem#v0.1.0",
"babel-plugin-transform-runtime": "6.23.0",
@@ -182,7 +181,7 @@
"eslint-config-airbnb-base": "15.0.0",
"eslint-config-airbnb-typescript": "17.0.0",
"eslint-config-prettier": "8.6.0",
- "eslint-import-resolver-babel-module": "5.3.2",
+ "eslint-import-resolver-typescript": "3.5.5",
"eslint-plugin-custom-elements": "0.0.8",
"eslint-plugin-cypress": "2.12.1",
"eslint-plugin-import": "2.26.0",
@@ -205,7 +204,7 @@
"jest": "29.5.0",
"jest-environment-jsdom": "29.5.0",
"jest-teamcity-reporter": "0.9.0",
- "jsdom": "20.0.3",
+ "jsdom": "22.1.0",
"lint-staged": "13.2.1",
"load-json-file": "6.2.0",
"lodash": "4.17.21",
@@ -239,7 +238,7 @@
"require-from-string": "2.0.2",
"response-time": "2.3.2",
"rimraf": "3.0.2",
- "sanitize-html": "2.9.0",
+ "sanitize-html": "2.11.0",
"scheduler": "0.23.0",
"screenfull": "5.2.0",
"serve-static": "1.15.0",
@@ -262,8 +261,9 @@
"trusted-types": "2.0.0",
"ts-loader": "9.4.3",
"ts-unused-exports": "8.0.5",
- "tslib": "2.5.0",
- "typescript-json-schema": "0.54.0",
+ "tslib": "2.5.3",
+ "type-fest": "3.12.0",
+ "typescript-json-schema": "0.58.1",
"unified": "10.1.2",
"uuid": "8.3.2",
"web-vitals": "3.1.1",
diff --git a/dotcom-rendering/scripts/webpack/webpack.config.server.js b/dotcom-rendering/scripts/webpack/webpack.config.server.js
index cb893e79d0a..5e67816890d 100644
--- a/dotcom-rendering/scripts/webpack/webpack.config.server.js
+++ b/dotcom-rendering/scripts/webpack/webpack.config.server.js
@@ -39,6 +39,8 @@ module.exports = ({ sessionId }) => ({
runtimeChunk: false,
},
externals: [
+ // @ts-expect-error - webpack-node-externals types are incorrect
+ // https://github.com/liady/webpack-node-externals/issues/105
...(DEV
? [
nodeExternals({
@@ -55,17 +57,20 @@ module.exports = ({ sessionId }) => ({
: []),
// @aws-sdk modules are only used in CODE/PROD, so we don't need to
// include them in the development bundle
+ // @ts-expect-error - webpack-node-externals types are incorrect:
({ request }, callback) => {
return process.env.NODE_ENV === 'development' &&
request?.startsWith('@aws-sdk')
? callback(undefined, `commonjs ${request}`)
: callback();
},
+ // @ts-expect-error - webpack-node-externals types are incorrect
({ request }, callback) => {
return request?.endsWith('manifest.json')
? callback(undefined, `commonjs ${request}`)
: callback();
},
+ // @ts-expect-error - webpack-node-externals types are incorrect
({ request }, callback) => {
return request?.endsWith('manifest.legacy.json')
? callback(undefined, `commonjs ${request}`)
diff --git a/dotcom-rendering/src/client/ophan/index.ts b/dotcom-rendering/src/client/ophan/index.ts
index d8a2a79cb08..e1ace2af389 100644
--- a/dotcom-rendering/src/client/ophan/index.ts
+++ b/dotcom-rendering/src/client/ophan/index.ts
@@ -20,7 +20,6 @@ export const ophan = (): Promise => {
complete: false,
};
});
- console.log('🍊', abTestRegister);
record({ abTestRegister });
}
diff --git a/dotcom-rendering/src/components/ArticleBody.tsx b/dotcom-rendering/src/components/ArticleBody.tsx
index 797004a8fe1..2d7e127e4ad 100644
--- a/dotcom-rendering/src/components/ArticleBody.tsx
+++ b/dotcom-rendering/src/components/ArticleBody.tsx
@@ -20,7 +20,6 @@ type Props = {
format: ArticleFormat;
blocks: Block[];
pinnedPost?: Block;
- adTargeting: AdTargeting;
host?: string;
pageId: string;
webTitle: string;
@@ -123,7 +122,6 @@ export const ArticleBody = ({
format,
blocks,
pinnedPost,
- adTargeting,
host,
pageId,
webTitle,
@@ -183,7 +181,6 @@ export const ArticleBody = ({
format={format}
blocks={blocks}
pinnedPost={pinnedPost}
- adTargeting={adTargeting}
host={host}
pageId={pageId}
webTitle={webTitle}
@@ -239,7 +236,6 @@ export const ArticleBody = ({
{
const { article, format, renderingTarget } = props;
+
+ const adTargeting = buildAdTargeting({
+ isAdFreeUser: article.isAdFreeUser,
+ isSensitive: article.config.isSensitive,
+ edition: article.config.edition,
+ section: article.config.section,
+ sharedAdTargeting: article.config.sharedAdTargeting,
+ adUnit: article.config.adUnit,
+ });
+
return (
{
isDev={!!article.config.isDev}
/>
+
+
+
>
)}
{renderingTarget === 'Apps' ? (
diff --git a/dotcom-rendering/src/components/AustralianTerritorySwitcher.importable.stories.tsx b/dotcom-rendering/src/components/AustralianTerritorySwitcher.importable.stories.tsx
index f9325dd23d2..a4ef8986efe 100644
--- a/dotcom-rendering/src/components/AustralianTerritorySwitcher.importable.stories.tsx
+++ b/dotcom-rendering/src/components/AustralianTerritorySwitcher.importable.stories.tsx
@@ -18,8 +18,8 @@ export const Queensland = () => (
* Clicks the “Not in Queensland” button so that Chromatic can capture
* it the component in its `expanded` state.
*/
-Queensland.play = ({ canvasElement }: { canvasElement: HTMLElement }) => {
+Queensland.play = async ({ canvasElement }: { canvasElement: HTMLElement }) => {
const canvas = within(canvasElement);
- userEvent.click(canvas.getByRole('button'));
+ await userEvent.click(canvas.getByRole('button'));
};
Queensland.storyName = 'Queensland (expanded)';
diff --git a/dotcom-rendering/src/components/Card/Card.stories.tsx b/dotcom-rendering/src/components/Card/Card.stories.tsx
index eabc96330ae..ee14c5bfcdb 100644
--- a/dotcom-rendering/src/components/Card/Card.stories.tsx
+++ b/dotcom-rendering/src/components/Card/Card.stories.tsx
@@ -7,6 +7,7 @@ import {
} from '@guardian/libs';
import { from } from '@guardian/source-foundations';
import React from 'react';
+import type { MainMedia } from '../../types/mainMedia';
import { Section } from '../Section';
import type { Props as CardProps } from './Card';
import { Card } from './Card';
@@ -25,12 +26,13 @@ const basicCardProps: CardProps = {
'The 29-year-old source behind the biggest intelligence leak in the NSA’s history explains his motives',
headlineSize: 'medium',
kickerText: '',
- webPublicationDate: '2019-11-11T09:45:30.000Z',
+ webPublicationDate: new Date(Date.now() - 60 * 60 * 1000).toString(),
imageUrl:
'https://media.guim.co.uk/6537e163c9164d25ec6102641f6a04fa5ba76560/0_210_5472_3283/master/5472.jpg',
imagePosition: 'top',
showAge: true,
isExternalLink: false,
+ videoSize: 'large enough to play: at least 480px',
};
const aBasicLink = {
@@ -43,6 +45,31 @@ const aBasicLink = {
},
};
+const mainVideo: MainMedia = {
+ type: 'Video',
+ elementId: '1234-abcdef-09876-xyz',
+ videoId: '8M_yH-e9cq8',
+ title: '’I care, but I don’t care’: Life after the Queen’s death | Anywhere but Westminster',
+ expired: false,
+ duration: 200,
+ images: [480, 640, 960, 1024, 1200].map((width) => ({
+ url: `https://i.guim.co.uk/img/media/2eb01d138eb8fba6e59ce7589a60e3ff984f6a7a/0_0_1920_1080/1920.jpg?width=${width}&quality=45&dpr=2&s=none`,
+ width,
+ })),
+ width: 480,
+ height: 288,
+ origin: 'The Guardian',
+};
+
+const mainAudio: MainMedia = {
+ type: 'Audio',
+ duration: 24,
+};
+
+const mainGallery: MainMedia = {
+ type: 'Gallery',
+};
+
const CardWrapper = ({ children }: { children: React.ReactNode }) => {
return (
{
design: ArticleDesign.Video,
theme: ArticlePillar.Sport,
}}
- mediaType="Video"
- mediaDuration={30}
+ mainMedia={{ ...mainVideo, duration: 30 }}
headlineText="Video"
/>
@@ -258,8 +284,7 @@ export const WithMediaType = () => {
design: ArticleDesign.Audio,
theme: ArticlePillar.Sport,
}}
- mediaType="Audio"
- mediaDuration={90}
+ mainMedia={mainAudio}
headlineText="Audio"
/>
@@ -271,7 +296,7 @@ export const WithMediaType = () => {
design: ArticleDesign.Gallery,
theme: ArticlePillar.Sport,
}}
- mediaType="Gallery"
+ mainMedia={mainGallery}
headlineText="Gallery"
/>
@@ -290,8 +315,7 @@ export const WithMediaTypeSpecialReportAlt = () => {
design: ArticleDesign.Video,
theme: ArticleSpecial.SpecialReportAlt,
}}
- mediaType="Video"
- mediaDuration={30}
+ mainMedia={{ ...mainVideo, duration: 30 }}
headlineText="Video"
/>
@@ -303,8 +327,7 @@ export const WithMediaTypeSpecialReportAlt = () => {
design: ArticleDesign.Audio,
theme: ArticleSpecial.SpecialReportAlt,
}}
- mediaType="Audio"
- mediaDuration={90}
+ mainMedia={{ ...mainAudio, duration: 90 }}
headlineText="Audio"
/>
@@ -316,7 +339,7 @@ export const WithMediaTypeSpecialReportAlt = () => {
design: ArticleDesign.Gallery,
theme: ArticleSpecial.SpecialReportAlt,
}}
- mediaType="Gallery"
+ mainMedia={mainGallery}
headlineText="Gallery"
/>
@@ -416,7 +439,6 @@ export const WithPulsingDotSpecialReportAlt = () => {
theme: ArticleSpecial.SpecialReportAlt,
}}
showPulsingDot={true}
- kickerText="Pulsing Dot"
/>
);
@@ -918,9 +940,7 @@ export const WhenVideoWithPlayButton = () => {
imagePosition="top"
imageSize="jumbo"
imagePositionOnMobile="top"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
/>
@@ -936,9 +956,7 @@ export const WhenVideoWithPlayButton = () => {
imagePosition="right"
imageSize="large"
imagePositionOnMobile="top"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
/>
@@ -950,9 +968,8 @@ export const WhenVideoWithPlayButton = () => {
theme: ArticlePillar.News,
}}
imagePosition="top"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
+ videoSize="too small to play: 479px or less"
/>
@@ -968,9 +985,7 @@ export const WhenVideoWithPlayButton = () => {
imagePosition="top"
imageSize="medium"
imagePositionOnMobile="bottom"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
/>
@@ -984,9 +999,8 @@ export const WhenVideoWithPlayButton = () => {
theme: ArticlePillar.News,
}}
imagePosition="left"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
+ videoSize="too small to play: 479px or less"
/>
@@ -998,9 +1012,8 @@ export const WhenVideoWithPlayButton = () => {
theme: ArticlePillar.News,
}}
imagePosition="right"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
+ videoSize="too small to play: 479px or less"
/>
@@ -1013,9 +1026,8 @@ export const WhenVideoWithPlayButton = () => {
theme: ArticlePillar.News,
}}
imagePosition="right"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
+ videoSize="too small to play: 479px or less"
/>
@@ -1034,9 +1046,7 @@ export const WhenVideoWithPlayButton = () => {
imagePosition="right"
imageSize="large"
imagePositionOnMobile="top"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
/>
@@ -1050,9 +1060,7 @@ export const WhenVideoWithPlayButton = () => {
imagePosition="top"
imagePositionOnMobile="left"
imageSize="medium"
- mediaDuration={200}
- mediaType="Video"
- showMainVideo={true}
+ mainMedia={mainVideo}
/>
diff --git a/dotcom-rendering/src/components/Card/Card.tsx b/dotcom-rendering/src/components/Card/Card.tsx
index 33bddb33a58..6a79f9da30f 100644
--- a/dotcom-rendering/src/components/Card/Card.tsx
+++ b/dotcom-rendering/src/components/Card/Card.tsx
@@ -13,6 +13,7 @@ import type {
DCRSnapType,
DCRSupportingContent,
} from '../../types/front';
+import type { MainMedia } from '../../types/mainMedia';
import type { Palette } from '../../types/palette';
import { Avatar } from '../Avatar';
import { CardHeadline } from '../CardHeadline';
@@ -20,6 +21,7 @@ import { CardPicture } from '../CardPicture';
import { Hide } from '../Hide';
import { Island } from '../Island';
import { LatestLinks } from '../LatestLinks.importable';
+import { MediaDuration } from '../MediaDuration';
import { MediaMeta } from '../MediaMeta';
import { Slideshow } from '../Slideshow';
import { Snap } from '../Snap';
@@ -27,6 +29,7 @@ import { SnapCssSandbox } from '../SnapCssSandbox';
import { StarRating } from '../StarRating/StarRating';
import type { Alignment } from '../SupportingContent';
import { SupportingContent } from '../SupportingContent';
+import { YoutubeBlockComponent } from '../YoutubeBlockComponent.importable';
import { AvatarContainer } from './components/AvatarContainer';
import { CardAge } from './components/CardAge';
import { CardBranding } from './components/CardBranding';
@@ -43,6 +46,11 @@ import type {
import { ImageWrapper } from './components/ImageWrapper';
import { TrailTextWrapper } from './components/TrailTextWrapper';
+/** Note YouTube recommends a minimum width of 480px @see https://developers.google.com/youtube/terms/required-minimum-functionality#embedded-youtube-player-size */
+export type VideoSize =
+ | 'large enough to play: at least 480px'
+ | 'too small to play: 479px or less';
+
export type Props = {
linkTo: string;
format: ArticleFormat;
@@ -62,9 +70,8 @@ export type Props = {
trailText?: string;
avatarUrl?: string;
showClock?: boolean;
- mediaType?: MediaType;
- mediaDuration?: number;
- showMainVideo?: boolean;
+ mainMedia?: MainMedia;
+ videoSize: VideoSize;
kickerText?: string;
showPulsingDot?: boolean;
starRating?: number;
@@ -87,19 +94,6 @@ export type Props = {
showLivePlayable?: boolean;
};
-const getMediaType = (
- design: ArticleDesign.Gallery | ArticleDesign.Audio | ArticleDesign.Video,
-) => {
- switch (design) {
- case ArticleDesign.Gallery:
- return 'Gallery';
- case ArticleDesign.Audio:
- return 'Audio';
- case ArticleDesign.Video:
- return 'Video';
- }
-};
-
const StarRatingComponent = ({
rating,
cardHasImage,
@@ -137,46 +131,22 @@ const StarRatingComponent = ({
* about the container where the card sits.
*
*/
-const decideIfAgeShouldShow = ({
- showLivePlayable,
- containerPalette,
- format,
- showAge,
-}: {
- showLivePlayable: boolean;
- containerPalette?: DCRContainerPalette;
- format: ArticleFormat;
- showAge: boolean;
-}): boolean => {
- if (showLivePlayable) return false;
- // Some containers force all cards to show age. E.g., The articles in the headlines
- // container are typically very recent so we want to display age there
- if (showAge) return true;
- // Palettes are time sensitive so show age if one is being used
- if (containerPalette) return true;
- // Liveblogs are evidently time sensitive
- if (format.design === ArticleDesign.LiveBlog) return true;
- // Otherwise, do not show the article age on the Card
- return false;
-};
type RenderFooter = ({
- displayAge,
displayLines,
}: {
- displayAge: boolean;
displayLines: boolean;
}) => JSX.Element;
const DecideFooter = ({
isOpinion,
hasSublinks,
- displayAge,
+
renderFooter,
}: {
isOpinion: boolean;
hasSublinks?: boolean;
- displayAge: boolean;
+
renderFooter: RenderFooter;
}) => {
if (isOpinion && !hasSublinks) {
@@ -187,7 +157,6 @@ const DecideFooter = ({
// For all other cases (including opinion cards that *do* have sublinks) we
// render a version of the footer without lines here
return renderFooter({
- displayAge,
displayLines: false,
});
// Note. Opinion cards always show the lines at the bottom of the card (in CommentFooter)
@@ -196,12 +165,12 @@ const DecideFooter = ({
const CommentFooter = ({
hasSublinks,
palette,
- displayAge,
+
renderFooter,
}: {
hasSublinks?: boolean;
palette: Palette;
- displayAge: boolean;
+
renderFooter: RenderFooter;
}) => {
return hasSublinks ? (
@@ -212,34 +181,38 @@ const CommentFooter = ({
// When an opinion card has no sublinks we show the entire footer, including lines
// outside, along the entire bottom of the card
renderFooter({
- displayAge,
displayLines: true,
})
);
};
-const getImage = ({
+const getMedia = ({
imageUrl,
avatarUrl,
isCrossword,
slideshowImages,
+ mainMedia,
+ videoSize,
}: {
imageUrl?: string;
avatarUrl?: string;
isCrossword?: boolean;
slideshowImages?: DCRSlideshowImage[];
-}):
- | {
- type: CardImageType;
- src: string;
- slideshowImages?: DCRSlideshowImage[];
- }
- | undefined => {
- if (slideshowImages) return { type: 'slideshow', src: '', slideshowImages };
- if (avatarUrl) return { type: 'avatar', src: avatarUrl };
+ mainMedia?: MainMedia;
+ videoSize: VideoSize;
+}) => {
+ if (
+ mainMedia &&
+ mainMedia.type === 'Video' &&
+ videoSize === 'large enough to play: at least 480px'
+ ) {
+ return { type: 'video', mainMedia } as const;
+ }
+ if (slideshowImages) return { type: 'slideshow', slideshowImages } as const;
+ if (avatarUrl) return { type: 'avatar', avatarUrl } as const;
if (imageUrl) {
- const type = isCrossword ? 'crossword' : 'mainMedia';
- return { type, src: imageUrl };
+ const type = isCrossword ? 'crossword' : 'picture';
+ return { type, imageUrl } as const;
}
return undefined;
};
@@ -258,6 +231,14 @@ const decideSublinkPosition = (
return alignment === 'vertical' ? 'inner' : 'outer';
};
+const isWithinTwelveHours = (webPublicationDate: string): boolean => {
+ const timeDiffMs = Math.abs(
+ new Date().getTime() - new Date(webPublicationDate).getTime(),
+ );
+ const timeDiffHours = timeDiffMs / (1000 * 60 * 60);
+ return timeDiffHours <= 12;
+};
+
export const Card = ({
linkTo,
format,
@@ -275,8 +256,8 @@ export const Card = ({
trailText,
avatarUrl,
showClock,
- mediaDuration,
- showMainVideo,
+ mainMedia,
+ videoSize,
kickerText,
showPulsingDot,
starRating,
@@ -288,7 +269,7 @@ export const Card = ({
snapData,
containerPalette,
containerType,
- showAge = false,
+ showAge = true,
discussionId,
isDynamo,
isCrossword,
@@ -312,13 +293,7 @@ export const Card = ({
format.design === ArticleDesign.Editorial ||
format.design === ArticleDesign.Letter;
- const renderFooter = ({
- displayAge,
- displayLines,
- }: {
- displayAge?: boolean;
- displayLines?: boolean;
- }) => {
+ const renderFooter = ({ displayLines }: { displayLines?: boolean }) => {
if (showLivePlayable) return <>>;
return (
@@ -388,13 +358,18 @@ export const Card = ({
);
}
- const image = getImage({
+ const showPlayIcon =
+ mainMedia?.type === 'Video' &&
+ videoSize === 'too small to play: 479px or less';
+
+ const media = getMedia({
imageUrl,
avatarUrl,
isCrossword,
slideshowImages,
+ mainMedia,
+ videoSize,
});
-
return (
- {image && (
+ {media && (
- {image.type === 'slideshow' &&
- image.slideshowImages && (
-
- )}
- {image.type === 'avatar' && (
+ {media.type === 'slideshow' && (
+
+ )}
+ {media.type === 'avatar' && (
)}
- {image.type === 'mainMedia' && (
-
+ {media.type === 'video' && (
+
+
+
+
+
)}
- {image.type === 'crossword' && (
-
+ {media.type === 'picture' && (
+ <>
+
+ {showPlayIcon && (
+
+ )}
+ >
+ )}
+ {media.type === 'crossword' && (
+
)}
)}
@@ -473,7 +489,8 @@ export const Card = ({
sizeOnMobile={headlineSizeOnMobile}
showQuotes={showQuotes}
kickerText={
- format.design === ArticleDesign.LiveBlog
+ format.design === ArticleDesign.LiveBlog &&
+ !kickerText
? 'Live'
: kickerText
}
@@ -492,17 +509,19 @@ export const Card = ({
cardHasImage={imageUrl !== undefined}
/>
) : null}
- {format.design === ArticleDesign.Gallery ||
- format.design === ArticleDesign.Audio ||
- format.design === ArticleDesign.Video ? (
+ {!!mainMedia && mainMedia.type !== 'Video' && (
- ) : undefined}
+ )}
{/* This div is needed to push this content to the bottom of the card */}
@@ -512,7 +531,7 @@ export const Card = ({
format={format}
imagePosition={imagePosition}
imageSize={imageSize}
- imageType={image?.type}
+ imageType={media?.type}
>
{hasSublinks && sublinkPosition === 'inner' ? (
@@ -567,7 +585,6 @@ export const Card = ({
{isOpinion && !isDynamo && (
diff --git a/dotcom-rendering/src/components/Card/components/ImageWrapper.tsx b/dotcom-rendering/src/components/Card/components/ImageWrapper.tsx
index 9dd3ed5e986..749d7b4e91f 100644
--- a/dotcom-rendering/src/components/Card/components/ImageWrapper.tsx
+++ b/dotcom-rendering/src/components/Card/components/ImageWrapper.tsx
@@ -72,7 +72,7 @@ export const ImageWrapper = ({
flexBasisStyles({
imageSize,
}),
- imageType === 'mainMedia' &&
+ (imageType === 'picture' || imageType === 'video') &&
isHorizontal &&
flexBasisStyles({
imageSize,
@@ -123,10 +123,10 @@ export const ImageWrapper = ({
<>
{children}
{/* This image overlay is styled when the CardLink is hovered */}
- {(imageType === 'mainMedia' || imageType === 'slideshow') && (
+ {(imageType === 'picture' || imageType === 'slideshow') && (
)}
- {imageType === 'mainMedia' && showPlayIcon && (
+ {imageType === 'picture' && showPlayIcon && (
;
const iconWrapperStyles = css`
display: flex; /* Fixes the div mis-sizing itself */
position: absolute;
- bottom: 4px;
- left: 4px;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
`;
const iconStyles = (
size: PlayButtonSize,
sizeOnMobile: Extract,
) => css`
- background-color: ${brandAlt[400]};
+ background-color: rgba(18, 18, 18, 0.6);
border-radius: 50%;
width: ${sizes[sizeOnMobile].button}px;
height: ${sizes[sizeOnMobile].button}px;
@@ -38,6 +39,7 @@ const iconStyles = (
svg {
/* Visual centering */
+ fill: ${palette.neutral[100]};
transform: translateX(1px);
width: ${sizes[sizeOnMobile].icon}px;
height: ${sizes[sizeOnMobile].icon}px;
diff --git a/dotcom-rendering/src/components/Carousel.importable.tsx b/dotcom-rendering/src/components/Carousel.importable.tsx
index b7b2407f566..26927a3d2a1 100644
--- a/dotcom-rendering/src/components/Carousel.importable.tsx
+++ b/dotcom-rendering/src/components/Carousel.importable.tsx
@@ -18,6 +18,7 @@ import { getSourceImageUrl } from '../lib/getSourceImageUrl_temp_fix';
import { getZIndex } from '../lib/getZIndex';
import type { Branding } from '../types/branding';
import type { DCRContainerPalette } from '../types/front';
+import type { MainMedia } from '../types/mainMedia';
import type { OnwardsSource } from '../types/onwards';
import type { TrailType } from '../types/trails';
import { Card } from './Card/Card';
@@ -363,13 +364,9 @@ const titleStyle = (
const getDataLinkNameCarouselButton = (
direction: string,
arrowName: string,
- collectionType?: string,
+ isVideoContainer: boolean,
): string => {
- return `${
- collectionType && collectionType === 'fixed/video'
- ? 'video-container'
- : arrowName
- }-${direction}`;
+ return `${isVideoContainer ? 'video-container' : arrowName}-${direction}`;
};
const Title = ({
@@ -431,8 +428,7 @@ type CarouselCardProps = {
discussionId?: string;
/** Only used on Labs cards */
branding?: Branding;
- showMainVideo?: boolean;
- mediaDuration?: number;
+ mainMedia?: MainMedia;
verticalDividerColour?: string;
};
@@ -447,8 +443,7 @@ const CarouselCard = ({
dataLinkName,
discussionId,
branding,
- showMainVideo,
- mediaDuration,
+ mainMedia,
verticalDividerColour,
}: CarouselCardProps) => (
);
@@ -600,6 +595,9 @@ export const Carousel = ({
const isCuratedContent = onwardsSource === 'curated-content';
+ const isVideoContainer =
+ 'collectionType' in props && props.collectionType === 'fixed/video';
+
const notPresentation = (el: HTMLElement): boolean =>
el.getAttribute('role') !== 'presentation';
@@ -701,12 +699,7 @@ export const Carousel = ({
@@ -778,9 +771,9 @@ export const Carousel = ({
),
]}
data-link-name={getDataLinkNameCarouselButton(
- heading,
'next',
arrowName,
+ isVideoContainer,
)}
>
@@ -824,9 +817,9 @@ export const Carousel = ({
),
]}
data-link-name={getDataLinkNameCarouselButton(
- heading,
'prev',
arrowName,
+ isVideoContainer,
)}
>
@@ -850,9 +843,9 @@ export const Carousel = ({
),
]}
data-link-name={getDataLinkNameCarouselButton(
- heading,
'next',
arrowName,
+ isVideoContainer,
)}
>
@@ -876,6 +869,7 @@ export const Carousel = ({
kickerText,
branding,
discussion,
+ mainMedia,
} = trail;
// Don't try to render cards that have no publication date. This property is technically optional
@@ -901,8 +895,7 @@ export const Carousel = ({
: undefined
}
branding={branding}
- showMainVideo={trail.showMainVideo}
- mediaDuration={trail.mediaDuration}
+ mainMedia={mainMedia}
verticalDividerColour={
carouselColours.borderColour
}
diff --git a/dotcom-rendering/src/components/Carousel.stories.tsx b/dotcom-rendering/src/components/Carousel.stories.tsx
index 2a3a076cbcd..ebf3bd311ea 100644
--- a/dotcom-rendering/src/components/Carousel.stories.tsx
+++ b/dotcom-rendering/src/components/Carousel.stories.tsx
@@ -49,7 +49,7 @@ const trails: TrailType[] = [
theme: ArticlePillar.News,
design: ArticleDesign.LiveBlog,
},
- webPublicationDate: '2021-02-17T12:45:05.000Z',
+ webPublicationDate: new Date(Date.now() - 60 * 60 * 1000).toString(),
headline:
'UK Covid live: England lockdown to be eased in stages, says PM, amid reports of nationwide mass testing',
shortUrl: 'https://gu.com/p/gekj6',
@@ -68,7 +68,7 @@ const trails: TrailType[] = [
theme: ArticlePillar.News,
design: ArticleDesign.Standard,
},
- webPublicationDate: '2021-02-17T10:03:02.000Z',
+ webPublicationDate: new Date(Date.now() - 60 * 60 * 1000).toString(),
headline:
'UK to infect up to 90 healthy volunteers with Covid in world first trial',
shortUrl: 'https://gu.com/p/gey5n',
diff --git a/dotcom-rendering/src/components/DecideContainer.tsx b/dotcom-rendering/src/components/DecideContainer.tsx
index fbfd6025a8b..66889a8cedc 100644
--- a/dotcom-rendering/src/components/DecideContainer.tsx
+++ b/dotcom-rendering/src/components/DecideContainer.tsx
@@ -68,7 +68,6 @@ export const DecideContainer = ({
showAge={showAge}
adIndex={adIndex}
renderAds={renderAds}
- trails={trails}
/>
);
case 'dynamic/package':
diff --git a/dotcom-rendering/src/components/DecideContainerByTrails.stories.tsx b/dotcom-rendering/src/components/DecideContainerByTrails.stories.tsx
new file mode 100644
index 00000000000..b0b49b3a477
--- /dev/null
+++ b/dotcom-rendering/src/components/DecideContainerByTrails.stories.tsx
@@ -0,0 +1,188 @@
+import { breakpoints } from '@guardian/source-foundations';
+import { trails } from '../../fixtures/manual/trails';
+import { DecideContainerByTrails } from './DecideContainerByTrails';
+import { FrontSection } from './FrontSection';
+
+export default {
+ component: DecideContainerByTrails,
+ title: 'Components/DecideContainerByTrails',
+ parameters: {
+ chromatic: {
+ viewports: [
+ breakpoints.mobile,
+ breakpoints.tablet,
+ breakpoints.wide,
+ ],
+ },
+ },
+};
+
+export const OneCardFast = () => {
+ return (
+
+
+
+ );
+};
+OneCardFast.storyName = 'Fast - One card';
+
+export const TwoCardFast = () => {
+ return (
+
+
+
+ );
+};
+TwoCardFast.storyName = 'Fast - Two cards';
+
+export const ThreeCardFast = () => {
+ return (
+
+
+
+ );
+};
+ThreeCardFast.storyName = 'Fast - Three cards';
+
+export const FourCardFast = () => {
+ return (
+
+
+
+ );
+};
+FourCardFast.storyName = 'Fast - Four cards';
+
+export const FiveCardFast = () => {
+ return (
+
+
+
+ );
+};
+FiveCardFast.storyName = 'Fast - Five cards';
+
+export const SixCardFast = () => {
+ return (
+
+
+
+ );
+};
+SixCardFast.storyName = 'Fast - Six cards';
+
+export const SevenCardFast = () => {
+ return (
+
+
+
+ );
+};
+SevenCardFast.storyName = 'Fast - Seven cards';
+
+export const EightCardFast = () => {
+ return (
+
+
+
+ );
+};
+
+EightCardFast.storyName = 'Fast - Eight cards';
+
+export const TwelveCardFast = () => {
+ return (
+
+
+
+ );
+};
+TwelveCardFast.storyName = 'Fast - Twelve cards';
+
+export const OneCardSlow = () => {
+ return (
+
+
+
+ );
+};
+OneCardSlow.storyName = 'Slow - One card';
+
+export const TwoCardSlow = () => {
+ return (
+
+
+
+ );
+};
+TwoCardSlow.storyName = 'Slow - Two cards';
+
+export const ThreeCardSlow = () => {
+ return (
+
+
+
+ );
+};
+ThreeCardSlow.storyName = 'Slow - Three cards';
+
+export const FourCardSlow = () => {
+ return (
+
+
+
+ );
+};
+FourCardSlow.storyName = 'Slow - Four cards';
+
+export const FiveCardSlow = () => {
+ return (
+
+
+
+ );
+};
+FiveCardSlow.storyName = 'Slow - Five cards';
+
+export const SixCardSlow = () => {
+ return (
+
+
+
+ );
+};
+SixCardSlow.storyName = 'Slow - Six cards';
+
+export const SevenCardSlow = () => {
+ return (
+
+
+
+ );
+};
+SevenCardSlow.storyName = 'Slow - Seven cards';
+
+export const EightCardSlow = () => {
+ return (
+
+
+
+ );
+};
+
+EightCardSlow.storyName = 'Slow - Eight cards';
+
+export const TwelveCardSlow = () => {
+ return (
+
+
+
+ );
+};
+TwelveCardSlow.storyName = 'Slow - Twelve cards';
diff --git a/dotcom-rendering/src/components/DecideContainerByTrails.tsx b/dotcom-rendering/src/components/DecideContainerByTrails.tsx
index 12a3cb1cd78..7ea8691ae52 100644
--- a/dotcom-rendering/src/components/DecideContainerByTrails.tsx
+++ b/dotcom-rendering/src/components/DecideContainerByTrails.tsx
@@ -1,10 +1,13 @@
import {
Card100Media50,
+ Card100Media75,
Card25Media25,
Card33Media33,
Card50Media50,
CardDefault,
} from '../lib/cardWrappers';
+import type { Tuple } from '../lib/tuple';
+import { takeFirst } from '../lib/tuple';
import type { DCRFrontCard } from '../types/front';
import { LI } from './Card/components/LI';
import { UL } from './Card/components/UL';
@@ -24,8 +27,17 @@ export const OneCardFast = ({ trail }: { trail: DCRFrontCard }) => {
);
};
-export const TwoCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
- if (!trails[0] || !trails[1]) return <>>;
+export const OneCardSlow = ({ trail }: { trail: DCRFrontCard }) => {
+ return (
+
+ );
+};
+
+export const TwoCard = ({ trails }: { trails: Tuple }) => {
return (
@@ -38,8 +50,7 @@ export const TwoCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
);
};
-export const ThreeCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
- if (!trails[0] || !trails[1] || !trails[2]) return <>>;
+export const ThreeCard = ({ trails }: { trails: Tuple }) => {
return (
@@ -55,8 +66,7 @@ export const ThreeCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
);
};
-export const FourCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
- if (!trails[0] || !trails[1] || !trails[2] || !trails[3]) return <>>;
+export const FourCard = ({ trails }: { trails: Tuple }) => {
return (
@@ -75,9 +85,11 @@ export const FourCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
);
};
-export const FiveCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
- if (!trails[0] || !trails[1] || !trails[2] || !trails[3] || !trails[4])
- return <>>;
+export const FiveCardFast = ({
+ trails,
+}: {
+ trails: Tuple;
+}) => {
return (
@@ -103,17 +115,37 @@ export const FiveCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
);
};
-export const SixCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
- if (
- !trails[0] ||
- !trails[1] ||
- !trails[2] ||
- !trails[3] ||
- !trails[4] ||
- !trails[5]
- )
- return <>>;
+export const FiveCardSlow = ({
+ trails,
+}: {
+ trails: Tuple;
+}) => {
+ return (
+ <>
+
+
+ >
+ );
+};
+export const SixCardFast = ({ trails }: { trails: Tuple }) => {
return (
<>
@@ -141,18 +173,41 @@ export const SixCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
>
);
};
-export const SevenCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
- if (
- !trails[0] ||
- !trails[1] ||
- !trails[2] ||
- !trails[3] ||
- !trails[4] ||
- !trails[5] ||
- !trails[6]
- )
- return <>>;
+export const SixCardSlow = ({ trails }: { trails: Tuple }) => {
+ return (
+ <>
+
+
+ >
+ );
+};
+
+export const SevenCardFast = ({
+ trails,
+}: {
+ trails: Tuple;
+}) => {
return (
<>
@@ -184,18 +239,48 @@ export const SevenCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
);
};
-export const EightCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
- if (
- !trails[0] ||
- !trails[1] ||
- !trails[2] ||
- !trails[3] ||
- !trails[4] ||
- !trails[5] ||
- !trails[6] ||
- !trails[7]
- )
- return <>>;
+export const SevenCardSlow = ({
+ trails,
+}: {
+ trails: Tuple;
+}) => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+export const EightOrMoreFast = ({
+ trails,
+}: {
+ trails: [...Tuple, ...DCRFrontCard[]];
+}) => {
+ const afterEight = trails.slice(8);
return (
<>
@@ -213,7 +298,7 @@ export const EightCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
-
+ 0}>
@@ -227,55 +312,135 @@ export const EightCardFast = ({ trails }: { trails: DCRFrontCard[] }) => {
+ {afterEight.length > 0 ? (
+
+ {afterEight.map((trail, index) => (
+
+
+
+ ))}
+
+ ) : (
+ <>>
+ )}
>
);
};
-export const BeyondEight = ({ trails }: { trails: DCRFrontCard[] }) => {
+export const EightOrMoreSlow = ({
+ trails,
+}: {
+ trails: [...Tuple, ...DCRFrontCard[]];
+}) => {
const afterEight = trails.slice(8);
return (
<>
- ;
-
- {afterEight.map((trail, index) => (
-
-
-
- ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0}>
+
+
+
+
+
+
+
+
+
+
+
+
+ {afterEight.length > 0 ? (
+
+ {afterEight.map((trail, index) => (
+
+
+
+ ))}
+
+ ) : (
+ <>>
+ )}
>
);
};
-export const DecideContainerByTrails = ({ trails }: Props) => {
- // TODO: Respect 'speed'
+export const DecideContainerByTrails = ({ trails, speed }: Props) => {
+ const initialTrails = takeFirst(trails, 8);
- switch (trails.length) {
- case 1:
- return trails[0] !== undefined ? (
-
- ) : null;
- case 2:
- return ;
- case 3:
- return ;
- case 4:
- return ;
- case 5:
- return ;
- case 6:
- return ;
- case 7:
- return ;
- case 8:
- return ;
- default:
- return ;
+ if (speed === 'fast') {
+ switch (initialTrails.length) {
+ case 0:
+ return <>>;
+ case 1:
+ return ;
+ case 2:
+ return ;
+ case 3:
+ return ;
+ case 4:
+ return ;
+ case 5:
+ return ;
+ case 6:
+ return ;
+ case 7:
+ return ;
+ case 8:
+ return (
+
+ );
+ }
+ } else {
+ switch (initialTrails.length) {
+ case 0:
+ return <>>;
+ case 1:
+ return ;
+ case 2:
+ return ;
+ case 3:
+ return ;
+ case 4:
+ return ;
+ case 5:
+ return ;
+ case 6:
+ return ;
+ case 7:
+ return ;
+ case 8:
+ return (
+
+ );
+ }
}
};
diff --git a/dotcom-rendering/src/components/Discussion.tsx b/dotcom-rendering/src/components/Discussion.tsx
index 117e7b60dc1..fe5fa1c0eb8 100644
--- a/dotcom-rendering/src/components/Discussion.tsx
+++ b/dotcom-rendering/src/components/Discussion.tsx
@@ -1,10 +1,10 @@
import { css } from '@emotion/react';
-import { App as Comments } from '@guardian/discussion-rendering';
import { joinUrl } from '@guardian/libs';
import { neutral, space } from '@guardian/source-foundations';
import { SvgPlus } from '@guardian/source-react-components';
import { EditorialButton } from '@guardian/source-react-components-development-kitchen';
import { useEffect, useState } from 'react';
+import { App as Comments } from '../discussion-rendering/App';
import { decidePalette } from '../lib/decidePalette';
import { getCommentContext } from '../lib/getCommentContext';
import { revealStyles } from '../lib/revealStyles';
diff --git a/dotcom-rendering/src/components/DynamicFast.tsx b/dotcom-rendering/src/components/DynamicFast.tsx
index 0d553ef96ee..2816bbce2d3 100644
--- a/dotcom-rendering/src/components/DynamicFast.tsx
+++ b/dotcom-rendering/src/components/DynamicFast.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable @typescript-eslint/naming-convention -- because underscores work here*/
import {
Card25Media25,
Card50Media50Tall,
@@ -7,6 +6,7 @@ import {
import {
Card100PictureRight,
Card100PictureTop,
+ Card25_Card25_Card25_Card25,
Card25_Card75,
Card50_Card50,
Card75_Card25,
@@ -423,42 +423,6 @@ const Card25_Card25_Card25_ColumnOfThreeCards25 = ({
);
};
-const Card25_Card25_Card25_Card25 = ({
- cards,
- showAge,
- containerPalette,
-}: {
- cards: DCRFrontCard[];
- showAge?: boolean;
- containerPalette?: DCRContainerPalette;
-}) => {
- if (cards.length < 4) return null;
-
- const bigs = cards.slice(0, 4);
-
- return (
-
- {bigs.map((card, cardIndex) => {
- return (
-
-
-
- );
- })}
-
- );
-};
-
export const DynamicFast = ({
groupedTrails,
containerPalette,
diff --git a/dotcom-rendering/src/components/DynamicPackage.stories.tsx b/dotcom-rendering/src/components/DynamicPackage.stories.tsx
index 72a1f02869d..585fcb6af9d 100644
--- a/dotcom-rendering/src/components/DynamicPackage.stories.tsx
+++ b/dotcom-rendering/src/components/DynamicPackage.stories.tsx
@@ -354,7 +354,7 @@ export const SpecialReportWithoutPalette = () => (
'inside the firm that helps the super-rich hide their money',
showQuotedHeadline: false,
dataLinkName: 'news | group-0 | card-@1',
- showMainVideo: false,
+ mainMedia: undefined,
showLivePlayable: false,
isExternalLink: false,
webPublicationDate: '2016-04-08T12:15:09.000Z',
diff --git a/dotcom-rendering/src/components/DynamicSlow.tsx b/dotcom-rendering/src/components/DynamicSlow.tsx
index 168b30b8ee3..bda86ba21df 100644
--- a/dotcom-rendering/src/components/DynamicSlow.tsx
+++ b/dotcom-rendering/src/components/DynamicSlow.tsx
@@ -1,5 +1,4 @@
import {
- Card25Media25Tall,
Card50Media50,
CardDefaultMedia,
CardDefaultMediaMobile,
@@ -10,6 +9,7 @@ import {
Card25_Card75,
Card50_Card50,
Card75_Card25,
+ ColumnOfCards50_Card25_Card25,
filterGroupedTrails,
shouldPadWrappableRows,
} from '../lib/dynamicSlices';
@@ -79,60 +79,6 @@ const ColumnOfCards50_Card50 = ({
);
};
-const ColumnOfCards50_Card25_Card25 = ({
- cards,
- showAge,
- containerPalette,
-}: {
- cards: DCRFrontCard[];
- showAge?: boolean;
- containerPalette?: DCRContainerPalette;
-}) => {
- const bigs = cards.slice(0, 2).reverse();
- const remaining = cards.slice(2);
-
- return (
-
- {bigs.map((big) => {
- return (
-
-
-
- );
- })}
-
-
- {remaining.map((card) => {
- return (
-
-
-
- );
- })}
-
-
-
- );
-};
-
const ColumnOfCards50_ColumnOfCards50 = ({
cards,
showAge,
diff --git a/dotcom-rendering/src/components/DynamicSlowMPU.stories.tsx b/dotcom-rendering/src/components/DynamicSlowMPU.stories.tsx
index 9095cefc263..8f92fa0fc0b 100644
--- a/dotcom-rendering/src/components/DynamicSlowMPU.stories.tsx
+++ b/dotcom-rendering/src/components/DynamicSlowMPU.stories.tsx
@@ -33,7 +33,6 @@ export const NoBigs = () => (
showAge={true}
adIndex={1}
renderAds={true}
- trails={trails}
/>
);
@@ -52,7 +51,6 @@ export const OneBig = () => (
showAge={true}
adIndex={1}
renderAds={true}
- trails={trails}
/>
);
@@ -71,7 +69,6 @@ export const TwoBigs = () => (
showAge={true}
adIndex={1}
renderAds={true}
- trails={trails}
/>
);
@@ -94,7 +91,6 @@ export const FirstBigBoosted = () => (
showAge={true}
adIndex={1}
renderAds={true}
- trails={trails}
/>
);
@@ -117,7 +113,6 @@ export const SecondBigBoosted = () => (
showAge={true}
adIndex={1}
renderAds={true}
- trails={trails}
/>
);
@@ -136,7 +131,6 @@ export const ThreeBigs = () => (
showAge={true}
adIndex={1}
renderAds={true}
- trails={trails}
/>
);
@@ -155,13 +149,12 @@ export const AllBigs = () => (
showAge={true}
adIndex={1}
renderAds={true}
- trails={trails}
/>
);
AllBigs.storyName = 'with lots of bigs and no standards';
-export const AdfreeDynamicSlowMPU = () => (
+export const AllBigsNoMPU = () => (
(
showAge={true}
adIndex={1}
renderAds={false}
- trails={trails}
/>
);
-AdfreeDynamicSlowMPU.storyName = 'Ad-free dynamic slow MPU';
+AllBigsNoMPU.storyName = 'Ad-free with lots of bigs';
+
+export const TwoBigsThreeStandardsNoMPU = () => (
+
+
+
+);
+TwoBigsThreeStandardsNoMPU.storyName = 'Ad-free with 2 bigs & 3 standards';
+
+export const NoBigsTwoStandardsNoMPU = () => (
+
+
+
+);
+NoBigsTwoStandardsNoMPU.storyName = 'Ad-free with 0 bigs & 2 standards';
+
+export const NoBigsFiveStandardsNoMPU = () => (
+
+
+
+);
+NoBigsFiveStandardsNoMPU.storyName = 'Ad-free with 0 bigs & 5 standards';
diff --git a/dotcom-rendering/src/components/DynamicSlowMPU.tsx b/dotcom-rendering/src/components/DynamicSlowMPU.tsx
index e08c134fd8d..c1e88d1b02a 100644
--- a/dotcom-rendering/src/components/DynamicSlowMPU.tsx
+++ b/dotcom-rendering/src/components/DynamicSlowMPU.tsx
@@ -1,15 +1,17 @@
import { Hide } from '@guardian/source-react-components';
import {
- Card25Media25SmallHeadline,
Card33Media33,
CardDefault,
CardDefaultMediaMobile,
} from '../lib/cardWrappers';
import {
+ Card25_Card25_Card25_Card25,
Card25_Card75,
Card50_Card25_Card25,
Card50_Card50,
Card75_Card25,
+ ColumnOfCards50_Card25_Card25,
+ filterGroupedTrails,
} from '../lib/dynamicSlices';
import type {
DCRContainerPalette,
@@ -26,7 +28,6 @@ type Props = {
showAge?: boolean;
adIndex: number;
renderAds: boolean;
- trails: DCRFrontCard[];
};
/* .___________.___________.___________.
@@ -86,6 +87,33 @@ const Card33_ColumnOfThree33_Ad33 = ({
);
};
+/* .___________.___________.___________.
+ * |___________|___________|___________|
+ */
+const Card33_Card33_Card33 = ({
+ cards,
+ containerPalette,
+ showAge,
+}: {
+ cards: DCRFrontCard[];
+ containerPalette?: DCRContainerPalette;
+ showAge?: boolean;
+}) => {
+ return (
+
+ {cards.slice(0, 3).map((card) => (
+
+
+
+ ))}
+
+ );
+};
+
/* ._________________._________________.
* |_###_____________| |
* |_###_____________| MPU |
@@ -128,216 +156,206 @@ const ColumnOfThree50_Ad50 = ({
);
};
-type MPUProps = {
- groupedTrails: DCRGroupedTrails;
- containerPalette?: DCRContainerPalette;
- showAge?: boolean;
- adIndex: number;
-};
-
-const MPUSlice = ({
+/**
+ * DynamicSlowMPU
+ *
+ * This container only allows big and standard cards (from groupedTrails)
+ *
+ * Layout is dynamic depending on the number of big cards. You're only
+ * allowed to have 2 or 3 big cards. If you pass 1 a standard card will
+ * get promoted to make two bigs. If you pass more than 3 bigs then the
+ * extras will get demoted to standard.
+ *
+ * If you pass no bigs at all the top slice will not render and a special
+ * 3 column layout is used for the remaining slice.
+ *
+ */
+export const DynamicSlowMPU = ({
groupedTrails,
containerPalette,
showAge,
adIndex,
-}: MPUProps) => {
- let layout:
- | 'noBigs'
+ renderAds,
+}: Props) => {
+ let firstSliceLayout:
+ | undefined
| 'twoBigs'
| 'twoBigsFirstBoosted'
| 'twoBigsSecondBoosted'
| 'threeBigs';
- let bigCards: DCRFrontCard[] = [];
- let standardCards: DCRFrontCard[] = [];
- switch (groupedTrails.big.length) {
- case 0: {
- standardCards = groupedTrails.standard;
- layout = 'noBigs';
- break;
- }
- case 1: {
- // If there is only one big item a standard item is promoted such that
- // there is always at least two
- const promoted = groupedTrails.standard.slice(0, 1);
- bigCards = [...groupedTrails.big, ...promoted];
- standardCards = groupedTrails.standard.slice(1);
- layout = 'twoBigs';
- break;
+ let firstSliceCards: DCRFrontCard[] = [];
+ if (groupedTrails.big.length === 1) {
+ // If there is only one big item a standard item is promoted such that
+ // there is always at least two
+ const promoted = groupedTrails.standard.slice(0, 1);
+ firstSliceCards = [...groupedTrails.big, ...promoted];
+ firstSliceLayout = 'twoBigs';
+ } else if (groupedTrails.big.length === 2) {
+ firstSliceCards = groupedTrails.big.slice(0, 2);
+ if (groupedTrails.big[0]?.isBoosted) {
+ firstSliceLayout = 'twoBigsFirstBoosted';
+ } else if (groupedTrails.big[1]?.isBoosted) {
+ firstSliceLayout = 'twoBigsSecondBoosted';
+ } else {
+ firstSliceLayout = 'twoBigs';
}
- case 2: {
- bigCards = groupedTrails.big;
- standardCards = groupedTrails.standard;
- if (groupedTrails.big[0]?.isBoosted) {
- layout = 'twoBigsFirstBoosted';
- } else if (groupedTrails.big[1]?.isBoosted) {
- layout = 'twoBigsSecondBoosted';
+ } else if (groupedTrails.big.length > 2) {
+ firstSliceCards = groupedTrails.big.slice(0, 3);
+ firstSliceLayout = 'threeBigs';
+ }
+
+ // Create our object of grouped trails that doesn't include any
+ // cards used by the first slice
+ const secondSliceGroupedTrails = filterGroupedTrails({
+ groupedTrails,
+ filter: firstSliceCards,
+ });
+
+ let secondSliceLayout:
+ | 'noFirstSlice'
+ | 'standard'
+ | 'noFirstSliceNoMPU'
+ | 'noFirstSliceNoMPUThreeOrMore'
+ | 'standardNoMPU'
+ | 'standardNoMPUFourOrMore';
+
+ let secondSliceCards: DCRFrontCard[] = [];
+ const standards = [
+ // Demote any left over 'big' grouped cards
+ ...secondSliceGroupedTrails.big,
+ ...secondSliceGroupedTrails.standard,
+ ];
+
+ if (firstSliceCards.length === 0) {
+ if (renderAds) {
+ secondSliceCards = standards;
+ secondSliceLayout = 'noFirstSlice';
+ } else {
+ if (standards.length > 2) {
+ secondSliceCards = standards.slice(0, 4);
+ secondSliceLayout = 'noFirstSliceNoMPUThreeOrMore';
} else {
- layout = 'twoBigs';
+ secondSliceCards = standards.slice(0, 2);
+ secondSliceLayout = 'noFirstSliceNoMPU';
}
- break;
- }
- case 3: {
- bigCards = groupedTrails.big;
- standardCards = groupedTrails.standard;
- layout = 'threeBigs';
- break;
}
- default: {
- // If there are more than three big cards, these extra bigs are demoted to
- // standard.
- const demoted = groupedTrails.big.slice(3);
- standardCards = [...demoted, ...groupedTrails.standard];
- bigCards = groupedTrails.big.slice(0, 3);
- layout = 'threeBigs';
+ } else {
+ if (renderAds) {
+ secondSliceCards = standards;
+ secondSliceLayout = 'standard';
+ } else {
+ if (standards.length > 3) {
+ secondSliceCards = standards.slice(0, 5);
+ secondSliceLayout = 'standardNoMPUFourOrMore';
+ } else {
+ secondSliceCards = standards.slice(0, 3);
+ secondSliceLayout = 'standardNoMPU';
+ }
}
}
- switch (layout) {
- case 'noBigs': {
- return (
-
- );
- }
- case 'twoBigs': {
- return (
- <>
+ const FirstSlice = () => {
+ switch (firstSliceLayout) {
+ case 'twoBigs':
+ return (
-
- >
- );
- }
- case 'twoBigsFirstBoosted': {
- return (
- <>
-
-
- >
- );
+ );
+ default:
+ return <>>;
}
- case 'twoBigsSecondBoosted': {
- return (
- <>
- {
+ switch (secondSliceLayout) {
+ // With MPU
+ case 'standard':
+ return (
+
-
- >
- );
- }
- case 'threeBigs': {
- return (
- <>
-
-
- >
- );
- }
- }
-};
-
-type NonMPUProps = {
- containerPalette?: DCRContainerPalette;
- showAge?: boolean;
- trails: DCRFrontCard[];
-};
+ );
-const NonMPUSlice = ({ trails, containerPalette, showAge }: NonMPUProps) => {
- return (
-
- {trails.slice(0, 4).map((card, cardIndex) => {
+ case 'noFirstSliceNoMPU':
return (
- 0}
+
-
-
+ showAge={showAge}
+ />
);
- })}
-
- );
-};
+ case 'noFirstSliceNoMPUThreeOrMore':
+ return (
+
+ );
+ }
+ };
-/**
- * DynamicSlowMPU
- *
- * This container only allows big and standard cards (from groupedTrails)
- *
- * Layout is dynamic deopending on the number of big cards. You're only
- * allowed to have 2 or 3 big cards. If you pass 1 a standard card will
- * get promoted to make two bigs. If you pass more than 3 bigs then the
- * extras will get demoted to standard.
- *
- * If you pass no bigs at all the top slice will not render and a special
- * 3 column layout is used for the remaining slice.
- *
- */
-export const DynamicSlowMPU = ({
- groupedTrails,
- containerPalette,
- showAge,
- adIndex,
- renderAds,
- trails,
-}: Props) => {
- return renderAds ? (
-
- ) : (
-
+ return (
+ <>
+
+
+ >
);
};
diff --git a/dotcom-rendering/src/components/EnhancePinnedPost.importable.tsx b/dotcom-rendering/src/components/EnhancePinnedPost.importable.tsx
index 025b4f7548b..5cd3ef34b6f 100644
--- a/dotcom-rendering/src/components/EnhancePinnedPost.importable.tsx
+++ b/dotcom-rendering/src/components/EnhancePinnedPost.importable.tsx
@@ -1,10 +1,9 @@
import { useEffect, useRef, useState } from 'react';
import { initPerf } from '../client/initPerf';
import { submitComponentEvent } from '../client/ophan/ophan';
+import { isServer } from '../lib/isServer';
import { useIsInView } from '../lib/useIsInView';
-const isServer = typeof window === 'undefined';
-
const pinnedPost: HTMLElement | null = !isServer
? window.document.querySelector('[data-gu-marker=pinned-post]')
: null;
diff --git a/dotcom-rendering/src/components/FrontCard.tsx b/dotcom-rendering/src/components/FrontCard.tsx
index 772fc9c5009..074c00569ee 100644
--- a/dotcom-rendering/src/components/FrontCard.tsx
+++ b/dotcom-rendering/src/components/FrontCard.tsx
@@ -38,14 +38,13 @@ export const FrontCard = (props: Props) => {
showClock: false,
imageUrl: trail.image,
isCrossword: trail.isCrossword,
- mediaType: trail.mediaType,
- mediaDuration: trail.mediaDuration,
+ videoSize: 'large enough to play: at least 480px',
starRating: trail.starRating,
dataLinkName: trail.dataLinkName,
snapData: trail.snapData,
discussionId: trail.discussionId,
avatarUrl: trail.avatarUrl,
- showMainVideo: trail.showMainVideo,
+ mainMedia: trail.mainMedia,
isExternalLink: trail.isExternalLink,
branding: trail.branding,
slideshowImages: trail.slideshowImages,
diff --git a/dotcom-rendering/src/components/FrontPage.tsx b/dotcom-rendering/src/components/FrontPage.tsx
index cb2e80d58c4..65d336a3e49 100644
--- a/dotcom-rendering/src/components/FrontPage.tsx
+++ b/dotcom-rendering/src/components/FrontPage.tsx
@@ -2,6 +2,7 @@ import { css, Global } from '@emotion/react';
import { brandAlt, focusHalo, neutral } from '@guardian/source-foundations';
import { StrictMode } from 'react';
import { FrontLayout } from '../layouts/FrontLayout';
+import { buildAdTargeting } from '../lib/ad-targeting';
import { filterABTestSwitches } from '../model/enhance-switches';
import type { NavType } from '../model/extract-nav';
import type { DCRFrontType } from '../types/front';
@@ -12,6 +13,7 @@ import { FocusStyles } from './FocusStyles.importable';
import { Island } from './Island';
import { Metrics } from './Metrics.importable';
import { SetABTests } from './SetABTests.importable';
+import { SetAdTargeting } from './SetAdTargeting.importable';
import { ShowHideContainers } from './ShowHideContainers.importable';
import { SkipTo } from './SkipTo';
@@ -29,6 +31,15 @@ type Props = {
* @param {NAVType} props.NAV - The article JSON data
* */
export const FrontPage = ({ front, NAV }: Props) => {
+ const adTargeting = buildAdTargeting({
+ isAdFreeUser: front.isAdFreeUser,
+ isSensitive: front.config.isSensitive,
+ edition: front.config.edition,
+ section: front.config.section,
+ sharedAdTargeting: front.config.sharedAdTargeting,
+ adUnit: front.config.adUnit,
+ });
+
return (
{
isDev={!!front.config.isDev}
/>
+
+
+
);
diff --git a/dotcom-rendering/src/components/FrontSection.tsx b/dotcom-rendering/src/components/FrontSection.tsx
index f2b9a7a2ae5..a50abc7da7b 100644
--- a/dotcom-rendering/src/components/FrontSection.tsx
+++ b/dotcom-rendering/src/components/FrontSection.tsx
@@ -13,6 +13,7 @@ import { Hide } from '@guardian/source-react-components';
import { pageSkinContainer } from '../layouts/lib/pageSkin';
import { decideContainerOverrides } from '../lib/decideContainerOverrides';
import type { EditionId } from '../lib/edition';
+import { hideAge } from '../lib/hideAge';
import type { DCRBadgeType } from '../types/badge';
import type { DCRContainerPalette, TreatType } from '../types/front';
import type { DCRFrontPagination } from '../types/tagFront';
@@ -474,7 +475,7 @@ export const FrontSection = ({
hasPageSkin && pageSkinContainer,
css`
background-color: ${decideBackgroundColour(
- overrides?.background?.container,
+ overrides?.background.container,
hasPageSkin,
)};
`,
@@ -482,7 +483,7 @@ export const FrontSection = ({
>
@@ -502,7 +503,7 @@ export const FrontSection = ({
@@ -619,7 +620,7 @@ export const FrontSection = ({
ajaxUrl={ajaxUrl}
editionId={editionId}
containerPalette={containerPalette}
- showAge={title === 'Headlines'}
+ showAge={!hideAge.includes(title)}
/>
) : null}
@@ -638,8 +639,8 @@ export const FrontSection = ({
)}
diff --git a/dotcom-rendering/src/components/LabsSection.tsx b/dotcom-rendering/src/components/LabsSection.tsx
index c650290eaec..c192e6e668a 100644
--- a/dotcom-rendering/src/components/LabsSection.tsx
+++ b/dotcom-rendering/src/components/LabsSection.tsx
@@ -397,23 +397,23 @@ export const LabsSection = ({
>
@@ -428,7 +428,7 @@ export const LabsSection = ({
{children}
@@ -441,7 +441,7 @@ export const LabsSection = ({
pageId={pageId}
ajaxUrl={ajaxUrl}
containerPalette={'Branded'}
- showAge={false}
+ showAge={true}
/>
)}
@@ -449,7 +449,7 @@ export const LabsSection = ({
Paid for by
diff --git a/dotcom-rendering/src/components/LiveBlock.stories.tsx b/dotcom-rendering/src/components/LiveBlock.stories.tsx
index 31c31201b4a..bbd8a201bd5 100644
--- a/dotcom-rendering/src/components/LiveBlock.stories.tsx
+++ b/dotcom-rendering/src/components/LiveBlock.stories.tsx
@@ -64,10 +64,6 @@ export const VideoAsSecond = () => {
return (
{
return (
{
return (
{
return (
{
return (
{
return (
{
return (
{
return (
{
return (
{
return (
{
return (
{
return (
0) {
+ duration.push(h);
+ }
+ if (h > 0 && m < 10) duration.push(`0${m}`); // e.g 1:01:11
+ else duration.push(m); // supports 0:59
+ if (s > 0) {
+ if (s < 10) duration.push(`0${s}`);
+ else duration.push(s);
+ }
+ return duration.join(':');
+}
+
+export const MediaDuration = ({
+ mediaDuration,
+ imagePosition,
+ imagePositionOnMobile,
+}: {
+ mediaDuration: number;
+ imagePosition?: ImagePositionType;
+ imagePositionOnMobile?: ImagePositionType;
+}) => {
+ if (imagePosition === 'left') {
+ return null;
+ }
+ if (imagePositionOnMobile === 'left')
+ return (
+
+
+
{secondsToDuration(mediaDuration)}
+
+
+ );
+
+ return (
+
+
{secondsToDuration(mediaDuration)}
+
+ );
+};
diff --git a/dotcom-rendering/src/components/MediaMeta.test.tsx b/dotcom-rendering/src/components/MediaMeta.test.tsx
index f116317aabe..f80129eca48 100644
--- a/dotcom-rendering/src/components/MediaMeta.test.tsx
+++ b/dotcom-rendering/src/components/MediaMeta.test.tsx
@@ -1,4 +1,4 @@
-import { secondsToDuration } from './MediaMeta';
+import { secondsToDuration } from './MediaDuration';
describe(`MediaText`, () => {
it(`converts from a number of seconds to a duration string`, () => {
diff --git a/dotcom-rendering/src/components/MediaMeta.tsx b/dotcom-rendering/src/components/MediaMeta.tsx
index 9c014b17228..f212e8f5869 100644
--- a/dotcom-rendering/src/components/MediaMeta.tsx
+++ b/dotcom-rendering/src/components/MediaMeta.tsx
@@ -1,10 +1,5 @@
import { css } from '@emotion/react';
-import { textSans } from '@guardian/source-foundations';
-import {
- SvgAudio,
- SvgCamera,
- SvgVideo,
-} from '@guardian/source-react-components';
+import { SvgAudio, SvgCamera } from '@guardian/source-react-components';
import { decidePalette } from '../lib/decidePalette';
import type { DCRContainerPalette } from '../types/front';
import type { Palette } from '../types/palette';
@@ -38,45 +33,18 @@ const iconWrapperStyles = (palette: Palette, hasKicker: boolean) => css`
}
`;
-const durationStyles = (palette: Palette, hasKicker: boolean) => css`
- color: ${hasKicker ? palette.text.cardKicker : palette.text.cardFooter};
- ${textSans.xxsmall({ fontWeight: `bold` })}
-`;
-
const wrapperStyles = css`
display: flex;
align-items: center;
margin-top: 4px;
`;
-export function secondsToDuration(secs?: number): string {
- if (typeof secs === `undefined` || secs === 0) {
- return ``;
- }
- const seconds = Number(secs);
- const h = Math.floor(seconds / 3600);
- const m = Math.floor((seconds % 3600) / 60);
- const s = Math.floor((seconds % 3600) % 60);
-
- const duration = [];
- if (h > 0) {
- duration.push(h);
- }
- if (h > 0 && m < 10) duration.push(`0${m}`); // e.g 1:01:11
- else duration.push(m); // supports 0:59
- if (s > 0) {
- if (s < 10) duration.push(`0${s}`);
- else duration.push(s);
- }
- return duration.join(':');
-}
-
const Icon = ({ mediaType }: { mediaType: MediaType }) => {
switch (mediaType) {
case 'Gallery':
return ;
case 'Video':
- return ;
+ return null;
case 'Audio':
return ;
}
@@ -90,29 +58,16 @@ const MediaIcon = ({
mediaType: MediaType;
palette: Palette;
hasKicker: boolean;
-}) => (
-
-
-
-);
-
-const MediaDuration = ({
- mediaDuration,
- palette,
- hasKicker,
-}: {
- mediaDuration: number;
- palette: Palette;
- hasKicker: boolean;
-}) => (
-
- {secondsToDuration(mediaDuration)}
-
-);
+}) => {
+ return (
+
+
+
+ );
+};
export const MediaMeta = ({
mediaType,
- mediaDuration,
format,
containerPalette,
hasKicker,
@@ -125,14 +80,6 @@ export const MediaMeta = ({
palette={palette}
hasKicker={hasKicker}
/>
-
- {mediaDuration !== undefined && mediaDuration > 0 && (
-
- )}
);
};
diff --git a/dotcom-rendering/src/components/MostViewedFooter.importable.tsx b/dotcom-rendering/src/components/MostViewedFooter.importable.tsx
index e1c3602a6ad..c78ca6cf39d 100644
--- a/dotcom-rendering/src/components/MostViewedFooter.importable.tsx
+++ b/dotcom-rendering/src/components/MostViewedFooter.importable.tsx
@@ -59,6 +59,7 @@ export const MostViewedFooter = ({
data-cy="mostviewed-footer"
data-cy-ab-user-in-variant={abTestCypressDataAttr}
data-cy-ab-runnable-test={variantFromRunnable}
+ data-link-name="most popular"
>
css`
display: flex;
border-left: ${isImmersive ? 'none' : `1px solid ${brand[600]}`};
border-right: ${isImmersive ? 'none' : `1px solid ${brand[600]}`};
- border-top: 1px solid ${brand[600]};
}
${from.leftCol} {
max-width: 1140px;
diff --git a/dotcom-rendering/src/components/Nav/ExpandedMenu/MoreColumn.tsx b/dotcom-rendering/src/components/Nav/ExpandedMenu/MoreColumn.tsx
index b16783a30ed..c675e2694ff 100644
--- a/dotcom-rendering/src/components/Nav/ExpandedMenu/MoreColumn.tsx
+++ b/dotcom-rendering/src/components/Nav/ExpandedMenu/MoreColumn.tsx
@@ -6,6 +6,7 @@ import {
from,
textSans,
} from '@guardian/source-foundations';
+import { Hide } from '@guardian/source-react-components';
import { nestedOphanComponents } from '../../../lib/ophan-helpers';
import type { LinkType } from '../../../model/extract-nav';
import FacebookIcon from '../../../static/icons/facebook.svg';
@@ -40,24 +41,17 @@ const columnStyle = css`
}
${from.desktop} {
- width: 134px;
+ width: 140px;
float: left;
position: relative;
:after {
content: none;
}
-
- :first-of-type {
- width: 123px;
- }
}
+
${from.leftCol} {
width: 160px;
-
- :first-of-type {
- width: 150px;
- }
}
`;
@@ -234,53 +228,56 @@ export const MoreColumn = ({ otherLinks, brandExtensions }: Props) => {
))}
-
-
-
-
-
- Twitter
-
-
-
-
+
+
+ Twitter
+
+
+
+
+
>
);
};
diff --git a/dotcom-rendering/src/components/Nav/Nav.stories.tsx b/dotcom-rendering/src/components/Nav/Nav.stories.tsx
index 9db0e773884..f6492806b55 100644
--- a/dotcom-rendering/src/components/Nav/Nav.stories.tsx
+++ b/dotcom-rendering/src/components/Nav/Nav.stories.tsx
@@ -1,5 +1,6 @@
import { ArticlePillar } from '@guardian/libs';
import { brandBackground, brandBorder } from '@guardian/source-foundations';
+import { userEvent, within } from '@storybook/testing-library';
import { Section } from '../Section';
import { Nav } from './Nav';
import { nav } from './Nav.mock';
@@ -99,3 +100,40 @@ export const ImmersiveStory = () => {
);
};
ImmersiveStory.storyName = 'Immersive';
+
+export const ExpandedMenuStory = () => {
+ return (
+
+ );
+};
+
+/**
+ * Clicks the “More" button so that Chromatic can capture the component in its `expanded` state.
+ */
+ExpandedMenuStory.play = async ({
+ canvasElement,
+}: {
+ canvasElement: HTMLElement;
+}) => {
+ const canvas = within(canvasElement);
+ await userEvent.click(canvas.getByLabelText(/More/));
+};
+ExpandedMenuStory.storyName = 'ExpandedMenu';
diff --git a/dotcom-rendering/src/components/Nav/Nav.tsx b/dotcom-rendering/src/components/Nav/Nav.tsx
index c3a023c59f1..31575a1469b 100644
--- a/dotcom-rendering/src/components/Nav/Nav.tsx
+++ b/dotcom-rendering/src/components/Nav/Nav.tsx
@@ -1,5 +1,5 @@
import { css, Global } from '@emotion/react';
-import { ArticlePillar } from '@guardian/libs';
+import type { ArticlePillar } from '@guardian/libs';
import { until, visuallyHidden } from '@guardian/source-foundations';
import type { EditionId } from '../../lib/edition';
import { clearFix } from '../../lib/mixins';
@@ -32,8 +32,9 @@ const rowStyles = css`
justify-content: space-between;
`;
+export const minNavHeightPx = 48;
export const minNavHeight = css`
- min-height: 48px;
+ min-height: ${minNavHeightPx}px;
`;
const PositionRoundel = ({ children }: { children: React.ReactNode }) => (
diff --git a/dotcom-rendering/src/components/PinnedPost.stories.tsx b/dotcom-rendering/src/components/PinnedPost.stories.tsx
index 16e44e13c6f..209aaee3da1 100644
--- a/dotcom-rendering/src/components/PinnedPost.stories.tsx
+++ b/dotcom-rendering/src/components/PinnedPost.stories.tsx
@@ -74,10 +74,6 @@ export const Sport = () => {
{
{
{
{
{
{
//@ts-expect-error -- custom type guard
units.includes(unit);
-const isServer = typeof document === 'undefined';
-
/** These values should not update based on servings */
const constants = [
's',
@@ -156,7 +155,7 @@ export const RecipeMultiplier = () => {
if (!(node instanceof Text)) continue;
const match =
- node.nodeValue?.match(RECIPE_ELEMENTS) ?? undefined;
+ node.nodeValue.match(RECIPE_ELEMENTS) ?? undefined;
if (!match) continue;
diff --git a/dotcom-rendering/src/components/SecureSignupIframe.importable.tsx b/dotcom-rendering/src/components/SecureSignupIframe.importable.tsx
index a7d06cf7ac0..c4a4e5dfae0 100644
--- a/dotcom-rendering/src/components/SecureSignupIframe.importable.tsx
+++ b/dotcom-rendering/src/components/SecureSignupIframe.importable.tsx
@@ -16,8 +16,7 @@ import {
getOphanRecordFunction,
submitComponentEvent,
} from '../client/ophan/ophan';
-
-const isServer = typeof window === 'undefined';
+import { isServer } from '../lib/isServer';
// The Google documentation specifies that if the 'recaptcha-badge' is hidden,
// their T+C's must be displayed instead. While this component hides the
diff --git a/dotcom-rendering/src/components/SetAdTargeting.importable.tsx b/dotcom-rendering/src/components/SetAdTargeting.importable.tsx
new file mode 100644
index 00000000000..c10330fd651
--- /dev/null
+++ b/dotcom-rendering/src/components/SetAdTargeting.importable.tsx
@@ -0,0 +1,18 @@
+import { log } from '@guardian/libs';
+import { isServer } from '../lib/isServer';
+import { setAdTargeting } from '../lib/useAdTargeting';
+
+type Props = {
+ adTargeting: AdTargeting;
+};
+
+export const SetAdTargeting = ({ adTargeting }: Props) => {
+ if (isServer) {
+ throw new Error('SetAdTargeting is client only');
+ }
+
+ setAdTargeting(adTargeting);
+ log('commercial', '🎯 Ad targeting', adTargeting);
+
+ return null;
+};
diff --git a/dotcom-rendering/src/components/ShowMore.stories.tsx b/dotcom-rendering/src/components/ShowMore.stories.tsx
index 18880609977..fd164ba26c6 100644
--- a/dotcom-rendering/src/components/ShowMore.stories.tsx
+++ b/dotcom-rendering/src/components/ShowMore.stories.tsx
@@ -7,9 +7,9 @@ import { ShowMore } from './ShowMore.importable';
* Clicks the 'show more' button so that Chromatic can capture it the component
* in its 'open' state.
*/
-const play = ({ canvasElement }: { canvasElement: HTMLElement }) => {
+const play = async ({ canvasElement }: { canvasElement: HTMLElement }) => {
const canvas = within(canvasElement);
- userEvent.click(canvas.getByRole('button'));
+ await userEvent.click(canvas.getByRole('button'));
};
const title = 'Opinion';
diff --git a/dotcom-rendering/src/components/SignInGate/componentEventTracking.tsx b/dotcom-rendering/src/components/SignInGate/componentEventTracking.tsx
index e6cbf3a7437..04499e4f4df 100644
--- a/dotcom-rendering/src/components/SignInGate/componentEventTracking.tsx
+++ b/dotcom-rendering/src/components/SignInGate/componentEventTracking.tsx
@@ -1,8 +1,7 @@
import type { OphanComponent, OphanComponentEvent } from '@guardian/libs';
+import { isServer } from '../../lib/isServer';
import type { CurrentSignInGateABTest } from './types';
-const isServer = typeof window === 'undefined';
-
export type ComponentEventParams = {
componentType: string;
componentId?: string;
@@ -10,7 +9,6 @@ export type ComponentEventParams = {
abTestVariant: string;
viewId?: string;
browserId?: string;
- visitId?: string;
};
const ophan = isServer ? undefined : window.guardian.ophan;
diff --git a/dotcom-rendering/src/components/SignInGateSelector.importable.tsx b/dotcom-rendering/src/components/SignInGateSelector.importable.tsx
index 25a6d6d25e3..1cb625cb07e 100644
--- a/dotcom-rendering/src/components/SignInGateSelector.importable.tsx
+++ b/dotcom-rendering/src/components/SignInGateSelector.importable.tsx
@@ -87,7 +87,6 @@ const generateSignInUrl = ({
abTestVariant: currentTest.variant,
browserId:
getCookie({ name: 'bwid', shouldMemoize: true }) ?? undefined,
- visitId: getCookie({ name: 'vsid' }) ?? undefined,
viewId: pageViewId,
};
diff --git a/dotcom-rendering/src/components/Snap.tsx b/dotcom-rendering/src/components/Snap.tsx
index 584356a145f..ba70e958cdc 100644
--- a/dotcom-rendering/src/components/Snap.tsx
+++ b/dotcom-rendering/src/components/Snap.tsx
@@ -1,10 +1,15 @@
import { css } from '@emotion/react';
import type { DCRSnapType } from '../types/front';
+// Some thrashers don't have "width: 100%" applied to their first element which causes them to not correctly take up their space
const snapStyles = css`
overflow: hidden;
position: relative;
display: flex;
+
+ > * {
+ width: 100%;
+ }
`;
type Props = {
diff --git a/dotcom-rendering/src/components/Standfirst.tsx b/dotcom-rendering/src/components/Standfirst.tsx
index ebec47431b0..c156b9af62f 100644
--- a/dotcom-rendering/src/components/Standfirst.tsx
+++ b/dotcom-rendering/src/components/Standfirst.tsx
@@ -222,6 +222,9 @@ export const Standfirst = ({ format, standfirst }: Props) => {
}
dangerouslySetInnerHTML={{
__html: sanitise(standfirst, {
+ // We allow all tags, which includes script & style which are potentially vulnerable
+ // `allowVulnerableTags: true` suppresses this warning
+ allowVulnerableTags: true,
allowedTags: false, // Leave tags from CAPI alone
allowedAttributes: false, // Leave attributes from CAPI alone
transformTags: {
diff --git a/dotcom-rendering/src/components/SupportingContent.stories.tsx b/dotcom-rendering/src/components/SupportingContent.stories.tsx
index a61a300bb97..4aaf8bdcbd3 100644
--- a/dotcom-rendering/src/components/SupportingContent.stories.tsx
+++ b/dotcom-rendering/src/components/SupportingContent.stories.tsx
@@ -32,6 +32,7 @@ const basicCardProps: CardProps = {
imagePosition: 'top',
isExternalLink: false,
showLivePlayable: false,
+ videoSize: 'large enough to play: at least 480px',
};
const aBasicLink = {
diff --git a/dotcom-rendering/src/components/TableOfContents.importable.tsx b/dotcom-rendering/src/components/TableOfContents.importable.tsx
index c68da3a8c61..c9455be3b6a 100644
--- a/dotcom-rendering/src/components/TableOfContents.importable.tsx
+++ b/dotcom-rendering/src/components/TableOfContents.importable.tsx
@@ -1,3 +1,5 @@
+/* eslint-disable jsx-a11y/no-static-element-interactions -- TODO https://github.com/guardian/dotcom-rendering/issues/8161 */
+/* eslint-disable jsx-a11y/click-events-have-key-events -- TODO https://github.com/guardian/dotcom-rendering/issues/8161 */
import { css } from '@emotion/react';
import { ArticleDisplay } from '@guardian/libs';
import {
diff --git a/dotcom-rendering/src/components/TagFrontFastMpu.stories.tsx b/dotcom-rendering/src/components/TagFrontFastMpu.stories.tsx
new file mode 100644
index 00000000000..d9eba85511b
--- /dev/null
+++ b/dotcom-rendering/src/components/TagFrontFastMpu.stories.tsx
@@ -0,0 +1,103 @@
+import { breakpoints } from '@guardian/source-foundations';
+import { trails } from '../../fixtures/manual/trails';
+import { FrontSection } from './FrontSection';
+import { TagFrontFastMpu } from './TagFrontFastMpu';
+
+export default {
+ component: TagFrontFastMpu,
+ title: 'Components/TagFrontFastMpu',
+ parameters: {
+ chromatic: {
+ viewports: [
+ breakpoints.mobile,
+ breakpoints.tablet,
+ breakpoints.wide,
+ ],
+ },
+ },
+};
+
+export const WithTwoCards = () => {
+ return (
+
+
+
+ );
+};
+WithTwoCards.storyName = 'With two cards';
+
+export const WithFourCards = () => {
+ return (
+
+
+
+ );
+};
+WithFourCards.storyName = 'With four cards';
+
+export const WithSixCards = () => {
+ return (
+
+
+
+ );
+};
+WithSixCards.storyName = 'With six cards';
+
+export const WithNineCards = () => {
+ return (
+
+
+
+ );
+};
+WithNineCards.storyName = 'With nine cards';
diff --git a/dotcom-rendering/src/components/TagFrontFastMpu.tsx b/dotcom-rendering/src/components/TagFrontFastMpu.tsx
new file mode 100644
index 00000000000..261279da0c8
--- /dev/null
+++ b/dotcom-rendering/src/components/TagFrontFastMpu.tsx
@@ -0,0 +1,184 @@
+import { Hide } from '@guardian/source-react-components';
+import { Card33Media33, CardDefault } from '../lib/cardWrappers';
+import { type Tuple } from '../lib/tuple';
+import type { DCRFrontCard } from '../types/front';
+import type { GroupedTrailsFastMpu } from '../types/tagFront';
+import { AdSlot } from './AdSlot';
+import { LI } from './Card/components/LI';
+import { UL } from './Card/components/UL';
+
+const TwoCard = ({
+ trails,
+ adIndex,
+}: {
+ trails: Tuple;
+ adIndex: number;
+}) => {
+ return (
+
+ );
+};
+
+const FourCard = ({
+ trails,
+ adIndex,
+}: {
+ trails: Tuple;
+ adIndex: number;
+}) => {
+ return (
+
+ );
+};
+
+const SixCard = ({
+ trails,
+ adIndex,
+}: {
+ trails: Tuple;
+ adIndex: number;
+}) => {
+ return (
+
+ );
+};
+
+const NineCard = ({
+ trails,
+ adIndex,
+}: {
+ trails: Tuple;
+ adIndex: number;
+}) => {
+ return (
+ <>
+
+
+ >
+ );
+};
+
+type Props = GroupedTrailsFastMpu & {
+ adIndex: number;
+};
+
+export const TagFrontFastMpu = ({ trails, adIndex }: Props) => {
+ switch (trails.length) {
+ case 2:
+ return ;
+ case 4:
+ return ;
+ case 6:
+ return ;
+ case 9:
+ return ;
+ }
+};
diff --git a/dotcom-rendering/src/components/TagFrontPage.tsx b/dotcom-rendering/src/components/TagFrontPage.tsx
index d186de41777..e694d8cdab6 100644
--- a/dotcom-rendering/src/components/TagFrontPage.tsx
+++ b/dotcom-rendering/src/components/TagFrontPage.tsx
@@ -2,6 +2,7 @@ import { css, Global } from '@emotion/react';
import { brandAlt, focusHalo, neutral } from '@guardian/source-foundations';
import { StrictMode } from 'react';
import { TagFrontLayout } from '../layouts/TagFrontLayout';
+import { buildAdTargeting } from '../lib/ad-targeting';
import { filterABTestSwitches } from '../model/enhance-switches';
import type { NavType } from '../model/extract-nav';
import type { DCRTagFrontType } from '../types/tagFront';
@@ -12,6 +13,7 @@ import { FocusStyles } from './FocusStyles.importable';
import { Island } from './Island';
import { Metrics } from './Metrics.importable';
import { SetABTests } from './SetABTests.importable';
+import { SetAdTargeting } from './SetAdTargeting.importable';
import { SkipTo } from './SkipTo';
type Props = {
@@ -28,6 +30,15 @@ type Props = {
* @param {NAVType} props.NAV - The article JSON data
* */
export const TagFrontPage = ({ tagFront, NAV }: Props) => {
+ const adTargeting = buildAdTargeting({
+ isAdFreeUser: tagFront.isAdFreeUser,
+ isSensitive: tagFront.config.isSensitive,
+ edition: tagFront.config.edition,
+ section: tagFront.config.section,
+ sharedAdTargeting: tagFront.config.sharedAdTargeting,
+ adUnit: tagFront.config.adUnit,
+ });
+
return (
{
isDev={!!tagFront.config.isDev}
/>
+
+
+
);
diff --git a/dotcom-rendering/src/components/TagFrontSlowMpu.stories.tsx b/dotcom-rendering/src/components/TagFrontSlowMpu.stories.tsx
new file mode 100644
index 00000000000..f023b9c17c0
--- /dev/null
+++ b/dotcom-rendering/src/components/TagFrontSlowMpu.stories.tsx
@@ -0,0 +1,94 @@
+import { breakpoints } from '@guardian/source-foundations';
+import { trails } from '../../fixtures/manual/trails';
+import { FrontSection } from './FrontSection';
+import { TagFrontSlowMpu } from './TagFrontSlowMpu';
+
+export default {
+ component: TagFrontSlowMpu,
+ title: 'Components/TagFrontSlowMpu',
+ parameters: {
+ chromatic: {
+ viewports: [
+ breakpoints.mobile,
+ breakpoints.tablet,
+ breakpoints.wide,
+ ],
+ },
+ },
+};
+
+export const WithTwoCards = () => {
+ return (
+
+
+
+ );
+};
+WithTwoCards.storyName = 'With two cards';
+
+export const WithFourCards = () => {
+ return (
+
+
+
+ );
+};
+WithFourCards.storyName = 'With four cards';
+
+export const WithFiveCards = () => {
+ return (
+
+
+
+ );
+};
+WithFiveCards.storyName = 'With five cards';
+
+export const WithSevenCards = () => {
+ return (
+
+
+
+ );
+};
+WithSevenCards.storyName = 'With seven cards';
diff --git a/dotcom-rendering/src/components/TagFrontSlowMpu.tsx b/dotcom-rendering/src/components/TagFrontSlowMpu.tsx
new file mode 100644
index 00000000000..616818f1763
--- /dev/null
+++ b/dotcom-rendering/src/components/TagFrontSlowMpu.tsx
@@ -0,0 +1,165 @@
+import { Hide } from '@guardian/source-react-components';
+import { Card33Media33, Card50Media50, CardDefault } from '../lib/cardWrappers';
+import { type Tuple } from '../lib/tuple';
+import type { DCRFrontCard } from '../types/front';
+import type { GroupedTrailsSlowMpu } from '../types/tagFront';
+import { AdSlot } from './AdSlot';
+import { LI } from './Card/components/LI';
+import { UL } from './Card/components/UL';
+
+const TwoCard = ({
+ trails,
+ adIndex,
+}: {
+ trails: Tuple;
+ adIndex: number;
+}) => {
+ return (
+
+ );
+};
+
+const FourCard = ({
+ trails,
+ adIndex,
+}: {
+ trails: Tuple;
+ adIndex: number;
+}) => {
+ return (
+
+ );
+};
+
+const FiveCard = ({
+ trails,
+ adIndex,
+}: {
+ trails: Tuple;
+ adIndex: number;
+}) => {
+ return (
+ <>
+
+
+ >
+ );
+};
+
+const SevenCards = ({
+ trails,
+ adIndex,
+}: {
+ trails: Tuple;
+ adIndex: number;
+}) => {
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+type Props = GroupedTrailsSlowMpu & {
+ adIndex: number;
+};
+
+export const TagFrontSlowMpu = ({ trails, adIndex }: Props) => {
+ switch (trails.length) {
+ case 2:
+ return ;
+ case 4:
+ return ;
+ case 5:
+ return ;
+ case 7:
+ return ;
+ }
+};
diff --git a/dotcom-rendering/src/components/TextBlockComponent.tsx b/dotcom-rendering/src/components/TextBlockComponent.tsx
index 2374437bee2..84f2a45e8b6 100644
--- a/dotcom-rendering/src/components/TextBlockComponent.tsx
+++ b/dotcom-rendering/src/components/TextBlockComponent.tsx
@@ -116,6 +116,9 @@ const shouldShowDropCaps = (
* https://www.npmjs.com/package/sanitize-html#default-options
*/
const sanitiserOptions: IOptions = {
+ // We allow all tags, which includes script & style which are potentially vulnerable
+ // `allowVulnerableTags: true` suppresses this warning
+ allowVulnerableTags: true,
allowedTags: false, // Leave tags from CAPI alone
allowedAttributes: false, // Leave attributes from CAPI alone
transformTags: {
diff --git a/dotcom-rendering/src/components/Weather.stories.tsx b/dotcom-rendering/src/components/Weather.stories.tsx
new file mode 100644
index 00000000000..10ebd12db4b
--- /dev/null
+++ b/dotcom-rendering/src/components/Weather.stories.tsx
@@ -0,0 +1,283 @@
+import type { WeatherProps } from './Weather';
+import { Weather } from './Weather';
+
+export default {
+ component: Weather,
+ title: 'Components/Weather',
+ args: {
+ edition: 'UK',
+ location: {
+ key: '328819',
+ localizedName:
+ 'Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch',
+ country: {
+ id: 'GB',
+ localizedName: 'United Kingdom',
+ },
+ administrativeArea: {
+ id: 'GWN',
+ localizedName: 'Gwynedd',
+ },
+ type: 'city',
+ },
+ now: {
+ icon: 1,
+ description: 'Sunny',
+ temperature: {
+ metric: 10,
+ imperial: 50,
+ },
+ link: 'https://www.accuweather.com/en/gb/llanfair-pwllgwyngyll/ll61-5/current-weather/328819?lang=en-us&partner=web_guardian_adc',
+ },
+ forecast: [
+ {
+ icon: 19,
+ description: 'Sleet',
+ temperature: {
+ metric: 20,
+ imperial: 68,
+ },
+ dateTime: '2023-06-27T00:00:00.000Z',
+ },
+ {
+ icon: 19,
+ description: 'Sleet',
+ temperature: {
+ metric: 20,
+ imperial: 68,
+ },
+ dateTime: '2023-06-27T01:00:00.000Z',
+ },
+ {
+ icon: 19,
+ description: 'Sleet',
+ temperature: {
+ metric: 20,
+ imperial: 68,
+ },
+ dateTime: '2023-06-27T02:00:00.000Z',
+ },
+ {
+ icon: 19,
+ description: 'Sleet',
+ temperature: {
+ metric: 20,
+ imperial: 68,
+ },
+ dateTime: '2023-06-27T03:00:00.000Z',
+ },
+ {
+ icon: 25,
+ description: 'Hail',
+ temperature: {
+ metric: 25,
+ imperial: 77,
+ },
+ dateTime: '2023-06-27T04:00:00.000Z',
+ },
+ {
+ icon: 25,
+ description: 'Hail',
+ temperature: {
+ metric: 25,
+ imperial: 77,
+ },
+ dateTime: '2023-06-27T05:00:00.000Z',
+ },
+ {
+ icon: 25,
+ description: 'Hail',
+ temperature: {
+ metric: 25,
+ imperial: 77,
+ },
+ dateTime: '2023-06-27T06:00:00.000Z',
+ },
+ {
+ icon: 25,
+ description: 'Hail',
+ temperature: {
+ metric: 25,
+ imperial: 77,
+ },
+ dateTime: '2023-06-27T07:00:00.000Z',
+ },
+ {
+ icon: 32,
+ description: 'Wind',
+ temperature: {
+ metric: 30,
+ imperial: 89,
+ },
+ dateTime: '2023-06-27T08:00:00.000Z',
+ },
+ {
+ icon: 32,
+ description: 'Wind',
+ temperature: {
+ metric: 30,
+ imperial: 89,
+ },
+ dateTime: '2023-06-27T09:00:00.000Z',
+ },
+ {
+ icon: 32,
+ description: 'Wind',
+ temperature: {
+ metric: 30,
+ imperial: 89,
+ },
+ dateTime: '2023-06-27T10:00:00.000Z',
+ },
+ {
+ icon: 32,
+ description: 'Wind',
+ temperature: {
+ metric: 30,
+ imperial: 89,
+ },
+ dateTime: '2023-06-27T11:00:00.000Z',
+ },
+ {
+ icon: 44,
+ description: 'Night snow',
+ temperature: {
+ metric: 40,
+ imperial: 104,
+ },
+ dateTime: '2023-06-27T12:00:00.000Z',
+ },
+ {
+ icon: 44,
+ description: 'Night snow',
+ temperature: {
+ metric: 40,
+ imperial: 104,
+ },
+ dateTime: '2023-06-27T13:00:00.000Z',
+ },
+ {
+ icon: 44,
+ description: 'Night snow',
+ temperature: {
+ metric: 40,
+ imperial: 104,
+ },
+ dateTime: '2023-06-27T14:00:00.000Z',
+ },
+ {
+ icon: 44,
+ description: 'Night snow',
+ temperature: {
+ metric: 40,
+ imperial: 104,
+ },
+ dateTime: '2023-06-27T15:00:00.000Z',
+ },
+ ],
+ },
+};
+
+export const Mobile = (args: WeatherProps) => (
+
+
+
+);
+Mobile.parameters = {
+ viewport: {
+ defaultViewport: 'mobile',
+ },
+};
+
+export const MobileMedium = (args: WeatherProps) => (
+
+
+
+);
+MobileMedium.parameters = {
+ viewport: {
+ defaultViewport: 'mobileMedium',
+ },
+};
+
+export const MobileLandscape = (args: WeatherProps) => (
+
+
+
+);
+MobileLandscape.parameters = {
+ viewport: {
+ defaultViewport: 'mobileLandscape',
+ },
+};
+
+export const Phablet = (args: WeatherProps) => (
+
+
+
+);
+Phablet.parameters = {
+ viewport: {
+ defaultViewport: 'phablet',
+ },
+};
+
+export const Tablet = (args: WeatherProps) => (
+
+
+
+);
+Tablet.parameters = {
+ viewport: {
+ defaultViewport: 'tablet',
+ },
+};
+
+export const Desktop = (args: WeatherProps) => (
+
+
+
+);
+Desktop.parameters = {
+ viewport: {
+ defaultViewport: 'desktop',
+ },
+};
+
+export const LeftCol = (args: WeatherProps) => (
+
+
+
+);
+LeftCol.parameters = {
+ viewport: {
+ defaultViewport: 'leftCol',
+ },
+};
+
+export const Wide = (args: WeatherProps) => (
+
+
+
+);
+Wide.parameters = {
+ viewport: {
+ defaultViewport: 'wide',
+ },
+};
+
+// just checks US special case
+export const US = (args: WeatherProps) => (
+
+
+
+);
+US.args = {
+ edition: 'US',
+};
+// make it easy to see on most screens
+US.parameters = {
+ viewport: {
+ defaultViewport: 'mobileLandscape',
+ },
+};
diff --git a/dotcom-rendering/src/components/Weather.tsx b/dotcom-rendering/src/components/Weather.tsx
new file mode 100644
index 00000000000..7bc618fc933
--- /dev/null
+++ b/dotcom-rendering/src/components/Weather.tsx
@@ -0,0 +1,219 @@
+/**
+ * "WEATHER"
+ *
+ * Whether the weather be fine,
+ * Or whether the weather be not,
+ * Whether the weather be cold,
+ * Or whether the weather be hot,
+ * We'll weather the weather
+ * Whatever the weather,
+ * Whether we like it or not!
+ *
+ * Author: Anonymous British
+ */
+
+import { css, keyframes } from '@emotion/react';
+import {
+ between,
+ from,
+ palette,
+ textSans,
+ until,
+ visuallyHidden,
+} from '@guardian/source-foundations';
+import { SvgExternal } from '@guardian/source-react-components';
+import type { FEFrontConfigType } from '../types/front';
+import type { WeatherData, WeatherForecast } from './WeatherData.importable';
+import { WeatherSlot } from './WeatherSlot';
+
+const visuallyHiddenCSS = css`
+ ${visuallyHidden}
+`;
+
+const weatherCSS = css`
+ animation: ${keyframes`from { opacity: 0; } to { opacity: 1; }`} 250ms;
+ --border: 1px solid ${palette.neutral[86]};
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ letter-spacing: -0.56px;
+`;
+
+const locationCSS = css`
+ flex: 1;
+ ${textSans.medium()};
+ padding: 12px 0;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ ${until.tablet} {
+ flex-basis: 100%;
+ border-bottom: var(--border);
+ }
+
+ ${between.tablet.and.leftCol} {
+ padding-right: 1ch;
+ }
+
+ ${from.leftCol} {
+ flex-basis: 100%;
+ border-bottom: var(--border);
+ }
+`;
+
+const nowCSS = css`
+ ${until.tablet} {
+ justify-content: flex-end;
+ flex-basis: 100%;
+ border-bottom: var(--border);
+ order: -1;
+ padding-bottom: 4px;
+ }
+
+ ${from.leftCol} {
+ flex-basis: 100%;
+ border-bottom: var(--border);
+ padding-top: 8px;
+ padding-bottom: 24px;
+ }
+`;
+
+const slotCSS = css`
+ display: flex;
+ flex: 1;
+ padding-top: 4px;
+
+ border-left: var(--border);
+ padding-left: 4px;
+
+ ${until.mobileLandscape} {
+ &.forecast-4 {
+ display: none;
+ }
+ }
+
+ ${until.tablet} {
+ &.now,
+ &.forecast-1 {
+ border-left: none;
+ }
+ }
+
+ ${between.tablet.and.desktop} {
+ padding-left: 4px;
+
+ &.forecast-3,
+ &.forecast-4 {
+ display: none;
+ }
+ }
+
+ ${between.desktop.and.wide} {
+ &.forecast-4 {
+ display: none;
+ }
+ }
+
+ ${from.leftCol} {
+ &.now,
+ &.forecast-1 {
+ border-left: none;
+ }
+ }
+`;
+
+const linkCSS = css`
+ a {
+ ${textSans.small()};
+ color: ${palette.neutral[7]};
+ text-decoration: none;
+ display: block;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ ${until.tablet} {
+ flex-basis: 100%;
+ padding-top: 12px;
+ }
+
+ ${from.leftCol} {
+ padding-top: 24px;
+ flex-basis: 100%;
+ }
+`;
+
+const ExternalLinkIcon = () => (
+
+
+
+);
+
+export interface WeatherProps {
+ location: {
+ id: string;
+ city: string;
+ country: string;
+ };
+ now: WeatherData;
+ forecast: WeatherForecast;
+ edition: FEFrontConfigType['edition'];
+}
+
+export const Weather = ({ location, now, forecast, edition }: WeatherProps) => {
+ const isUS = edition === 'US';
+ return (
+
+ );
+};
diff --git a/dotcom-rendering/src/components/WeatherData.importable.tsx b/dotcom-rendering/src/components/WeatherData.importable.tsx
new file mode 100644
index 00000000000..08fe0f155d7
--- /dev/null
+++ b/dotcom-rendering/src/components/WeatherData.importable.tsx
@@ -0,0 +1,77 @@
+import { useApi } from '../lib/useApi';
+import type { FEFrontConfigType } from '../types/front';
+import { Weather } from './Weather';
+
+/**
+ * Our weather API returns 24 forecast.
+ * Each forecast is 1 hour offset from the previous forecast, and the first forecast is 1 hour offset from Now.
+ */
+export type WeatherForecast = [
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+ WeatherData,
+];
+
+export type WeatherData = {
+ description: string;
+ icon: number;
+ link?: string;
+ dateTime?: string;
+ temperature: {
+ metric: number;
+ imperial: number;
+ };
+};
+
+export type WeatherApiData = {
+ location: {
+ id: string;
+ city: string;
+ country: string;
+ };
+ weather: WeatherData;
+ forecast: WeatherForecast;
+};
+
+type Props = {
+ ajaxUrl: string;
+ edition: FEFrontConfigType['edition'];
+};
+
+export const WeatherData = ({ ajaxUrl, edition }: Props) => {
+ const { data, error } = useApi(`${ajaxUrl}/weather.json`);
+
+ if (error) {
+ window.guardian.modules.sentry.reportError(error, 'weather');
+ }
+
+ return !data ? null : (
+
+ );
+};
diff --git a/dotcom-rendering/src/components/WeatherSlot.tsx b/dotcom-rendering/src/components/WeatherSlot.tsx
new file mode 100644
index 00000000000..30d9e8d7051
--- /dev/null
+++ b/dotcom-rendering/src/components/WeatherSlot.tsx
@@ -0,0 +1,169 @@
+import type { SerializedStyles } from '@emotion/react';
+import { css, keyframes } from '@emotion/react';
+import { isUndefined } from '@guardian/libs';
+import {
+ from,
+ palette,
+ textSans,
+ until,
+ visuallyHidden,
+} from '@guardian/source-foundations';
+import { isNull } from 'lodash';
+import { lazy, Suspense } from 'react';
+import type { WeatherData } from './WeatherData.importable';
+
+const formatTemperature = (value: number, unit: string) =>
+ `${value}°${unit.toLocaleUpperCase()}`;
+
+const formatTime = (dateTime: string, isUS: boolean) =>
+ isUS
+ ? new Date(dateTime).toLocaleTimeString('en-US', {
+ hour: 'numeric',
+ })
+ : new Date(dateTime).toLocaleTimeString(undefined, {
+ hour: '2-digit',
+ minute: '2-digit',
+ });
+
+const visuallyHiddenCSS = css`
+ ${visuallyHidden}
+`;
+
+const slotCSS = css`
+ animation: ${keyframes`from { opacity: 0; } to { opacity: 1; }`} 250ms;
+ position: relative;
+ display: inline-flex;
+ flex-direction: column;
+ align-items: flex-start;
+ justify-content: center;
+ padding-left: 40px;
+ min-height: 40px; /* icon height (32) + 4 + 4 */
+
+ ${from.leftCol} {
+ padding-left: 0;
+ }
+`;
+
+const timeCSS = css`
+ ${textSans.xxsmall()};
+ display: block;
+`;
+
+const nowCSS = [
+ timeCSS,
+ css`
+ ${until.tablet} {
+ display: none;
+ }
+
+ ${from.leftCol} {
+ padding-bottom: 4px;
+ }
+ `,
+];
+
+const tempCSS = (isNow: boolean) => [
+ css`
+ display: block;
+ ${textSans.medium()};
+
+ ${from.leftCol} {
+ order: 1;
+ padding-top: 4px;
+ }
+ `,
+ isNow &&
+ css`
+ ${from.leftCol} {
+ ${textSans.xlarge()};
+ line-height: 1;
+ }
+ ${from.leftCol} {
+ ${textSans.xlarge()};
+ line-height: 1;
+ }
+ `,
+];
+
+const iconCSS = css`
+ position: absolute;
+ top: 50%;
+ left: 0px;
+ margin-top: -16px;
+
+ ${from.leftCol} {
+ position: static;
+ margin-top: 0;
+ }
+`;
+
+const LoadingIcon = () => (
+
+);
+
+export type WeatherSlotProps = WeatherData & {
+ isUS: boolean;
+ css?: SerializedStyles;
+ dateTime?: string;
+};
+
+export const WeatherSlot = ({
+ icon,
+ temperature,
+ dateTime,
+ description,
+ isUS,
+ ...props
+}: WeatherSlotProps) => {
+ const isNow = isUndefined(dateTime) || isNull(dateTime);
+
+ const Icon = lazy(() =>
+ import(`../static/icons/weather/weather-${icon}.svg`).then(
+ ({ default: Component }) => {
+ return {
+ default: () => (
+
+ ),
+ };
+ },
+ ),
+ );
+
+ return (
+
+
+ {isNow ? 'The current weather' : 'The forecast for'}
+
+ {isNow ? (
+
+ Now
+
+ ) : (
+
+ {formatTime(dateTime, isUS)}
+
+ )}
+ is
+
+ {formatTemperature(
+ isUS ? temperature.imperial : temperature.metric,
+ isUS ? 'F' : 'C',
+ )}
+
+ , {description.toLowerCase()}.
+ }>
+
+
+
+ );
+};
diff --git a/dotcom-rendering/src/components/YoutubeBlockComponent.importable.tsx b/dotcom-rendering/src/components/YoutubeBlockComponent.importable.tsx
index c71a456c143..0a82fa8a4c0 100644
--- a/dotcom-rendering/src/components/YoutubeBlockComponent.importable.tsx
+++ b/dotcom-rendering/src/components/YoutubeBlockComponent.importable.tsx
@@ -7,6 +7,7 @@ import { useEffect, useState } from 'react';
import { trackVideoInteraction } from '../client/ga/ga';
import { record } from '../client/ophan/ophan';
import { useAB } from '../lib/useAB';
+import { useAdTargeting } from '../lib/useAdTargeting';
import type { RoleType } from '../types/content';
import { Caption } from './Caption';
@@ -25,7 +26,6 @@ type Props = {
url: string;
width: number;
}[];
- adTargeting?: AdTargeting;
isMainMedia?: boolean;
height?: number;
width?: number;
@@ -80,10 +80,9 @@ export const YoutubeBlockComponent = ({
format,
hideCaption,
overrideImage,
- posterImage,
+ posterImage = [],
expired,
role,
- adTargeting,
isMainMedia,
height = 259,
width = 460,
@@ -95,6 +94,8 @@ export const YoutubeBlockComponent = ({
undefined,
);
+ const adTargeting = useAdTargeting(duration);
+
const abTests = useAB();
const abTestsApi = abTests?.api;
const imaEnabled =
@@ -201,7 +202,7 @@ export const YoutubeBlockComponent = ({
: undefined
}
posterImage={
- posterImage
+ posterImage.length > 0
? [
{
srcSet: posterImage.map((img) => ({
diff --git a/dotcom-rendering/src/discussion-rendering/App.stories.tsx b/dotcom-rendering/src/discussion-rendering/App.stories.tsx
new file mode 100644
index 00000000000..762b92a91f1
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/App.stories.tsx
@@ -0,0 +1,281 @@
+import { css } from '@emotion/react';
+import { ArticlePillar } from '@guardian/libs';
+import { App } from './App';
+import type { UserProfile } from './discussionTypes';
+
+export default { component: App, title: 'App' };
+
+const aUser: UserProfile = {
+ userId: 'abc123',
+ displayName: 'Jane Smith',
+ webUrl: '',
+ apiUrl: '',
+ avatar: '',
+ secureAvatarUrl: '',
+ badge: [],
+ privateFields: {
+ canPostComment: true,
+ isPremoderated: false,
+ hasCommented: true,
+ },
+};
+
+export const LoggedOutHiddenPicks = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+LoggedOutHiddenPicks.storyName = 'when logged out, unexpanded and with picks';
+
+export const InitialPage = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+InitialPage.storyName = 'with initial page set to 3';
+
+export const Overrides = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+Overrides.storyName = 'with page size overridden to 50';
+
+export const LoggedInHiddenNoPicks = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+LoggedInHiddenNoPicks.storyName =
+ 'when logged in, with no picks and not expanded';
+
+export const LoggedIn = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+LoggedIn.storyName = 'when logged in and expanded';
+
+export const LoggedInShortDiscussion = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+LoggedInShortDiscussion.storyName = 'when logged in but only two comments made';
+
+export const LoggedOutHiddenNoPicks = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+LoggedOutHiddenNoPicks.storyName =
+ 'when logged out, with no picks and not expanded';
+
+export const Closed = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+Closed.storyName = 'Logged in but closed for comments';
+
+export const NoComments = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+NoComments.storyName = 'when no comments have been made';
+
+export const LegacyDiscussion = () => (
+
+
{}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />
+
+);
+LegacyDiscussion.storyName = "a legacy discussion that doesn't allow threading";
diff --git a/dotcom-rendering/src/discussion-rendering/App.test.tsx b/dotcom-rendering/src/discussion-rendering/App.test.tsx
new file mode 100644
index 00000000000..5987bd025d6
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/App.test.tsx
@@ -0,0 +1,39 @@
+import '@testing-library/jest-dom/extend-expect';
+import { ArticlePillar } from '@guardian/libs';
+import {
+ render,
+ screen,
+ waitForElementToBeRemoved,
+} from '@testing-library/react';
+import { mockRESTCalls } from '../lib/mockRESTCalls';
+import { App } from './App';
+
+mockRESTCalls();
+
+describe('App', () => {
+ it('should not render the comment form if user is logged out', async () => {
+ render(
+ {}}
+ apiKey=""
+ idApiUrl="https://idapi.theguardian.com"
+ />,
+ );
+
+ await waitForElementToBeRemoved(() =>
+ screen.getByTestId('loading-comments'),
+ );
+
+ expect(screen.queryAllByText('jamesgorrie').length).toBeGreaterThan(0);
+ expect(screen.queryByPlaceholderText('Join the discussion')).toBeNull();
+ });
+});
diff --git a/dotcom-rendering/src/discussion-rendering/App.tsx b/dotcom-rendering/src/discussion-rendering/App.tsx
new file mode 100644
index 00000000000..ba29d92ab8c
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/App.tsx
@@ -0,0 +1,601 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import { neutral, space, textSans } from '@guardian/source-foundations';
+import { useEffect, useState } from 'react';
+import { CommentContainer } from './components/CommentContainer/CommentContainer';
+import { CommentForm } from './components/CommentForm/CommentForm';
+import { Filters } from './components/Filters/Filters';
+import { LoadingComments } from './components/LoadingComments/LoadingComments';
+import { Pagination } from './components/Pagination/Pagination';
+import { TopPicks } from './components/TopPicks/TopPicks';
+import type {
+ AdditionalHeadersType,
+ CommentResponse,
+ CommentType,
+ FilterOptions,
+ OrderByType,
+ PageSizeType,
+ ThreadsType,
+ UserProfile,
+} from './discussionTypes';
+import { getDiscussion, getPicks, initialiseApi } from './lib/api';
+
+type Props = {
+ shortUrl: string;
+ baseUrl: string;
+ pillar: ArticleTheme;
+ isClosedForComments: boolean;
+ commentToScrollTo?: number;
+ initialPage?: number;
+ pageSizeOverride?: PageSizeType;
+ orderByOverride?: OrderByType;
+ user?: UserProfile;
+ additionalHeaders: AdditionalHeadersType;
+ expanded: boolean;
+ onPermalinkClick: (commentId: number) => void;
+ apiKey: string;
+ onRecommend?: (commentId: number) => Promise;
+ onComment?: (shortUrl: string, body: string) => Promise;
+ onReply?: (
+ shortUrl: string,
+ body: string,
+ parentCommentId: number,
+ ) => Promise;
+ onPreview?: (body: string) => Promise;
+ onExpand?: () => void;
+ idApiUrl: string;
+};
+
+const footerStyles = css`
+ display: flex;
+ justify-content: flex-end;
+`;
+
+const commentColumnWrapperStyles = css`
+ display: flex;
+ flex-direction: column;
+ max-width: 100%;
+`;
+
+const commentContainerStyles = css`
+ display: flex;
+ flex-direction: column;
+ list-style-type: none;
+ padding-left: 0;
+ margin: 0;
+`;
+
+const picksWrapper = css`
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+`;
+
+const DEFAULT_FILTERS: FilterOptions = {
+ orderBy: 'newest',
+ pageSize: 100,
+ threads: 'collapsed',
+};
+
+const NoComments = () => (
+
+ No comments found
+
+);
+
+const rememberFilters = (filtersToRemember: FilterOptions) => {
+ try {
+ localStorage.setItem(
+ 'gu.prefs.discussion.threading',
+ JSON.stringify({ value: filtersToRemember.threads }),
+ );
+ localStorage.setItem(
+ 'gu.prefs.discussion.pagesize',
+ JSON.stringify({ value: filtersToRemember.pageSize }),
+ );
+ localStorage.setItem(
+ 'gu.prefs.discussion.order',
+ JSON.stringify({ value: filtersToRemember.orderBy }),
+ );
+ } catch (error) {
+ // Sometimes it's not possible to access localStorage, we accept this and don't want to
+ // capture these errors
+ }
+};
+
+const initialiseFilters = ({
+ pageSizeOverride,
+ orderByOverride,
+ permalinkBeingUsed,
+ isClosedForComments,
+}: {
+ pageSizeOverride?: PageSizeType;
+ orderByOverride?: OrderByType;
+ permalinkBeingUsed: boolean;
+ isClosedForComments: boolean;
+}) => {
+ const initialisedFilters = initFiltersFromLocalStorage({
+ isClosedForComments,
+ });
+ return {
+ ...initialisedFilters,
+ // Override if prop given
+ pageSize: pageSizeOverride ?? initialisedFilters.pageSize,
+ orderBy: orderByOverride ?? initialisedFilters.orderBy,
+ threads:
+ initialisedFilters.threads === 'collapsed' && permalinkBeingUsed
+ ? 'expanded'
+ : initialisedFilters.threads,
+ };
+};
+
+const initFiltersFromLocalStorage = ({
+ isClosedForComments,
+}: {
+ isClosedForComments: boolean;
+}): FilterOptions => {
+ let threads;
+ let pageSize;
+ let orderBy;
+
+ try {
+ // Try to read from local storage
+ orderBy = localStorage.getItem('gu.prefs.discussion.order');
+ threads = localStorage.getItem('gu.prefs.discussion.threading');
+ pageSize = localStorage.getItem('gu.prefs.discussion.pagesize');
+ } catch (error) {
+ return {
+ ...DEFAULT_FILTERS,
+ orderBy: decideDefaultOrderBy(isClosedForComments),
+ };
+ }
+
+ function checkPageSize(size: any): PageSizeType {
+ // This function handles the fact that some readers have legacy values
+ // stored in the browsers
+ if (!size) return DEFAULT_FILTERS.pageSize; // Default
+ if (size === 'All') return DEFAULT_FILTERS.pageSize; // Convert 'All' to default
+ const supportedSizes: PageSizeType[] = [25, 50, 100];
+ if (!supportedSizes.includes(size)) return DEFAULT_FILTERS.pageSize; // Convert anything else to default
+ return size; // size is acceptable
+ }
+
+ function decideDefaultOrderBy(isClosedForComment: boolean): OrderByType {
+ return isClosedForComments ? 'oldest' : 'newest';
+ }
+
+ // If we found something in LS, use it, otherwise return defaults
+ //todo: stop typecasting these and parse these properly instead
+ return {
+ orderBy: orderBy
+ ? (JSON.parse(orderBy) as { value: OrderByType }).value
+ : decideDefaultOrderBy(isClosedForComments),
+ threads: threads
+ ? (JSON.parse(threads) as { value: ThreadsType }).value
+ : DEFAULT_FILTERS.threads,
+ pageSize: pageSize
+ ? checkPageSize(
+ (JSON.parse(pageSize) as { value: ThreadsType }).value,
+ )
+ : DEFAULT_FILTERS.pageSize,
+ };
+};
+
+const readMutes = (): string[] => {
+ let mutes;
+ try {
+ // Try to read from local storage
+ mutes = localStorage.getItem('gu.prefs.discussion.mutes');
+ } catch (error) {
+ return [];
+ }
+
+ return mutes ? (JSON.parse(mutes) as { value: string[] }).value : [];
+};
+
+const writeMutes = (mutes: string[]) => {
+ try {
+ localStorage.setItem(
+ 'gu.prefs.discussion.mutes',
+ JSON.stringify({ value: mutes }),
+ );
+ } catch (error) {
+ // Sometimes it's not possible to access localStorage, we accept this and don't want to
+ // capture these errors
+ }
+};
+
+export const App = ({
+ baseUrl,
+ shortUrl,
+ pillar,
+ isClosedForComments,
+ initialPage,
+ commentToScrollTo,
+ pageSizeOverride,
+ orderByOverride,
+ user,
+ additionalHeaders,
+ expanded,
+ onPermalinkClick,
+ apiKey,
+ onRecommend,
+ onComment,
+ onReply,
+ onPreview,
+ onExpand,
+ idApiUrl,
+}: Props) => {
+ const [filters, setFilters] = useState(
+ initialiseFilters({
+ pageSizeOverride,
+ orderByOverride,
+ permalinkBeingUsed:
+ commentToScrollTo !== undefined &&
+ !Number.isNaN(commentToScrollTo),
+ isClosedForComments,
+ }),
+ );
+ const [isExpanded, setIsExpanded] = useState(
+ expanded || window.location.hash === '#comments',
+ );
+ const [loading, setLoading] = useState(true);
+ const [loadingMore, setLoadingMore] = useState(false);
+ const [totalPages, setTotalPages] = useState(0);
+ const [page, setPage] = useState(initialPage ?? 1);
+ const [picks, setPicks] = useState([]);
+ const [commentBeingRepliedTo, setCommentBeingRepliedTo] =
+ useState();
+ const [comments, setComments] = useState([]);
+ const [numberOfCommentsToShow, setNumberOfCommentsToShow] =
+ useState(10);
+ const [commentCount, setCommentCount] = useState(0);
+ const [mutes, setMutes] = useState(readMutes());
+
+ useEffect(() => {
+ if (isExpanded) {
+ // We want react to complete the current work and render, without trying to batch this update
+ // before resetting the number of comments
+ // to the total comment amount.
+ // This allows a quick render of minimal comments and then immediately begin rendering
+ // the remaining comments.
+ const timer = setTimeout(() => {
+ setNumberOfCommentsToShow(comments.length);
+ setLoadingMore(false);
+ }, 0);
+ return () => clearTimeout(timer);
+ } else return;
+ }, [isExpanded, comments.length]);
+
+ useEffect(() => {
+ // We need this use effect to capture any changes in the expanded prop. This is typicallly
+ // seen when clicking permalinks
+ setIsExpanded(expanded);
+ }, [expanded]);
+
+ useEffect(() => {
+ setLoading(true);
+ //todo: come back and handle the error case
+ void getDiscussion(shortUrl, { ...filters, page }).then((json) => {
+ setLoading(false);
+ setLoadingMore(true);
+ if (json && json.status !== 'error') {
+ setComments(
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- we'll come back and fix this by properly parsing the json
+ json?.discussion?.comments,
+ );
+ setCommentCount(
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- we'll come back and fix this by properly parsing the json
+ json?.discussion?.topLevelCommentCount,
+ );
+ }
+ //todo: come back and parse this properly (apologies for the horribleness)
+ setTotalPages(json?.pages as number);
+ });
+ }, [filters, page, shortUrl]);
+
+ //todo: parse this properly
+ useEffect(() => {
+ const fetchPicks = async () => {
+ const json = await getPicks(shortUrl);
+ if (json !== undefined) {
+ setPicks(json);
+ }
+ };
+ void fetchPicks();
+ }, [shortUrl]);
+
+ // If these override props are updated we want to respect them
+ useEffect(() => {
+ setFilters((oldFilters) => {
+ return {
+ ...oldFilters,
+ orderBy: orderByOverride ? orderByOverride : oldFilters.orderBy,
+ pageSize: pageSizeOverride
+ ? pageSizeOverride
+ : oldFilters.pageSize,
+ };
+ });
+ }, [pageSizeOverride, orderByOverride]);
+
+ // Keep initialPage prop in sync with page
+ useEffect(() => {
+ if (initialPage !== undefined) setPage(initialPage);
+ // We added commentToScrollTo to the deps here because the initialPage alone wasn't triggered the effect
+ // and we want to ensure the discussion rerenders with the right page when the reader clicks Jump To Comment
+ // for a comment on a different page
+ }, [initialPage, commentToScrollTo]);
+
+ // Check if there is a comment to scroll to and if
+ // so, scroll to the div with this id.
+ // We need to do this in javascript like this because the comments list isn't
+ // loaded on the inital page load and only gets added to the dom later, after
+ // an api call is made.
+ useEffect(() => {
+ if (commentToScrollTo !== undefined) {
+ const commentElement = document.getElementById(
+ `comment-${commentToScrollTo}`,
+ );
+ commentElement?.scrollIntoView();
+ }
+ }, [comments, commentToScrollTo]); // Add comments to deps so we rerun this effect when comments are loaded
+
+ const onFilterChange = (newFilterObject: FilterOptions) => {
+ // If we're reducing the pageSize then we may need to override the page we're on to prevent making
+ // requests for pages that don't exist.
+ // E.g. If we used to have 102 comments and a pageSize of 25 then the current page could be 5 (showing 2
+ // comments). If we then change pageSize to be 50 then there is no longer a page 5 and trying to ask for it
+ // from the api would return an error so, in order to respect the readers desire to be on the last page, we
+ // need to work out the maximum page possible and use that instead.
+ let maxPagePossible = Math.floor(
+ commentCount / newFilterObject.pageSize,
+ );
+ // Add 1 if there is a remainder
+ if (commentCount % newFilterObject.pageSize) {
+ maxPagePossible = maxPagePossible + 1;
+ }
+ // Check
+ if (page > maxPagePossible) setPage(maxPagePossible);
+
+ rememberFilters(newFilterObject);
+ // Filters also show when the view is not expanded but we want to expand when they're changed
+ setIsExpanded(true);
+ onExpand?.();
+ setFilters(newFilterObject);
+ };
+
+ const onPageChange = (pageNumber: number) => {
+ // Pagination also show when the view is not expanded so we want to expand when clicked
+ setIsExpanded(true);
+ const element = document.getElementById('comment-filters');
+ element?.scrollIntoView();
+ setPage(pageNumber);
+ };
+
+ const toggleMuteStatus = (userId: string) => {
+ let updatedMutes;
+ if (mutes.includes(userId)) {
+ // Already muted, unmute them
+ updatedMutes = mutes.filter((id) => id !== userId);
+ } else {
+ // Add this user to our list of mutes
+ updatedMutes = [...mutes, userId];
+ }
+ // Update local state
+ setMutes(updatedMutes);
+ // Remember these new values
+ writeMutes(updatedMutes);
+ };
+
+ const onAddComment = (comment: CommentType) => {
+ comments.pop(); // Remove last item from our local array
+ // Replace it with this new comment at the start
+ setComments([comment, ...comments]);
+
+ if (!isExpanded) {
+ // It's possible to post a comment without the view being expanded
+ setIsExpanded(true);
+ if (typeof onExpand === 'function') onExpand();
+ }
+
+ const commentElement = document.getElementById(`comment-${comment.id}`);
+ commentElement?.scrollIntoView();
+ };
+
+ initialiseApi({ additionalHeaders, baseUrl, apiKey, idApiUrl });
+
+ const showPagination = totalPages > 1;
+
+ if (!isExpanded && loading) {
+ return ;
+ }
+
+ if (!isExpanded) {
+ return (
+ <>
+
+ {picks.length !== 0 ? (
+
+
+
+ ) : (
+ <>
+
+ {showPagination && (
+
{
+ onPageChange(newPage);
+ }}
+ commentCount={commentCount}
+ filters={filters}
+ />
+ )}
+ {!comments.length ? (
+
+ ) : (
+
+ {comments.slice(0, 2).map((comment) => (
+
+
+
+ ))}
+
+ )}
+ >
+ )}
+
+ >
+ );
+ }
+
+ return (
+ <>
+
+ {user && !isClosedForComments && (
+
+ )}
+ {!!picks.length && (
+
+ )}
+
+ {showPagination && (
+
{
+ onPageChange(newPage);
+ }}
+ commentCount={commentCount}
+ filters={filters}
+ />
+ )}
+ {loading ? (
+
+ ) : !comments.length ? (
+
+ ) : (
+
+ {comments
+ .slice(0, numberOfCommentsToShow)
+ .map((comment) => (
+
+
+
+ ))}
+
+ )}
+ {loadingMore && }
+ {showPagination && (
+
+ {
+ onPageChange(newPage);
+ }}
+ commentCount={commentCount}
+ filters={filters}
+ />
+
+ )}
+ {user && !isClosedForComments && comments.length > 10 && (
+
+ )}
+
+ >
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.stories.tsx
new file mode 100644
index 00000000000..58f0950b97f
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.stories.tsx
@@ -0,0 +1,23 @@
+import { css } from '@emotion/react';
+import { ArticlePillar } from '@guardian/libs';
+import { AbuseReportForm } from './AbuseReportForm';
+
+export default { title: 'Abuse Report Form' };
+
+const wrapperStyles = css`
+ padding: 20px;
+ height: 300px;
+ width: 400px;
+ background-color: blue;
+ position: relative;
+`;
+
+export const Dialog = () => (
+
+
{}}
+ pillar={ArticlePillar.Sport}
+ commentId={123}
+ />
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.test.tsx b/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.test.tsx
new file mode 100644
index 00000000000..d28f09c597f
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.test.tsx
@@ -0,0 +1,63 @@
+import '@testing-library/jest-dom/extend-expect';
+import { ArticlePillar } from '@guardian/libs';
+import { fireEvent, render, waitFor } from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
+import { mockRESTCalls } from '../../../lib/mockRESTCalls';
+import { AbuseReportForm } from './AbuseReportForm';
+
+const fetchMock = mockRESTCalls();
+
+describe('Dropdown', () => {
+ it('Should show the expected label names', () => {
+ const { getByText } = render(
+ undefined}
+ pillar={ArticlePillar.Sport}
+ commentId={123}
+ />,
+ );
+
+ expect(getByText('Category')).toBeInTheDocument();
+ expect(getByText('Reason (optional)')).toBeInTheDocument();
+ expect(getByText('Email (optional)')).toBeInTheDocument();
+ });
+
+ it('Should show the category error message if not chosen on submit', () => {
+ const { getByText } = render(
+ undefined}
+ pillar={ArticlePillar.Sport}
+ commentId={123}
+ />,
+ );
+
+ fireEvent.click(getByText('Report'));
+ expect(
+ getByText('You must select a category before submitting'),
+ ).toBeInTheDocument();
+ });
+
+ it('Should show the success message category is selected', async () => {
+ const user = userEvent.setup();
+ const { getByText, getByLabelText, getByRole } = render(
+ undefined}
+ pillar={ArticlePillar.Sport}
+ commentId={123}
+ />,
+ );
+
+ await user.selectOptions(getByLabelText('Category'), 'Trolling');
+ await user.click(getByRole('button', { name: 'Report' }));
+
+ await waitFor(() => {
+ expect(fetchMock.lastOptions(/reportAbuse/)?.body).toBe(
+ 'categoryId=4',
+ );
+ });
+
+ await waitFor(() => {
+ expect(getByText('Report submitted')).toBeInTheDocument();
+ });
+ });
+});
diff --git a/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.tsx b/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.tsx
new file mode 100644
index 00000000000..7f9ad621299
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/AbuseReportForm/AbuseReportForm.tsx
@@ -0,0 +1,319 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import { log } from '@guardian/libs';
+import { neutral, space, textSans } from '@guardian/source-foundations';
+import { Button, SvgCross } from '@guardian/source-react-components';
+import { useEffect, useRef, useState } from 'react';
+import { reportAbuse } from '../../lib/api';
+import { palette } from '../../lib/palette';
+import { pillarToString } from '../../lib/pillarToString';
+
+type FormData = {
+ categoryId: number;
+ reason?: string;
+ email?: string;
+};
+
+const formWrapper = css`
+ z-index: 1;
+ border: 1px solid ${neutral[86]};
+ position: absolute;
+ width: 300px;
+ top: 0;
+ right: 0;
+ display: flex;
+ flex-direction: column;
+ padding: ${space[3]}px;
+ background-color: white;
+ ${textSans.xxsmall()};
+`;
+
+const labelStyles = (pillar: ArticleTheme) => css`
+ color: ${palette[pillarToString(pillar)][400]};
+ ${textSans.small({ fontWeight: 'bold' })}
+`;
+
+const inputWrapper = css`
+ display: flex;
+ flex-direction: column;
+ margin-bottom: ${space[2]}px;
+
+ label {
+ display: block;
+ }
+
+ select,
+ input,
+ textarea {
+ min-height: ${space[5]}px;
+ width: 75%;
+ border: 1px solid ${neutral[86]};
+ }
+`;
+
+const errorMessageStyles = css`
+ color: red;
+`;
+
+type Props = {
+ commentId: number;
+ toggleSetShowForm: () => void;
+ pillar: ArticleTheme;
+};
+
+export const AbuseReportForm = ({
+ commentId,
+ toggleSetShowForm,
+ pillar,
+}: Props) => {
+ const modalRef = useRef(null);
+ // TODO: use ref once forwardRef is implemented @guardian/src-button
+ // We want to pull out the 1st and last elements of the form, and highlight the 1st element
+ let firstElement: HTMLSelectElement | null = null;
+ let lastElement: HTMLButtonElement | null = null;
+ useEffect(() => {
+ if (!modalRef.current) return;
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- https://github.com/guardian/discussion-rendering/pull/56 for where this was first introduced
+ firstElement = modalRef.current.querySelector(
+ 'select[name="category"]',
+ );
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- https://github.com/guardian/discussion-rendering/pull/56 for where this was first introduced
+ lastElement = modalRef.current.querySelector(
+ 'button[custom-guardian="close-modal"]',
+ );
+ }, [modalRef]);
+ // We want to highlight the 1st element when the modal is open
+ useEffect(() => {
+ firstElement?.focus();
+ }, [firstElement]);
+
+ // We want to make sure to close the modal when a user clicks away from the modal
+ useEffect(() => {
+ const closeOnClickAway = (e: MouseEvent) => {
+ if (
+ modalRef.current &&
+ !modalRef.current.contains(e.target as Node)
+ ) {
+ toggleSetShowForm();
+ }
+ };
+ document.addEventListener('mousedown', closeOnClickAway);
+ }, [modalRef, toggleSetShowForm]);
+
+ // We want to listen to keydown events for accessibility
+ useEffect(() => {
+ const keyListener = (e: KeyboardEvent) => {
+ if (e.code === 'Escape') {
+ toggleSetShowForm();
+ } else if (e.code === 'Tab') {
+ // If firstElement or lastElement are not defined, do not continue
+ if (!firstElement || !lastElement) return;
+
+ // we use `e.shiftKey` internally to determine the direction of the highlighting
+ // using document.activeElement and e.shiftKey we can check what should be the next element to be highlighted
+ if (!e.shiftKey && document.activeElement === lastElement) {
+ firstElement.focus();
+ e.preventDefault();
+ }
+
+ if (e.shiftKey && document.activeElement === firstElement) {
+ lastElement.focus(); // The shift key is down so loop focus back to the last item
+ e.preventDefault();
+ }
+ }
+ };
+ document.addEventListener('keydown', keyListener);
+ return () => document.removeEventListener('keydown', keyListener);
+ });
+
+ const [formVariables, setFormVariables] = useState({
+ categoryId: 0,
+ reason: '',
+ email: '',
+ });
+
+ const defaultErrorTexts = {
+ categoryId: '',
+ reason: '',
+ email: '',
+ response: '',
+ };
+ const [errors, setErrors] = useState(defaultErrorTexts);
+ const [successMessage, setSuccessMessage] = useState();
+ const onSubmit = (event: React.FormEvent) => {
+ event.preventDefault();
+
+ const { categoryId, reason, email } = formVariables;
+
+ // Reset error messages
+ setErrors(defaultErrorTexts);
+
+ // Error validation
+ if (!categoryId) {
+ setErrors({
+ ...errors,
+ categoryId: 'You must select a category before submitting',
+ });
+
+ return;
+ }
+
+ reportAbuse({
+ categoryId,
+ reason,
+ email,
+ commentId,
+ })
+ .then((response) => {
+ if (response.status !== 'ok') {
+ // Fallback to errors returned from the API
+ setErrors({ ...errors, response: response.message });
+ } else {
+ setSuccessMessage('Report submitted');
+ }
+ })
+ .catch(() => {
+ log('dotcom', 'Discussion: error reporting abuse');
+ });
+ };
+
+ const labelStylesClass = labelStyles(pillar);
+ return (
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/Avatar/Avatar.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/Avatar/Avatar.stories.tsx
new file mode 100644
index 00000000000..50ec1499dcf
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Avatar/Avatar.stories.tsx
@@ -0,0 +1,35 @@
+import { Avatar } from './Avatar';
+
+export default { component: Avatar, title: 'Avatar' };
+
+export const Sizes = () => {
+ return (
+ <>
+
+
+
+ >
+ );
+};
+Sizes.storyName = 'different sizes';
+
+export const NoImage = () => {
+ return (
+ <>
+
+ >
+ );
+};
+NoImage.storyName = 'with no image url given';
diff --git a/dotcom-rendering/src/discussion-rendering/components/Avatar/Avatar.tsx b/dotcom-rendering/src/discussion-rendering/components/Avatar/Avatar.tsx
new file mode 100644
index 00000000000..7952a7662cf
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Avatar/Avatar.tsx
@@ -0,0 +1,35 @@
+import { css } from '@emotion/react';
+
+type Props = {
+ imageUrl?: string;
+ displayName: string;
+ size: 'small' | 'medium' | 'large';
+};
+
+const imageStyles = (size: number) => css`
+ border-radius: ${size + 10}px;
+ width: ${size}px;
+ height: ${size}px;
+`;
+
+export const Avatar = ({
+ imageUrl = 'https://avatar.guim.co.uk/no-user-image.gif',
+ displayName,
+ size,
+}: Props) => {
+ switch (size) {
+ case 'small':
+ return (
+
+ );
+ case 'large':
+ return (
+
+ );
+ case 'medium':
+ default:
+ return (
+
+ );
+ }
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/Badges/Badges.tsx b/dotcom-rendering/src/discussion-rendering/components/Badges/Badges.tsx
new file mode 100644
index 00000000000..931e9f86ae0
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Badges/Badges.tsx
@@ -0,0 +1,81 @@
+import { css } from '@emotion/react';
+import { brand, neutral, space, textSans } from '@guardian/source-foundations';
+
+const staffBadge = css`
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+`;
+
+const iconStyles = css`
+ display: inline-block;
+ width: 15px;
+ height: 15px;
+`;
+
+const labelText = css`
+ display: inline-block;
+ line-height: 15px;
+ margin: 0 0 0 ${space[1]}px;
+ ${textSans.xxsmall({ fontWeight: 'bold' })};
+`;
+
+const staffIcon = css`
+ fill: ${brand[400]};
+`;
+
+const staffLabel = css`
+ color: ${brand[400]};
+`;
+const guardianPickLabel = css`
+ color: ${neutral[7]};
+`;
+
+export const GuardianStaff = () => (
+
+);
+
+export const GuardianContributor = () => (
+
+);
+
+export const GuardianPick = () => (
+
+
+
+
+
+
Guardian Pick
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/Column/Column.tsx b/dotcom-rendering/src/discussion-rendering/components/Column/Column.tsx
new file mode 100644
index 00000000000..ca6f3b274a9
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Column/Column.tsx
@@ -0,0 +1,14 @@
+import { css } from '@emotion/react';
+
+type Props = { children: React.ReactNode };
+
+export const Column = ({ children }: Props) => (
+
+ {children}
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/Comment/Comment.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/Comment/Comment.stories.tsx
new file mode 100644
index 00000000000..2c63d177b05
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Comment/Comment.stories.tsx
@@ -0,0 +1,472 @@
+import { ArticlePillar } from '@guardian/libs';
+import { CommentType, UserProfile } from '../../discussionTypes';
+import { Comment } from './Comment';
+
+export default { title: 'Comment' };
+
+const commentData: CommentType = {
+ id: 25487686,
+ body: `Beau Jos pizza in Idaho Springs is a great place for mountain pizza pies . Order one with extra thick crust and drizzle it with honey. Y'all can try the Challenge if you fancy, and sketch on your napkins so your art can join their walls. This was 15 years ago, but I hope it's still there! As for music, anything from Boulder's own Big Head Todd & the Monsters - 'Broken Hearted Savior' is a good start, with 'Bittersweet' a good road track. I'm jealous!!!
`,
+ date: '26 July 2013 4:13pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25487686',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2762428',
+ displayName: 'FrankDeFord',
+ webUrl: 'https://profile.theguardian.com/user/id/2762428',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2762428',
+ avatar: 'https://avatar.guim.co.uk/user/2762428',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2762428',
+ badge: [],
+ },
+ responses: [],
+ metaData: {
+ commentCount: 2,
+ staffCommenterCount: 1,
+ editorsPickCount: 0,
+ blockedCount: 0,
+ responseCount: 1,
+ },
+};
+
+const commentStaffData: CommentType = {
+ ...commentData,
+ userProfile: {
+ ...commentData.userProfile,
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+};
+
+const commentContributorData: CommentType = {
+ ...commentData,
+ userProfile: {
+ ...commentData.userProfile,
+ badge: [
+ {
+ name: 'Contributor',
+ },
+ ],
+ },
+};
+
+const blockedCommentData = {
+ ...commentData,
+ status: 'blocked',
+ body: "This comment was removed by a moderator because it didn't abide by our community standards . Replies may also be deleted. For more detail see our FAQs .",
+};
+
+const replyCommentData: CommentType = {
+ ...commentData,
+ responseTo: {
+ displayName: 'ArtVandelay',
+ commentApiUrl: '',
+ isoDateTime: '',
+ date: '',
+ commentId: '123456',
+ commentWebUrl: '',
+ },
+};
+
+const longReplyCommentData: CommentType = {
+ ...commentData,
+ responseTo: {
+ displayName: 'ArtVandelayWithAVeryLongUserName',
+ commentApiUrl: '',
+ isoDateTime: '',
+ date: '',
+ commentId: '123456',
+ commentWebUrl: '',
+ },
+};
+
+const longBothReplyCommentData: CommentType = {
+ ...commentData,
+ userProfile: {
+ ...commentData.userProfile,
+ displayName: 'AVeryLongUserNameForThisUserToo',
+ },
+ responseTo: {
+ displayName: 'ArtVandelayWithAVeryLongUserName',
+ commentApiUrl: '',
+ isoDateTime: '',
+ date: '',
+ commentId: '123456',
+ commentWebUrl: '',
+ },
+};
+
+const user: UserProfile = {
+ userId: 'abc123',
+ displayName: 'Jane Smith',
+ webUrl: '',
+ apiUrl: '',
+ avatar: '',
+ secureAvatarUrl: '',
+ badge: [],
+ privateFields: {
+ canPostComment: true,
+ isPremoderated: false,
+ hasCommented: true,
+ },
+};
+
+const staffUser: UserProfile = {
+ userId: 'abc123',
+ displayName: 'Jane Smith',
+ webUrl: '',
+ apiUrl: '',
+ avatar: '',
+ secureAvatarUrl: '',
+ badge: [{ name: 'Staff' }],
+ privateFields: {
+ canPostComment: true,
+ isPremoderated: false,
+ hasCommented: true,
+ },
+};
+
+export const Root = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+Root.storyName = 'A root comment on desktop view';
+Root.story = {
+ parameters: {
+ viewport: { defaultViewport: 'desktop' },
+ chromatic: { viewports: [1300] },
+ },
+};
+
+export const RootMobile = () => (
+ {}}
+ isReply={false}
+ isClosedForComments={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+RootMobile.storyName = 'A root comment on mobile view';
+RootMobile.story = {
+ parameters: {
+ viewport: { defaultViewport: 'mobileMedium' },
+ chromatic: { viewports: [375] },
+ },
+};
+
+export const ReplyComment = () => (
+ {}}
+ isReply={true}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+ReplyComment.storyName = 'A reply on desktop view';
+ReplyComment.story = {
+ parameters: {
+ viewport: { defaultViewport: 'desktop' },
+ chromatic: { viewports: [1300] },
+ },
+};
+
+export const MobileReply = () => (
+ {}}
+ isReply={true}
+ isClosedForComments={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+MobileReply.storyName = 'A reply on mobile view';
+MobileReply.story = {
+ parameters: {
+ viewport: { defaultViewport: 'mobileMedium' },
+ chromatic: { viewports: [375] },
+ },
+};
+
+export const LongMobileReply = () => (
+ {}}
+ isReply={true}
+ isClosedForComments={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+LongMobileReply.storyName = 'A long username reply on mobile view';
+LongMobileReply.story = {
+ parameters: {
+ viewport: { defaultViewport: 'mobileMedium' },
+ chromatic: { viewports: [375] },
+ },
+};
+
+export const LongBothMobileReply = () => (
+ {}}
+ isReply={true}
+ isClosedForComments={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+LongBothMobileReply.storyName = 'Both long usernames replying on mobile view';
+LongBothMobileReply.story = {
+ parameters: {
+ viewport: { defaultViewport: 'mobileMedium' },
+ chromatic: { viewports: [375] },
+ },
+};
+
+export const PickedComment = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+PickedComment.storyName = 'Picked Comment';
+
+export const StaffUserComment = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+StaffUserComment.storyName = 'Staff User Comment';
+
+export const ContributorUserComment = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+ContributorUserComment.storyName = 'Contributor User Comment';
+
+export const PickedStaffUserComment = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+PickedStaffUserComment.storyName = 'with staff and picked badges on desktop';
+PickedStaffUserComment.story = {
+ parameters: {
+ viewport: { defaultViewport: 'desktop' },
+ chromatic: { viewports: [1300] },
+ },
+};
+
+export const PickedStaffUserCommentMobile = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+PickedStaffUserCommentMobile.storyName =
+ 'with staff and picked badges on mobile';
+PickedStaffUserCommentMobile.story = {
+ parameters: {
+ viewport: { defaultViewport: 'mobileMedium' },
+ chromatic: { viewports: [375] },
+ },
+};
+
+export const ContributorUserCommentDesktop = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+ContributorUserCommentDesktop.storyName =
+ 'with contributor and picked badges on desktop';
+ContributorUserCommentDesktop.story = {
+ parameters: {
+ viewport: { defaultViewport: 'desktop' },
+ chromatic: { viewports: [1300] },
+ },
+};
+
+export const ContributorUserCommentMobile = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+ContributorUserCommentMobile.storyName =
+ 'with contributor and picked badges on mobile';
+ContributorUserCommentMobile.story = {
+ parameters: {
+ viewport: { defaultViewport: 'mobileMedium' },
+ chromatic: { viewports: [375] },
+ },
+};
+
+export const LoggedInAsModerator = () => (
+ {}}
+ user={staffUser}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+LoggedInAsModerator.storyName = 'Logged in as moderator';
+
+export const LoggedInAsUser = () => (
+ {}}
+ user={user}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+LoggedInAsUser.storyName = 'Logged in as normal user';
+
+export const BlockedComment = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+BlockedComment.storyName = 'Blocked comment';
+
+export const MutedComment = () => (
+ {}}
+ isReply={false}
+ isMuted={true}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+MutedComment.storyName = 'Muted comment';
+
+export const ClosedForComments = () => (
+ {}}
+ isReply={false}
+ isMuted={false}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+ClosedForComments.storyName = 'A closed comment on desktop view';
+ClosedForComments.story = {
+ parameters: {
+ viewport: { defaultViewport: 'desktop' },
+ chromatic: { viewports: [1300] },
+ },
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/Comment/Comment.tsx b/dotcom-rendering/src/discussion-rendering/components/Comment/Comment.tsx
new file mode 100644
index 00000000000..19a9057dcfb
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Comment/Comment.tsx
@@ -0,0 +1,814 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import {
+ border,
+ brand,
+ from,
+ neutral,
+ remSpace,
+ space,
+ textSans,
+ until,
+} from '@guardian/source-foundations';
+import { Button, Link, SvgIndent } from '@guardian/source-react-components';
+import { useState } from 'react';
+import type { CommentType, UserProfile } from '../../discussionTypes';
+import { pickComment, unPickComment } from '../../lib/api';
+import { createAuthenticationEventParams } from '../../lib/identity-component-event';
+import { palette } from '../../lib/palette';
+import { pillarToString } from '../../lib/pillarToString';
+import { AbuseReportForm } from '../AbuseReportForm/AbuseReportForm';
+import { Avatar } from '../Avatar/Avatar';
+import {
+ GuardianContributor,
+ GuardianPick,
+ GuardianStaff,
+} from '../Badges/Badges';
+import { Column } from '../Column/Column';
+import { RecommendationCount } from '../RecommendationCount/RecommendationCount';
+import { Row } from '../Row/Row';
+import { Timestamp } from '../Timestamp/Timestamp';
+
+type Props = {
+ user?: UserProfile;
+ comment: CommentType;
+ pillar: ArticleTheme;
+ isClosedForComments: boolean;
+ setCommentBeingRepliedTo: (commentBeingRepliedTo?: CommentType) => void;
+ isReply: boolean;
+ wasScrolledTo?: boolean;
+ isMuted: boolean;
+ toggleMuteStatus: (userId: string) => void;
+ onPermalinkClick: (commentId: number) => void;
+ onRecommend?: (commentId: number) => Promise;
+};
+
+const commentControlsLink = (pillar: ArticleTheme) => css`
+ margin-top: -2px;
+
+ a {
+ ${textSans.small({ fontWeight: 'bold' })}
+ margin-right: ${space[2]}px;
+ color: ${palette[pillarToString(pillar)][400]};
+ /*
+ We do not want underline to be applied to SVG
+ therefore we override the styles and apply them to the nested
+ */
+ :hover {
+ text-decoration: none;
+ text-decoration-color: none;
+ span {
+ color: ${palette[pillarToString(pillar)][400]};
+ text-decoration: underline;
+ text-decoration-color: ${palette[pillarToString(pillar)][400]};
+ }
+ }
+ }
+`;
+
+const spaceBetween = css`
+ display: flex;
+ justify-content: space-between;
+`;
+
+const commentCss = css`
+ display: block;
+ clear: left;
+ ${textSans.small()}
+ margin-top: ${remSpace[2]};
+ margin-bottom: ${remSpace[3]};
+ word-break: break-word;
+
+ p {
+ margin-top: 0;
+ margin-bottom: ${space[3]}px;
+ }
+
+ blockquote {
+ margin-top: ${space[3]}px;
+ margin-bottom: ${space[3]}px;
+ margin-left: ${space[5]}px;
+ margin-right: ${space[5]}px;
+ padding-left: ${space[2]}px;
+ color: ${neutral[46]};
+ }
+
+ i {
+ font-style: italic;
+ }
+
+ b {
+ font-weight: bold;
+ }
+
+ code {
+ /* stylelint-disable-next-line property-disallowed-list -- we do not have a monospace Source font */
+ font-family: monospace;
+ font-size: 1em;
+ }
+`;
+
+const blockedCommentStyles = css`
+ color: ${neutral[46]};
+ ${textSans.xxsmall()}
+`;
+
+// to override a tag styles from dangerouslySetInnerHTML
+const commentLinkStyling = css`
+ a {
+ color: ${brand[500]};
+ text-decoration: none;
+ :hover {
+ text-decoration: underline;
+ }
+ }
+`;
+
+const commentWrapper = css`
+ border-top: 1px solid ${border.secondary};
+ display: flex;
+ padding: ${space[2]}px 0;
+`;
+
+const selectedStyles = css`
+ background-color: ${neutral[97]};
+ margin-left: -${space[2]}px;
+ padding-left: ${space[2]}px;
+ margin-right: -${space[2]}px;
+ padding-right: ${space[2]}px;
+`;
+
+const avatarMargin = css`
+ margin-right: ${space[2]}px;
+
+ ${until.mobileLandscape} {
+ display: none;
+ }
+`;
+
+const colourStyles = (pillar: ArticleTheme) => css`
+ a {
+ color: ${palette[pillarToString(pillar)][400]};
+ text-decoration-color: ${palette[pillarToString(pillar)][400]};
+ :hover {
+ color: ${palette[pillarToString(pillar)][400]};
+ text-decoration-color: ${palette[pillarToString(pillar)][400]};
+ }
+ }
+`;
+
+const boldFont = css`
+ a {
+ ${textSans.small({ fontWeight: 'bold' })}
+ }
+`;
+
+const regularFont = css`
+ a {
+ ${textSans.small()}
+ }
+`;
+
+// TODO: fix using !important
+const svgReplyArrow = css`
+ svg {
+ /* stylelint-disable-next-line declaration-no-important */
+ fill: ${neutral[46]} !important;
+ }
+`;
+
+const commentDetails = css`
+ flex-grow: 1;
+ width: 100%;
+`;
+
+const headerStyles = css`
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+`;
+
+const iconWrapper = css`
+ padding: 2px;
+ white-space: nowrap;
+`;
+
+const timestampWrapperStyles = css`
+ margin-left: ${space[2]}px;
+ margin-bottom: -2px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+`;
+
+const hideBelowMobileLandscape = css`
+ ${until.mobileLandscape} {
+ display: none;
+ }
+`;
+
+const hideAboveMobileLandscape = css`
+ ${from.mobileLandscape} {
+ display: none;
+ }
+`;
+
+const negativeMargin = css`
+ margin-top: 0px;
+ margin-bottom: -6px;
+`;
+
+const cssTextOverflowElip = css`
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+`;
+
+const cssReplyToWrapper = css`
+ ${until.mobileLandscape} {
+ padding-right: 10px;
+ width: calc(100% - 35px);
+ box-sizing: border-box;
+ }
+`;
+
+const buttonLinkPillarBaseStyles = (pillar: ArticleTheme) => css`
+ button {
+ color: ${palette[pillarToString(pillar)][400]};
+ background-color: transparent;
+ height: 18px;
+ min-height: 18px;
+ /* Radius 0 is used to style focus halo */
+ border-radius: 0;
+
+ :hover {
+ text-decoration: underline;
+ text-decoration-color: ${palette[pillarToString(pillar)][400]};
+ }
+ }
+`;
+
+const buttonLinkBaseStyles = css`
+ button {
+ color: ${neutral[46]};
+ background-color: transparent;
+ height: 18px;
+ min-height: 18px;
+ /* Radius 0 is used to style focus halo */
+ border-radius: 0;
+
+ :hover {
+ text-decoration: underline;
+ text-decoration-color: ${neutral[46]};
+ }
+ }
+`;
+
+const subdued = css`
+ text-decoration: none;
+`;
+
+// In order to show as much of the usernames as possible without fixed widths:
+// - First label should shrink to contents but be no bigger than 60%
+// - Second label should never force first label less than its contents if less than 60%
+// - Second label should fill remaining space after above
+// - Both labels should truncate with ellipsis if they fill their space
+// Test page: https://codepen.io/gtrufitt/pen/LYGKQyY
+
+const cssReplyAlphaDisplayName = css`
+ ${until.mobileLandscape} {
+ ${cssTextOverflowElip}
+ width: 100%;
+ max-width: fit-content;
+ }
+`;
+
+const cssReplyBetaDisplayName = css`
+ ${until.mobileLandscape} {
+ ${cssTextOverflowElip}
+ min-width: 40%;
+ flex-grow: 1;
+ }
+`;
+
+const Space = ({ amount }: { amount: 1 | 2 | 3 | 4 | 5 | 6 | 9 | 12 | 24 }) => (
+
+);
+
+export const Comment = ({
+ comment,
+ pillar,
+ isClosedForComments,
+ setCommentBeingRepliedTo,
+ user,
+ isReply,
+ wasScrolledTo,
+ isMuted,
+ toggleMuteStatus,
+ onPermalinkClick,
+ onRecommend,
+}: Props) => {
+ const [isHighlighted, setIsHighlighted] = useState(
+ comment.isHighlighted,
+ );
+ const [error, setError] = useState();
+
+ const [showAbuseReportForm, setAbuseReportForm] = useState(false);
+ const toggleSetShowForm = () => setAbuseReportForm(!showAbuseReportForm);
+
+ const pick = async () => {
+ setError('');
+ const response = await pickComment(comment.id);
+ if (response.status === 'error') {
+ setError(response.message);
+ } else {
+ setIsHighlighted(true);
+ }
+ };
+
+ const unPick = async () => {
+ setError('');
+ const response = await unPickComment(comment.id);
+ if (response.status === 'error') {
+ setError(response.message);
+ } else {
+ setIsHighlighted(false);
+ }
+ };
+
+ const showStaffBadge = comment.userProfile.badge.some(
+ (obj) => obj['name'] === 'Staff',
+ );
+
+ const showPickBadge = comment.status !== 'blocked' && isHighlighted;
+
+ // A contributor could be e.g. a freelancer that commonly comments on articles.
+ // In frontend we check/display the Staff badge else we check/display the
+ // Contributor - we shouldn't see both Staff & Contributor badges.
+ // https://github.com/guardian/frontend/blob/main/discussion/app/views/fragments/commentBadges.scala.html#L8
+ const showContributorBadge = comment.userProfile.badge.some(
+ (obj) => obj['name'] === 'Contributor',
+ );
+
+ return (
+ <>
+ {!!error && (
+
+ {error}
+
+ )}
+
+ >
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.stories.tsx
new file mode 100644
index 00000000000..a5d047b6d0c
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.stories.tsx
@@ -0,0 +1,256 @@
+import { ArticlePillar } from '@guardian/libs';
+import { CommentType } from '../../discussionTypes';
+import { CommentContainer } from './CommentContainer';
+
+export default { title: 'CommentContainer' };
+
+const commentData: CommentType = {
+ id: 25487686,
+ body: "Beau Jos pizza in Idaho Springs is a great place for mountain pizza pies. Order one with extra thick crust and drizzle it with honey. Y'all can try the Challenge if you fancy, and sketch on your napkins so your art can join their walls. This was 15 years ago, but I hope it's still there! As for music, anything from Boulder's own Big Head Todd & the Monsters - 'Broken Hearted Savior' is a good start, with 'Bittersweet' a good road track. I'm jealous!!!
",
+ date: '26 July 2013 4:13pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25487686',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2762428',
+ displayName: 'FrankDeFord',
+ webUrl: 'https://profile.theguardian.com/user/id/2762428',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2762428',
+ avatar: 'https://avatar.guim.co.uk/user/2762428',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2762428',
+ badge: [],
+ },
+ responses: [],
+ metaData: {
+ commentCount: 2,
+ staffCommenterCount: 1,
+ editorsPickCount: 0,
+ blockedCount: 0,
+ responseCount: 1,
+ },
+};
+
+const threadComment: CommentType = {
+ id: 25488498,
+ body: "It's still there FrankDeFord - and thanks, I will pass that on
",
+ date: '26 July 2013 4:35pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25488498',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25488498',
+ numRecommends: 0,
+ isHighlighted: false,
+ responseTo: {
+ displayName: 'FrankDeFord',
+ commentApiUrl:
+ 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ date: '26 July 2013 4:13pm',
+ commentId: '25487686',
+ commentWebUrl:
+ 'https://discussion.theguardian.com/comment-permalink/25487686',
+ },
+ userProfile: {
+ userId: '3150446',
+ displayName: 'AndyPietrasik',
+ webUrl: 'https://profile.theguardian.com/user/id/3150446',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3150446',
+ avatar: 'https://avatar.guim.co.uk/user/3150446',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3150446',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+};
+
+const threadCommentWithLongUsernames: CommentType = {
+ id: 25488498,
+ body: "It's still there FrankDeFord - and thanks, I will pass that on
",
+ date: '26 July 2013 4:35pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25488498',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25488498',
+ numRecommends: 0,
+ isHighlighted: false,
+ responseTo: {
+ displayName: 'FrankDeFord',
+ commentApiUrl:
+ 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ date: '26 July 2013 4:13pm',
+ commentId: '25487686',
+ commentWebUrl:
+ 'https://discussion.theguardian.com/comment-permalink/25487686',
+ },
+ userProfile: {
+ userId: '3150446',
+ displayName: 'ThisIsAVeryLongUserNameTooLongInFact',
+ webUrl: 'https://profile.theguardian.com/user/id/3150446',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3150446',
+ avatar: 'https://avatar.guim.co.uk/user/3150446',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3150446',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+};
+
+const commentDataWithLongThread: CommentType = {
+ id: 25487686,
+ body: "Beau Jos pizza in Idaho Springs is a great place for mountain pizza pies. Order one with extra thick crust and drizzle it with honey. Y'all can try the Challenge if you fancy, and sketch on your napkins so your art can join their walls. This was 15 years ago, but I hope it's still there! As for music, anything from Boulder's own Big Head Todd & the Monsters - 'Broken Hearted Savior' is a good start, with 'Bittersweet' a good road track. I'm jealous!!!
",
+ date: '26 July 2013 4:13pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25487686',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2762428',
+ displayName: 'FrankDeFord',
+ webUrl: 'https://profile.theguardian.com/user/id/2762428',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2762428',
+ avatar: 'https://avatar.guim.co.uk/user/2762428',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2762428',
+ badge: [],
+ },
+ responses: [],
+ metaData: {
+ commentCount: 6,
+ staffCommenterCount: 1,
+ editorsPickCount: 0,
+ blockedCount: 0,
+ responseCount: 5,
+ },
+};
+
+const aUser = {
+ userId: 'abc123',
+ displayName: 'Jane Smith',
+ webUrl: '',
+ apiUrl: '',
+ avatar: '',
+ secureAvatarUrl: '',
+ badge: [],
+ privateFields: {
+ canPostComment: true,
+ isPremoderated: false,
+ hasCommented: true,
+ },
+};
+
+const commentDataThreaded: CommentType = {
+ ...commentData,
+ ...{
+ responses: [threadComment],
+ },
+};
+
+const commentDataThreadedWithLongThread: CommentType = {
+ ...commentDataWithLongThread,
+ ...{
+ responses: [threadComment],
+ },
+};
+
+const commentDataThreadedWithLongUserNames: CommentType = {
+ ...commentData,
+ ...{
+ responses: [threadCommentWithLongUsernames],
+ },
+};
+
+export const defaultStory = () => (
+ {}}
+ mutes={[]}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+defaultStory.storyName = 'default';
+
+export const threadedComment = () => (
+ {}}
+ mutes={[]}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+threadedComment.storyName = 'threaded';
+
+export const threadedCommentWithShowMore = () => (
+ {}}
+ mutes={[]}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+threadedCommentWithShowMore.storyName = 'threaded with show more button';
+
+export const threadedCommentWithLongUsernames = () => (
+ {}}
+ mutes={[]}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+threadedCommentWithLongUsernames.storyName = 'threaded with long usernames';
+
+export const threadedCommentWithLongUsernamesMobile = () => (
+ {}}
+ mutes={[]}
+ toggleMuteStatus={() => {}}
+ onPermalinkClick={() => {}}
+ />
+);
+threadedCommentWithLongUsernamesMobile.storyName =
+ 'threaded with long usernames on mobile display';
+threadedCommentWithLongUsernamesMobile.story = {
+ parameters: {
+ viewport: { defaultViewport: 'mobileMedium' },
+ chromatic: { viewports: [375] },
+ },
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.test.tsx b/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.test.tsx
new file mode 100644
index 00000000000..2d2a8a13869
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.test.tsx
@@ -0,0 +1,189 @@
+import '@testing-library/jest-dom/extend-expect';
+import { ArticlePillar } from '@guardian/libs';
+import { fireEvent, render, waitFor } from '@testing-library/react';
+import { comment } from '../../../../fixtures/manual/comment';
+import { mockedMessageID, mockRESTCalls } from '../../../lib/mockRESTCalls';
+import type { CommentType } from '../../discussionTypes';
+import { CommentContainer } from './CommentContainer';
+
+mockRESTCalls();
+
+// @ts-expect-error -- We know this is not `undefined`
+const firstCommentResponse: CommentType = comment.responses[0];
+
+const commentWithReply: CommentType = {
+ ...comment,
+ responses: [firstCommentResponse],
+};
+
+const commentWithoutReply: CommentType = {
+ ...comment,
+ responses: [],
+};
+
+const aUser = {
+ userId: 'abc123',
+ displayName: 'Jane Smith',
+ webUrl: '',
+ apiUrl: '',
+ avatar: '',
+ secureAvatarUrl: '',
+ badge: [],
+ privateFields: {
+ canPostComment: true,
+ isPremoderated: false,
+ hasCommented: true,
+ },
+};
+
+describe('CommentContainer', () => {
+ it('Post a comment to a root comment', async () => {
+ const newCommentText = 'A brand new comment';
+
+ // a workaround to emulating hooks outside of render
+ let commentBeingRepliedTo: CommentType | undefined =
+ commentWithoutReply;
+ const mockSetCommentBeingRepliedTo = jest.fn(
+ (newCommentBeingRepliedTo?: CommentType) => {
+ commentBeingRepliedTo = newCommentBeingRepliedTo;
+ },
+ );
+
+ // https://stackoverflow.com/a/52335414
+ Element.prototype.scrollIntoView = () => {};
+
+ const { getByTestId, queryByText, getByText, rerender } = render(
+ {}}
+ onPermalinkClick={() => {}}
+ />,
+ );
+
+ // expect Comment Form to be present
+ expect(getByText('Post your comment')).toBeInTheDocument();
+
+ // add comment to textarea
+ fireEvent.change(getByTestId('comment-input'), {
+ target: { value: newCommentText },
+ });
+
+ // Submit form
+ fireEvent.click(getByText('Post your comment'));
+
+ // make sure mock function has been called
+ await waitFor(() =>
+ expect(mockSetCommentBeingRepliedTo).toHaveBeenCalledTimes(1),
+ );
+
+ // make sure the new comment appeats
+ await waitFor(() => {
+ expect(getByTestId(mockedMessageID)).toBeInTheDocument();
+ });
+
+ // rerender with updated commentBeingRepliedTo
+ rerender(
+ {}}
+ onPermalinkClick={() => {}}
+ />,
+ );
+
+ // make sure the comment form submit button does not appear anymore
+ // note: we need to use queryByText or else we get an error
+ const commentFormSubmitButton = queryByText('Post your comment');
+ expect(commentFormSubmitButton).toBeNull();
+ });
+
+ it('Post a comment to a reply comment', async () => {
+ const newCommentText = 'A brand new comment';
+
+ // a workaround to emulating hooks outside of render
+ let commentBeingRepliedTo: CommentType | undefined =
+ firstCommentResponse;
+ const mockSetCommentBeingRepliedTo = jest.fn(
+ (newCommentBeingRepliedTo?: CommentType) => {
+ commentBeingRepliedTo = newCommentBeingRepliedTo;
+ },
+ );
+
+ // https://stackoverflow.com/a/52335414
+ Element.prototype.scrollIntoView = () => {};
+
+ const { getByTestId, queryByText, getByText, rerender } = render(
+ {}}
+ onPermalinkClick={() => {}}
+ />,
+ );
+
+ // expect Comment Form to be present
+ expect(getByText('Post your comment')).toBeInTheDocument();
+
+ // add comment to textarea
+ fireEvent.change(getByTestId('comment-input'), {
+ target: { value: newCommentText },
+ });
+
+ // Submit form
+ fireEvent.click(getByText('Post your comment'));
+
+ // make sure mock function has been called
+ await waitFor(() =>
+ expect(mockSetCommentBeingRepliedTo).toHaveBeenCalledTimes(1),
+ );
+
+ // make sure the new comment appeats
+ await waitFor(() => {
+ expect(getByTestId(mockedMessageID)).toBeInTheDocument();
+ });
+
+ // rerender with updated commentBeingRepliedTo
+ rerender(
+ {}}
+ onPermalinkClick={() => {}}
+ />,
+ );
+
+ // make sure the comment form submit button does not appear anymore
+ // note: we need to use queryByText or else we get an error
+ const commentFormSubmitButton = queryByText('Post your comment');
+ expect(commentFormSubmitButton).toBeNull();
+ });
+});
diff --git a/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.tsx b/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.tsx
new file mode 100644
index 00000000000..cccf2b24eed
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/CommentContainer/CommentContainer.tsx
@@ -0,0 +1,237 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import { border, neutral, space } from '@guardian/source-foundations';
+import { SvgPlus } from '@guardian/source-react-components';
+import { useEffect, useState } from 'react';
+import type {
+ CommentResponse,
+ CommentType,
+ ThreadsType,
+ UserProfile,
+} from '../../discussionTypes';
+import { getMoreResponses } from '../../lib/api';
+import { Comment } from '../Comment/Comment';
+import { CommentForm } from '../CommentForm/CommentForm';
+import { CommentReplyPreview } from '../CommentReplyPreview/CommentReplyPreview';
+import { PillarButton } from '../PillarButton/PillarButton';
+
+type Props = {
+ comment: CommentType;
+ pillar: ArticleTheme;
+ isClosedForComments: boolean;
+ shortUrl: string;
+ user?: UserProfile;
+ threads: ThreadsType;
+ commentBeingRepliedTo?: CommentType;
+ setCommentBeingRepliedTo: (commentBeingRepliedTo?: CommentType) => void;
+ commentToScrollTo?: number;
+ mutes: string[];
+ toggleMuteStatus: (userId: string) => void;
+ onPermalinkClick: (commentId: number) => void;
+ onRecommend?: (commentId: number) => Promise;
+ onComment?: (shortUrl: string, body: string) => Promise;
+ onReply?: (
+ shortUrl: string,
+ body: string,
+ parentCommentId: number,
+ ) => Promise;
+ onPreview?: (body: string) => Promise;
+};
+
+const nestingStyles = css`
+ list-style-type: none;
+ padding-left: ${space[2]}px;
+ margin-left: ${space[12]}px;
+`;
+
+const topBorder = css`
+ border-top: 1px solid ${border.secondary};
+`;
+
+const commentContainerStyles = css`
+ list-style-type: none;
+ padding-left: 0;
+`;
+
+const selectedStyles = css`
+ background-color: ${neutral[97]};
+ margin-left: -${space[2]}px;
+ padding-left: ${space[2]}px;
+ margin-right: -${space[2]}px;
+ padding-right: ${space[2]}px;
+`;
+
+const removeMargin = css`
+ margin: 0px;
+`;
+
+export const avatar = (avatarSize: number) => css`
+ border-radius: ${avatarSize + 10}px;
+ width: ${avatarSize}px;
+ height: ${avatarSize}px;
+`;
+
+export const CommentContainer = ({
+ comment,
+ pillar,
+ isClosedForComments,
+ user,
+ shortUrl,
+ threads,
+ commentBeingRepliedTo,
+ setCommentBeingRepliedTo,
+ commentToScrollTo,
+ mutes,
+ toggleMuteStatus,
+ onPermalinkClick,
+ onRecommend,
+ onComment,
+ onReply,
+ onPreview,
+}: Props) => {
+ // Filter logic
+ const [expanded, setExpanded] = useState(threads === 'expanded');
+ const [responses, setResponses] = useState(comment.responses ?? []);
+ const [loading, setLoading] = useState(false);
+
+ const showResponses = threads !== 'unthreaded';
+
+ /**
+ * @param responseCount a number > 3
+ */
+ const decideShowMoreText = (responseCount: number) => {
+ const remainingResponses = responseCount - 3;
+ if (remainingResponses === 1) return `Show 1 more reply`;
+ return `Show ${remainingResponses} more replies`;
+ };
+
+ useEffect(() => {
+ setResponses(comment.responses ?? []);
+ }, [comment]);
+
+ const expand = (commentId: number) => {
+ setLoading(true);
+ getMoreResponses(commentId)
+ .then((json) => {
+ setExpanded(true);
+ setResponses(json.comment.responses ?? []);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+
+
+
+ <>
+ {showResponses && responses.length > 0 && (
+
+
+ {responses.map((responseComment) => (
+
+
+
+ ))}
+
+ {!expanded &&
+ comment.metaData &&
+ !!comment.metaData.responseCount &&
+ comment.metaData.responseCount > 3 && (
+
+
}
+ iconSide="left"
+ linkName="Show more replies"
+ onClick={() => expand(comment.id)}
+ pillar={pillar}
+ size="xsmall"
+ >
+ {loading
+ ? 'loading...'
+ : decideShowMoreText(
+ comment.metaData
+ .responseCount,
+ )}
+
+
+ )}
+
+ )}
+ {commentBeingRepliedTo &&
+ (commentBeingRepliedTo.id === comment.id ||
+ responses.find(
+ (response: CommentType) =>
+ response.id === commentBeingRepliedTo.id,
+ )) &&
+ user && (
+
+ )}
+ >
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/CommentForm/CommentForm.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/CommentForm/CommentForm.stories.tsx
new file mode 100644
index 00000000000..1d51d53a620
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/CommentForm/CommentForm.stories.tsx
@@ -0,0 +1,100 @@
+import { ArticlePillar } from '@guardian/libs';
+import { CommentType } from '../../discussionTypes';
+import { CommentForm } from './CommentForm';
+
+export default { component: CommentForm, title: 'CommentForm' };
+
+const shortUrl = '/p/39f5z';
+
+const aUser = {
+ userId: 'abc123',
+ displayName: 'Jane Smith',
+ webUrl: '',
+ apiUrl: '',
+ avatar: '',
+ secureAvatarUrl: '',
+ badge: [],
+ privateFields: {
+ canPostComment: true,
+ isPremoderated: false,
+ hasCommented: true,
+ },
+};
+
+const aComment: CommentType = {
+ id: 25487686,
+ body: "Beau Jos pizza in Idaho Springs is a great place for mountain pizza pies. Order one with extra thick crust and drizzle it with honey. Y'all can try the Challenge if you fancy, and sketch on your napkins so your art can join their walls. This was 15 years ago, but I hope it's still there! As for music, anything from Boulder's own Big Head Todd & the Monsters - 'Broken Hearted Savior' is a good start, with 'Bittersweet' a good road track. I'm jealous!!!
",
+ date: '26 July 2013 4:13pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25487686',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2762428',
+ displayName: 'FrankDeFord',
+ webUrl: 'https://profile.theguardian.com/user/id/2762428',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2762428',
+ avatar: 'https://avatar.guim.co.uk/user/2762428',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2762428',
+ badge: [],
+ },
+ responses: [],
+ metaData: {
+ commentCount: 2,
+ staffCommenterCount: 1,
+ editorsPickCount: 0,
+ blockedCount: 0,
+ responseCount: 1,
+ },
+};
+
+export const Default = () => (
+ {}}
+ />
+);
+Default.storyName = 'default';
+
+// This story has a mocked post endpoint that returns an error, see 97d6eab4a98917f63bc96a7ac64f7ca7
+export const Error = () => (
+ {}}
+ />
+);
+Error.storyName = 'form with errors';
+
+export const Active = () => (
+ {}}
+ commentBeingRepliedTo={aComment}
+ />
+);
+Active.storyName = 'form is active';
+
+export const Premoderated = () => (
+ {}}
+ commentBeingRepliedTo={aComment}
+ />
+);
+Premoderated.storyName = 'user is premoderated';
diff --git a/dotcom-rendering/src/discussion-rendering/components/CommentForm/CommentForm.tsx b/dotcom-rendering/src/discussion-rendering/components/CommentForm/CommentForm.tsx
new file mode 100644
index 00000000000..cf2c2558647
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/CommentForm/CommentForm.tsx
@@ -0,0 +1,563 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import { neutral, space, text, textSans } from '@guardian/source-foundations';
+import { useEffect, useRef, useState } from 'react';
+import type {
+ CommentResponse,
+ CommentType,
+ UserProfile,
+} from '../../discussionTypes';
+import {
+ addUserName,
+ comment as defaultComment,
+ preview as defaultPreview,
+ reply as defaultReply,
+} from '../../lib/api';
+import { simulateNewComment } from '../../lib/simulateNewComment';
+import { FirstCommentWelcome } from '../FirstCommentWelcome/FirstCommentWelcome';
+import { PillarButton } from '../PillarButton/PillarButton';
+import { Preview } from '../Preview/Preview';
+import { Row } from '../Row/Row';
+
+type Props = {
+ shortUrl: string;
+ pillar: ArticleTheme;
+ user: UserProfile;
+ onAddComment: (response: CommentType) => void;
+ setCommentBeingRepliedTo?: () => void;
+ commentBeingRepliedTo?: CommentType;
+ onComment?: (shortUrl: string, body: string) => Promise;
+ onReply?: (
+ shortUrl: string,
+ body: string,
+ parentCommentId: number,
+ ) => Promise;
+ onPreview?: (body: string) => Promise;
+};
+
+const boldString = (str: string) => `${str} `;
+const italicsString = (str: string) => `${str} `;
+const strikethroughString = (str: string) => `${str}`;
+const codeString = (str: string) => `${str}
`;
+const quoteString = (str: string) => `${str} `;
+const linkStringFunc = (url: string, highlightedText?: string) =>
+ `${
+ highlightedText ? highlightedText : url
+ } `;
+
+const formWrapper = css`
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: ${space[5]}px;
+`;
+
+const commentTextArea = css`
+ width: 100%;
+ margin-bottom: ${space[3]}px;
+ padding: 8px 10px 10px 8px;
+ ${textSans.small()};
+ border-color: ${neutral[86]};
+ :focus {
+ border-color: ${neutral[46]};
+ outline: none;
+ }
+`;
+
+const greyPlaceholder = css`
+ ::placeholder {
+ color: ${neutral[46]};
+ }
+`;
+
+// Opacity? See: https://stackoverflow.com/questions/19621306/css-placeholder-text-color-on-firefox
+const blackPlaceholder = css`
+ ::placeholder {
+ font-weight: bold;
+ opacity: 1;
+ color: ${neutral[0]};
+ }
+`;
+
+const headerTextStyles = css`
+ margin: 0;
+ ${textSans.xxsmall()};
+`;
+
+const errorTextStyles = css`
+ margin: 0;
+ ${textSans.xxsmall()};
+ color: ${text.error};
+`;
+
+const infoTextStyles = css`
+ margin: 0;
+ ${textSans.xxsmall()};
+ color: ${text.supporting};
+`;
+
+const msgContainerStyles = css`
+ margin-top: 8px;
+`;
+
+const linkStyles = css`
+ a {
+ color: ${text.anchorPrimary};
+ text-decoration: none;
+ :hover,
+ :focus {
+ text-decoration: underline;
+ }
+ }
+`;
+
+const wrapperHeaderTextStyles = css`
+ background-color: ${neutral[97]};
+ padding: 8px 10px 10px 8px;
+ width: 100%;
+ margin-top: 8px;
+ margin-bottom: 2px;
+`;
+
+const commentAddOns = css`
+ height: 22px;
+ font-size: 13px;
+ line-height: 17px;
+ border: 1px solid ${neutral[100]};
+ color: ${neutral[46]};
+ text-align: center;
+ cursor: pointer;
+ margin-left: 4px;
+ padding: 2px 5px 0px 5px;
+ min-width: 11px;
+ list-style-type: none;
+`;
+
+const bottomContainer = css`
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ align-items: stretch;
+ align-content: space-between;
+`;
+
+const Space = ({ amount }: { amount: 1 | 2 | 3 | 4 | 5 | 6 | 9 | 12 | 24 }) => (
+
+);
+
+export const CommentForm = ({
+ shortUrl,
+ pillar,
+ onAddComment,
+ user,
+ setCommentBeingRepliedTo,
+ commentBeingRepliedTo,
+ onComment,
+ onReply,
+ onPreview,
+}: Props) => {
+ const [isActive, setIsActive] = useState(
+ commentBeingRepliedTo ? true : false,
+ );
+ const [userNameMissing, setUserNameMissing] = useState(false);
+ const [body, setBody] = useState('');
+ const [previewBody, setPreviewBody] = useState('');
+ const [error, setError] = useState('');
+ const [info, setInfo] = useState('');
+ const [showPreview, setShowPreview] = useState(false);
+ const textAreaRef = useRef(null);
+
+ useEffect(() => {
+ if (commentBeingRepliedTo) {
+ document
+ .getElementById(`comment-${commentBeingRepliedTo.id}`)
+ ?.scrollIntoView();
+ document
+ .querySelector(
+ `#comment-reply-form-${commentBeingRepliedTo.id} textarea`,
+ )
+ ?.focus();
+ }
+ }, [commentBeingRepliedTo]);
+
+ const getHighlightedString = ():
+ | {
+ highlightedString: string;
+ startString: string;
+ endString: string;
+ }
+ | undefined => {
+ if (!textAreaRef.current) return;
+ const selectionStart = textAreaRef.current.selectionStart;
+ const selectionEnd = textAreaRef.current.selectionEnd;
+ const value = textAreaRef.current.value;
+
+ const startString = value.substring(0, selectionStart);
+ const highlightedString = value.substring(selectionStart, selectionEnd);
+ const endString = value.substring(selectionEnd, value.length);
+ return { startString, highlightedString, endString };
+ };
+
+ const transformText = (
+ transfromFunc: (highlightedString: string) => string,
+ ) => {
+ const textAreaStrings = getHighlightedString();
+ if (!textAreaStrings) return;
+ const { startString, highlightedString, endString } = textAreaStrings;
+ setBody(
+ startString.concat(transfromFunc(highlightedString), endString),
+ );
+ };
+
+ const transformLink = () => {
+ const url = prompt('Your URL:', 'http://www.');
+ if (url === null) return;
+ const textAreaStrings = getHighlightedString();
+ if (!textAreaStrings) return;
+ const { startString, highlightedString, endString } = textAreaStrings;
+ setBody(
+ startString.concat(
+ linkStringFunc(url, highlightedString),
+ endString,
+ ),
+ );
+ };
+
+ const fetchShowPreview = async () => {
+ if (!body) return;
+
+ try {
+ const preview = onPreview ?? defaultPreview;
+ const response = await preview(body);
+ setPreviewBody(response);
+ setShowPreview(true);
+ } catch (e) {
+ setError('Preview request failed, please try again');
+ setPreviewBody('');
+ setShowPreview(false);
+ }
+ };
+
+ const resetForm = () => {
+ setError('');
+ setInfo('');
+ setBody('');
+ setShowPreview(false);
+ setIsActive(false);
+ if (setCommentBeingRepliedTo) {
+ setCommentBeingRepliedTo();
+ }
+ };
+
+ const submitForm = async () => {
+ setError('');
+ setInfo('');
+
+ if (body) {
+ const comment = onComment ?? defaultComment;
+ const reply = onReply ?? defaultReply;
+ const response: CommentResponse = commentBeingRepliedTo
+ ? await reply(shortUrl, body, commentBeingRepliedTo.id)
+ : await comment(shortUrl, body);
+ // Check response message for error states
+ if (response.errorCode === 'USERNAME_MISSING') {
+ // Reader has never posted before and needs to choose a username
+ setUserNameMissing(true);
+ } else if (response.errorCode === 'EMPTY_COMMENT_BODY') {
+ setError('Please write a comment.');
+ } else if (response.errorCode === 'COMMENT_TOO_LONG') {
+ setError(
+ 'Your comment must be fewer than 5000 characters long.',
+ );
+ } else if (response.errorCode === 'USER_BANNED') {
+ setError(
+ 'Commenting has been disabled for this account (why? ).',
+ );
+ } else if (response.errorCode === 'IP_THROTTLED') {
+ setError(
+ 'Commenting has been temporarily blocked for this IP address (why? ).',
+ );
+ } else if (response.errorCode === 'DISCUSSION_CLOSED') {
+ setError(
+ 'Sorry your comment can not be published as the discussion is now closed for comments.',
+ );
+ } else if (response.errorCode === 'PARENT_COMMENT_MODERATED') {
+ setError(
+ 'Sorry the comment can not be published as the comment you replied to has been moderated since.',
+ );
+ } else if (response.errorCode === 'COMMENT_RATE_LIMIT_EXCEEDED') {
+ setError(
+ 'You can only post one comment every minute. Please try again in a moment.',
+ );
+ } else if (response.errorCode === 'INVALID_PROTOCOL') {
+ setError(`Sorry your comment can not be published as it was not sent over
+ a secure channel. Please report us this issue using the technical issue link
+ in the page footer.`);
+ } else if (response.errorCode === 'AUTH_COOKIE_INVALID') {
+ setError(
+ 'Sorry, your comment was not published as you are no longer signed in. Please sign in and try again.',
+ );
+ } else if (response.errorCode === 'READ-ONLY-MODE') {
+ setError(`Sorry your comment can not currently be published as
+ commenting is undergoing maintenance but will be back shortly. Please try
+ again in a moment.`);
+ } else if (response.errorCode === 'API_CORS_BLOCKED') {
+ setError(`Could not post due to your internet settings, which might be
+ controlled by your provider. Please contact your administrator
+ or disable any proxy servers or VPNs and try again.`);
+ } else if (response.errorCode === 'API_ERROR') {
+ setError(`Sorry, there was a problem posting your comment. Please try
+ another browser or network connection. Reference code `);
+ } else if (response.errorCode === 'EMAIL_VERIFIED') {
+ setInfo(
+ 'Sent. Please check your email to verify your email address. Once verified post your comment.',
+ );
+ } else if (response.errorCode === 'EMAIL_VERIFIED_FAIL') {
+ // TODO: Support resending verification email
+ setError(`We are having technical difficulties. Please try again later or
+
+ resend the verification .`);
+ } else if (response.errorCode === 'EMAIL_NOT_VALIDATED') {
+ // TODO: Support resending verification email
+ setError(`Please confirm your email address to comment.
+ If you can't find the email, we can
+
+ resend the verification email to your email
+ address.`);
+ } else if (response.status === 'ok') {
+ onAddComment(
+ simulateNewComment(
+ // response.errorCode is the id of the comment that was created on the server
+ // it is returned as a string, so we need to cast to an number to be compatable
+ parseInt(response.message),
+ body,
+ user,
+ commentBeingRepliedTo,
+ ),
+ );
+ resetForm();
+ } else {
+ setError('Sorry, there was a problem posting your comment.');
+ }
+ }
+ };
+
+ const submitUserName = async (userName: string) => {
+ setError('');
+ if (!userName) {
+ setError('Username field cannot be empty');
+ return;
+ }
+
+ const response = await addUserName(userName);
+ if (response.status === 'ok') {
+ // If we are able to submit userName we should continue with submitting comment
+ void submitForm();
+ setUserNameMissing(false);
+ } else {
+ response.errors &&
+ setError(response.errors[0]?.message ?? 'unknown error');
+ }
+ };
+
+ if (userNameMissing && body) {
+ return (
+ setUserNameMissing(false)}
+ onPreview={onPreview}
+ />
+ );
+ }
+
+ return (
+ <>
+ {
+ e.preventDefault();
+ void submitForm();
+ }}
+ >
+ {!!error && (
+
+ )}
+ {!!info && (
+
+ )}
+ {isActive && (
+
+
+ Please keep comments respectful and abide by the{' '}
+
+ community guidelines
+
+ .
+
+
+ {user.privateFields?.isPremoderated && (
+
+ Your comments are currently being pre-moderated
+ (
+
+ why?
+
+ )
+
+ )}
+
+ )}
+ {
+ setBody(e.target.value || '');
+ }}
+ value={body}
+ onFocus={() => setIsActive(true)}
+ />
+
+
+ <>
+
+ Post your comment
+
+ {(isActive || !!body) && (
+ <>
+
+
+ Preview
+
+
+
+
+ Cancel
+
+ >
+ )}
+ >
+
+ {isActive && (
+
+ {
+ e.preventDefault();
+ transformText(boldString);
+ }}
+ css={commentAddOns}
+ data-link-name="formatting-controls-bold"
+ type="button"
+ >
+ B
+
+ {
+ e.preventDefault();
+ transformText(italicsString);
+ }}
+ css={commentAddOns}
+ data-link-name="formatting-controls-italic"
+ type="button"
+ >
+ i
+
+ {
+ e.preventDefault();
+ transformText(strikethroughString);
+ }}
+ css={commentAddOns}
+ data-link-name="formatting-controls-strikethrough"
+ type="button"
+ >
+ {`S̶`}
+
+ {
+ e.preventDefault();
+ transformText(codeString);
+ }}
+ css={commentAddOns}
+ data-link-name="formatting-controls-code"
+ type="button"
+ >
+ {`<>`}
+
+ {
+ e.preventDefault();
+ transformText(quoteString);
+ }}
+ css={commentAddOns}
+ data-link-name="formatting-controls-quote"
+ type="button"
+ >
+ "
+
+ {
+ e.preventDefault();
+ transformLink();
+ }}
+ css={commentAddOns}
+ data-link-name="formatting-controls-link"
+ type="button"
+ >
+ Link
+
+
+ )}
+
+
+
+ {showPreview && }
+ >
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/CommentReplyPreview/CommentReplyPreview.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/CommentReplyPreview/CommentReplyPreview.stories.tsx
new file mode 100644
index 00000000000..d049d0e12fe
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/CommentReplyPreview/CommentReplyPreview.stories.tsx
@@ -0,0 +1,101 @@
+import { css } from '@emotion/react';
+import { ArticlePillar } from '@guardian/libs';
+import { CommentType } from '../../discussionTypes';
+import { CommentReplyPreview, Preview } from './CommentReplyPreview';
+
+export default { title: 'CommentReplyPreview' };
+
+const singleLineParagraph =
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.
';
+
+const singleBlockParagraph =
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin nec ullamcorper ante. Nunc vitae quam eros. Donec velit turpis, posuere ut cursus sed, tristique non libero. Donec molestie metus nunc, dapibus ultrices est luctus id. Fusce fringilla metus posuere imperdiet lobortis. Proin ut egestas lorem. Etiam scelerisque dolor felis, ac fermentum ex accumsan id. Ut dignissim et orci vel lobortis. Phasellus feugiat dictum varius. Praesent eu dui ante. Duis in tempor libero, et consectetur lacus. Nunc venenatis libero nec aliquam vulputate. Etiam volutpat accumsan enim ut mollis.
';
+
+const multiLBlockParagraph = `
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin nec ullamcorper ante. Nunc vitae quam eros. Donec velit turpis, posuere ut cursus sed, tristique non libero. Donec molestie metus nunc, dapibus ultrices est luctus id. Fusce fringilla metus posuere imperdiet lobortis. Proin ut egestas lorem. Etiam scelerisque dolor felis, ac fermentum ex accumsan id. Ut dignissim et orci vel lobortis. Phasellus feugiat dictum varius. Praesent eu dui ante. Duis in tempor libero, et consectetur lacus. Nunc venenatis libero nec aliquam vulputate. Etiam volutpat accumsan enim ut mollis.
+
+ Ut molestie feugiat ligula, at suscipit est eleifend eget. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec faucibus leo eros, faucibus maximus nisi semper sit amet. Nam eu finibus nibh. Quisque venenatis lacus non velit sagittis ultrices. Duis eget elit congue, molestie odio ut, gravida est. Aliquam erat volutpat. Duis feugiat dolor nulla, non elementum lorem finibus id. Duis non nibh justo. Phasellus dapibus pulvinar nulla, vel euismod magna dapibus ut. Vivamus iaculis eros in nisl ultrices fringilla. Cras ex libero, tristique ornare interdum id, porta a mauris. Praesent nulla enim, rhoncus quis lectus sed, viverra sollicitudin mauris.
+`;
+
+const commentBeingRepliedTo: CommentType = {
+ id: 25487686,
+ body: multiLBlockParagraph,
+ date: '26 July 2013 4:13pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25487686',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: '2762428',
+ displayName: 'FrankDeFord',
+ webUrl: 'https://profile.theguardian.com/user/id/2762428',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/2762428',
+ avatar: 'https://avatar.guim.co.uk/user/2762428',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/2762428',
+ badge: [],
+ },
+ responses: [],
+ metaData: {
+ commentCount: 2,
+ staffCommenterCount: 1,
+ editorsPickCount: 0,
+ blockedCount: 0,
+ responseCount: 1,
+ },
+};
+
+const padding = css`
+ padding: 15px;
+`;
+
+export const Default = () => (
+
+);
+Default.storyName = 'default';
+
+export const SingleLinePreview = () => (
+
+
{}}
+ displayReplyComment={true}
+ />
+
+);
+SingleLinePreview.storyName = 'Single line';
+
+export const SingleBlockPreview = () => (
+
+
{}}
+ displayReplyComment={true}
+ />
+
+);
+SingleBlockPreview.storyName = 'Single Block';
+
+export const MultiBlockPreview = () => (
+
+
{}}
+ displayReplyComment={true}
+ />
+
+);
+MultiBlockPreview.storyName = 'Multi Block';
diff --git a/dotcom-rendering/src/discussion-rendering/components/CommentReplyPreview/CommentReplyPreview.tsx b/dotcom-rendering/src/discussion-rendering/components/CommentReplyPreview/CommentReplyPreview.tsx
new file mode 100644
index 00000000000..be8375dcb71
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/CommentReplyPreview/CommentReplyPreview.tsx
@@ -0,0 +1,205 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import { neutral, space, text, textSans } from '@guardian/source-foundations';
+import { Button, SvgIndent } from '@guardian/source-react-components';
+import { useState } from 'react';
+import type { CommentType } from '../../discussionTypes';
+import { palette } from '../../lib/palette';
+import { pillarToString } from '../../lib/pillarToString';
+import { Row } from '../Row/Row';
+
+type Props = {
+ pillar: ArticleTheme;
+ commentBeingRepliedTo: CommentType;
+};
+
+const Space = ({ amount }: { amount: 1 | 2 | 3 | 4 | 5 | 6 | 9 | 12 | 24 }) => (
+
+);
+
+const indentStyles = css`
+ width: 18px;
+ svg {
+ /* stylelint-disable-next-line declaration-no-important */
+ fill: ${neutral[46]} !important;
+ }
+`;
+
+const smallFontStyles = css`
+ ${textSans.small()};
+ line-height: 19px;
+`;
+
+const replyPreviewHeaderStyle = css`
+ ${textSans.small({ fontWeight: 'bold' })};
+ margin-top: 0px;
+ margin-bottom: ${space[2]}px;
+`;
+
+const arrowSize = 15;
+const bg = neutral[93];
+const previewStyle = css`
+ padding-top: ${space[3]}px;
+ padding-bottom: ${space[3]}px;
+ padding-left: ${space[5]}px;
+ padding-right: ${space[5]}px;
+ background-color: ${bg};
+ margin-top: ${arrowSize}px;
+ margin-bottom: ${arrowSize + 5}px;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ :before {
+ content: '';
+ position: absolute;
+ border-left: ${arrowSize}px solid ${bg};
+ border-top: ${arrowSize}px solid transparent;
+ top: -${arrowSize - 1}px;
+ margin-left: ${space[9]}px;
+ }
+`;
+
+const commentStyles = css`
+ p {
+ ${textSans.small()};
+ margin-top: 0px;
+ margin-bottom: ${space[3]}px;
+ }
+`;
+
+const blueLink = css`
+ color: ${text.anchorPrimary};
+`;
+
+const buttonLinkPillarBaseStyles = (pillar: ArticleTheme) => css`
+ button {
+ color: ${palette[pillarToString(pillar)][400]};
+ background-color: transparent;
+ height: 18px;
+ min-height: 18px;
+ /* Radius 0 is used to style focus halo */
+ border-radius: 0;
+
+ :hover {
+ text-decoration: underline;
+ text-decoration-color: ${palette[pillarToString(pillar)][400]};
+ }
+ }
+`;
+
+const buttonLinkBaseStyles = css`
+ button {
+ color: ${neutral[46]};
+ background-color: transparent;
+ height: 18px;
+ min-height: 18px;
+ /* Radius 0 is used to style focus halo */
+ border-radius: 0;
+
+ :hover {
+ text-decoration: underline;
+ text-decoration-color: ${neutral[46]};
+ }
+ }
+`;
+
+export const CommentReplyPreview = ({
+ pillar,
+ commentBeingRepliedTo,
+}: Props) => {
+ const [displayReplyComment, setDisplayReplyComment] =
+ useState(false);
+ return (
+ <>
+
+
+
+
+
+
+ {commentBeingRepliedTo.userProfile.displayName}
+
+
+
+
+ setDisplayReplyComment(!displayReplyComment)
+ }
+ data-link-name={
+ displayReplyComment
+ ? 'reply-comment-hide'
+ : 'reply-comment-show'
+ }
+ >
+ {displayReplyComment ? 'Hide Comment' : 'Show comment'}
+
+
+
+ {displayReplyComment && (
+
+ )}
+ >
+ );
+};
+
+export const Preview = ({
+ commentBeingRepliedTo,
+ setDisplayReplyComment,
+ displayReplyComment,
+}: {
+ commentBeingRepliedTo: CommentType;
+ setDisplayReplyComment: (displayReplyComment: boolean) => void;
+ displayReplyComment: boolean;
+}) => {
+ return (
+
+
+ {commentBeingRepliedTo.userProfile.displayName} @{' '}
+ {commentBeingRepliedTo.date} said:
+
+
+
+
+ setDisplayReplyComment(!displayReplyComment)}
+ data-link-name="hide-comment"
+ >
+ Hide Comment
+
+
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.stories.tsx
new file mode 100644
index 00000000000..c44a6d65ca0
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.stories.tsx
@@ -0,0 +1,122 @@
+import { css } from '@emotion/react';
+import { ArticlePillar } from '@guardian/libs';
+import { useState } from 'react';
+import type { DropdownOptionType } from '../../discussionTypes';
+import { Dropdown } from './Dropdown';
+
+const Container = ({ children }: { children: React.ReactNode }) => (
+
+ {children}
+
+);
+
+const DropdownParent = () => {
+ const [selected, setSelected] = useState();
+ const pageSizeOptions: DropdownOptionType[] = [
+ {
+ value: '25',
+ title: '25',
+ isActive: selected === '25',
+ },
+ {
+ value: '50',
+ title: '50',
+ isActive: selected === '50',
+ },
+ {
+ value: '100',
+ title: '100',
+ isActive: selected === '100',
+ },
+ ];
+
+ return (
+ {
+ setSelected(value);
+ }}
+ />
+ );
+};
+
+const threadOptions: [
+ DropdownOptionType,
+ DropdownOptionType,
+ DropdownOptionType,
+] = [
+ {
+ value: 'collapsed',
+ title: 'Collapsed',
+ isActive: true,
+ },
+ {
+ value: 'expanded',
+ title: 'Expanded',
+ },
+ {
+ value: 'unthreaded',
+ title: 'Unthreaded',
+ },
+];
+
+const optionsWithNoneActive = [
+ {
+ ...threadOptions[0],
+ isActive: false,
+ },
+ { ...threadOptions[1] },
+ { ...threadOptions[2] },
+];
+
+/* tslint:disable */
+export default {
+ component: Dropdown,
+ title: 'Dropdown',
+};
+/* tslint:enable */
+
+export const DropdownActive = () => (
+
+ {
+ console.log('clicked: ', value);
+ }}
+ />
+ Hi, I'm some other content we want to overlay
+
+);
+DropdownActive.storyName = 'Dropdown with first item active';
+
+export const DropdownNoActive = () => (
+
+ {
+ console.log('clicked: ', value);
+ }}
+ />
+
+);
+DropdownNoActive.storyName = 'Dropdown with nothing active';
+
+export const DropdownWithState = () => (
+
+
+
+);
+DropdownWithState.storyName = 'Dropdown with working selection';
diff --git a/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.test.tsx b/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.test.tsx
new file mode 100644
index 00000000000..ee34aac576e
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.test.tsx
@@ -0,0 +1,155 @@
+import '@testing-library/jest-dom/extend-expect';
+import { ArticlePillar } from '@guardian/libs';
+import { fireEvent, render, screen } from '@testing-library/react';
+import type { DropdownOptionType } from '../../discussionTypes';
+import { Dropdown } from './Dropdown';
+
+const threadOptions: [
+ DropdownOptionType,
+ DropdownOptionType,
+ DropdownOptionType,
+] = [
+ {
+ value: 'collapsed',
+ title: 'Collapsed',
+ isActive: true,
+ },
+ {
+ value: 'expanded',
+ title: 'Expanded',
+ },
+ {
+ value: 'unthreaded',
+ title: 'Unthreaded',
+ },
+];
+
+const noActiveOptions: DropdownOptionType[] = threadOptions.map((option) => ({
+ ...option,
+ isActive: false,
+}));
+
+describe('Dropdown', () => {
+ it('should display the given label', () => {
+ const label = 'I should show';
+ render(
+ {}}
+ />,
+ );
+
+ expect(screen.getByText(label)).toBeInTheDocument();
+ });
+
+ it('should display option titles', () => {
+ render(
+ {}}
+ />,
+ );
+
+ expect(screen.getByText(threadOptions[0].title)).toBeInTheDocument();
+ expect(screen.getByText(threadOptions[1].title)).toBeInTheDocument();
+ expect(screen.getByText(threadOptions[2].title)).toBeInTheDocument();
+ });
+
+ it('should render the correct number of options', () => {
+ const { container } = render(
+ {}}
+ />,
+ );
+
+ const listItems = container.querySelectorAll('li');
+ expect(listItems.length).toEqual(threadOptions.length);
+ });
+
+ it('should expand the menu when the label is clicked', () => {
+ const { container } = render(
+ {}}
+ />,
+ );
+
+ const ulElement = container.querySelector('ul');
+ expect(ulElement).toHaveStyle('display: none');
+ fireEvent.click(screen.getByRole('button'));
+ expect(ulElement).toHaveStyle('display: block');
+ });
+
+ it('should close the expanded menu when readers click away', () => {
+ const { container } = render(
+ {}}
+ />,
+ );
+
+ const ulElement = container.querySelector('ul');
+ fireEvent.click(screen.getByRole('button'));
+ expect(ulElement).toHaveStyle('display: block');
+ fireEvent.click(container);
+ expect(ulElement).toHaveStyle('display: none');
+ });
+
+ it('should close the expanded menu when blurred', () => {
+ const { container } = render(
+ {}}
+ />,
+ );
+
+ const ulElement = container.querySelector('ul');
+ fireEvent.click(screen.getByRole('button'));
+ expect(ulElement).toHaveStyle('display: block');
+ fireEvent.keyDown(container, { key: 'Escape', code: 'Escape' });
+ expect(ulElement).toHaveStyle('display: none');
+ });
+});
+
+it('should trigger the correct onSelect callbacks when an option is clicked', () => {
+ const mockCallback = jest.fn();
+ render(
+ ,
+ );
+
+ fireEvent.click(screen.getByRole('button'));
+ fireEvent.click(screen.getByText(threadOptions[2].title));
+ expect(mockCallback).toHaveBeenCalled();
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- the element exists
+ expect(mockCallback.mock.calls[0][0]).toBe('unthreaded');
+ fireEvent.click(screen.getByRole('button'));
+ fireEvent.click(screen.getByText(threadOptions[1].title));
+ expect(mockCallback).toHaveBeenCalled();
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- the element exists
+ expect(mockCallback.mock.calls[1][0]).toBe('expanded');
+});
diff --git a/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.tsx b/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.tsx
new file mode 100644
index 00000000000..561b49ea409
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Dropdown/Dropdown.tsx
@@ -0,0 +1,227 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import {
+ background,
+ border,
+ brandAlt,
+ from,
+ neutral,
+ textSans,
+ until,
+} from '@guardian/source-foundations';
+import { useEffect, useState } from 'react';
+import type { DropdownOptionType } from '../../discussionTypes';
+import { palette } from '../../lib/palette';
+import { pillarToString } from '../../lib/pillarToString';
+
+type Props = {
+ id: string;
+ label: string;
+ options: DropdownOptionType[];
+ pillar: ArticleTheme;
+ onSelect: (value: string) => void;
+};
+
+const containerStyles = css`
+ position: relative;
+`;
+
+const ulStyles = css`
+ z-index: 2;
+ list-style: none;
+ border: 1px solid ${border.secondary};
+ margin-left: -8px;
+ padding: 0px;
+ display: none;
+ background-color: ${background.primary};
+
+ position: absolute;
+
+ ${until.tablet} {
+ margin-top: 4px;
+ border-radius: 0;
+ overflow: auto;
+ }
+
+ ${from.tablet} {
+ margin-top: 12px;
+ border-radius: 3px;
+ }
+`;
+
+const ulExpanded = css`
+ display: block;
+`;
+
+const linkStyles = (disabled: boolean) => css`
+ ${textSans.small()};
+ text-align: left;
+ color: ${disabled ? neutral[86] : neutral[46]};
+ position: relative;
+ text-decoration: none;
+ margin-top: 1px;
+ padding-top: 8px;
+ padding-right: 30px;
+ padding-bottom: 8px;
+ padding-left: 8px;
+ width: 100%;
+ cursor: ${disabled ? 'default' : 'pointer'};
+ background-color: white;
+ border: none;
+
+ ${!disabled &&
+ `
+ :hover {
+ background-color: ${neutral[93]};
+ text-decoration: underline;
+ }
+
+ :focus {
+ text-decoration: underline;
+ }
+ `}
+`;
+
+const firstStyles = css`
+ margin-top: 0;
+`;
+
+const activeStyles = (pillar: ArticleTheme) => css`
+ font-weight: bold;
+
+ :after {
+ content: '';
+ border: 2px solid ${palette[pillarToString(pillar)][400]};
+ border-top: 0px;
+ border-right: 0px;
+ position: absolute;
+ top: 12px;
+ right: 12px;
+ width: 8px;
+ height: 4px;
+ transform: rotate(-45deg);
+ }
+`;
+
+const buttonStyles = css`
+ ${textSans.small({ fontWeight: 'medium' })};
+ display: block;
+ cursor: pointer;
+ background: none;
+ border: none;
+ /* Design System: The buttons should be components that handle their own layout using primitives */
+ line-height: 1.2;
+ color: ${neutral[46]};
+ transition: color 80ms ease-out;
+ padding: 0px 10px 6px 0px;
+ margin: 1px 0 0;
+ text-decoration: none;
+
+ :hover {
+ /* color: ${brandAlt[400]}; */
+
+ :after {
+ transform: translateY(0) rotate(45deg);
+ }
+ }
+
+ :after {
+ content: '';
+ display: inline-block;
+ width: 5px;
+ height: 5px;
+ transform: translateY(-2px) rotate(45deg);
+ border: 1px solid currentColor;
+ border-left: transparent;
+ border-top: transparent;
+ margin-left: 5px;
+ vertical-align: middle;
+ transition: transform 250ms ease-out;
+ }
+`;
+
+const expandedStyles = css`
+ :hover:after {
+ transform: translateY(-1px) rotate(-135deg);
+ }
+ :after {
+ transform: translateY(1px) rotate(-135deg);
+ }
+`;
+
+const labelStyles = css`
+ ${textSans.small({ fontWeight: 'bold' })};
+ color: ${neutral[46]};
+`;
+
+export const Dropdown = ({ id, label, options, pillar, onSelect }: Props) => {
+ const [isExpanded, setIsExpanded] = useState(false);
+
+ useEffect(() => {
+ const dismissOnEsc = (event: KeyboardEvent) => {
+ if (isExpanded && event.code === 'Escape') {
+ setIsExpanded(false);
+ }
+ };
+
+ document.addEventListener('keydown', dismissOnEsc, false);
+
+ // Remove listener on unmount
+ return () => document.removeEventListener('keydown', dismissOnEsc);
+ }, [isExpanded]);
+
+ useEffect(() => {
+ const dismissOnClick = (event: MouseEvent) => {
+ if (isExpanded) {
+ event.stopPropagation();
+ setIsExpanded(false);
+ }
+ };
+
+ document.addEventListener('click', dismissOnClick, false);
+
+ // Remove listener on unmount
+ return () => document.removeEventListener('click', dismissOnClick);
+ }, [isExpanded]);
+
+ // needs to be unique to allow multiple dropdowns on same page
+ // this should be unique because JS is single-threaded
+ const dropdownID = `dropbox-id-${id}`;
+
+ const activeLink = options.find((option) => option.isActive);
+
+ return (
+
+
+ {label}
+ setIsExpanded(!isExpanded)}
+ css={[buttonStyles, isExpanded && expandedStyles]}
+ aria-controls={dropdownID}
+ aria-expanded={isExpanded ? 'true' : 'false'}
+ type="button"
+ >
+ {activeLink ? activeLink.title : 'Please select'}
+
+
+
+ {options.map((option, index) => (
+
+ onSelect(option.value)}
+ css={[
+ linkStyles(!!option.disabled),
+ option.isActive && activeStyles(pillar),
+ index === 0 && firstStyles,
+ ]}
+ disabled={!!option.isActive || !!option.disabled}
+ type="button"
+ >
+ {option.title}
+
+
+ ))}
+
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/Filters/Filters.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/Filters/Filters.stories.tsx
new file mode 100644
index 00000000000..65bdebcd391
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Filters/Filters.stories.tsx
@@ -0,0 +1,24 @@
+import { ArticlePillar } from '@guardian/libs';
+import { useState } from 'react';
+import { FilterOptions } from '../../discussionTypes';
+import { Filters } from './Filters';
+
+export default { title: 'Filters' };
+
+export const Default = () => {
+ const [filters, setFilters] = useState({
+ orderBy: 'newest',
+ pageSize: 25,
+ threads: 'collapsed',
+ });
+ return (
+
+ );
+};
+Default.storyName = 'default';
diff --git a/dotcom-rendering/src/discussion-rendering/components/Filters/Filters.tsx b/dotcom-rendering/src/discussion-rendering/components/Filters/Filters.tsx
new file mode 100644
index 00000000000..d3d82f75cd3
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Filters/Filters.tsx
@@ -0,0 +1,153 @@
+import { css } from '@emotion/react';
+import { ArticleTheme } from '@guardian/libs';
+import { border, space } from '@guardian/source-foundations';
+import {
+ FilterOptions,
+ OrderByType,
+ PageSizeType,
+ ThreadsType,
+} from '../../discussionTypes';
+import { Dropdown } from '../Dropdown/Dropdown';
+
+type Props = {
+ filters: FilterOptions;
+ pillar: ArticleTheme;
+ onFilterChange: (newFilterObject: FilterOptions) => void;
+ totalPages: number;
+ commentCount: number;
+};
+
+const filterBar = css`
+ padding-top: ${space[1]}px;
+ padding-bottom: ${space[2]}px;
+
+ border-top: 1px solid ${border.secondary};
+
+ display: flex;
+ flex-direction: row;
+`;
+
+const dividerStyles = css`
+ position: relative;
+ margin-left: ${space[2]}px;
+ :after {
+ content: '';
+ display: block;
+ width: 1px;
+ background-color: ${border.secondary};
+ position: absolute;
+ top: -${space[1]}px;
+ bottom: ${space[1]}px;
+ left: -${space[2]}px;
+ }
+`;
+
+const filterPadding = css`
+ padding-right: ${space[3]}px;
+`;
+
+export const Filters = ({
+ filters,
+ pillar,
+ onFilterChange,
+ totalPages,
+ commentCount,
+}: Props) => (
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/FirstCommentWelcome/FirstCommentWelcome.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/FirstCommentWelcome/FirstCommentWelcome.stories.tsx
new file mode 100644
index 00000000000..19aa2de04aa
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/FirstCommentWelcome/FirstCommentWelcome.stories.tsx
@@ -0,0 +1,25 @@
+import { ArticlePillar } from '@guardian/libs';
+import { FirstCommentWelcome } from './FirstCommentWelcome';
+
+export default { title: 'FirstCommentWelcome' };
+
+export const defaultStory = () => (
+ Promise.resolve()}
+ cancelSubmit={() => undefined}
+ />
+);
+defaultStory.storyName = 'Welcome message';
+
+export const CommentWithError = () => (
+ Promise.resolve()}
+ cancelSubmit={() => undefined}
+ />
+);
+CommentWithError.storyName = 'Welcome message with error';
diff --git a/dotcom-rendering/src/discussion-rendering/components/FirstCommentWelcome/FirstCommentWelcome.tsx b/dotcom-rendering/src/discussion-rendering/components/FirstCommentWelcome/FirstCommentWelcome.tsx
new file mode 100644
index 00000000000..7b7e75a1eab
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/FirstCommentWelcome/FirstCommentWelcome.tsx
@@ -0,0 +1,159 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import {
+ headline,
+ neutral,
+ space,
+ textSans,
+} from '@guardian/source-foundations';
+import { Link, TextInput } from '@guardian/source-react-components';
+import { useEffect, useState } from 'react';
+import { preview as defaultPreview } from '../../lib/api';
+import { PillarButton } from '../PillarButton/PillarButton';
+import { Row } from '../Row/Row';
+
+type Props = {
+ body: string;
+ pillar: ArticleTheme;
+ error?: string;
+ submitForm: (userName: string) => Promise;
+ cancelSubmit: () => void;
+ onPreview?: (body: string) => Promise;
+};
+
+const previewStyle = css`
+ padding: ${space[2]}px;
+ background-color: ${neutral[93]};
+ margin-bottom: ${space[5]}px;
+ position: relative;
+ min-height: ${space[9]}px;
+
+ /* p is returned by API and this is the only way to apply styles */
+ p {
+ padding-left: ${space[2]}px;
+ }
+`;
+
+const textStyling = css`
+ ${textSans.small()};
+`;
+
+const Text = ({ children }: { children: React.ReactNode }) => (
+ {children}
+);
+
+export const FirstCommentWelcome = ({
+ body,
+ pillar,
+ error = '',
+ submitForm,
+ cancelSubmit,
+ onPreview,
+}: Props) => {
+ const [previewBody, setPreviewBody] = useState('');
+ const [userName, setUserName] = useState('');
+
+ useEffect(() => {
+ const fetchShowPreview = async () => {
+ try {
+ const preview = onPreview ?? defaultPreview;
+ const response = await preview(body);
+ setPreviewBody(response);
+ } catch (e) {
+ setPreviewBody('');
+ }
+ };
+ void fetchShowPreview();
+ }, [body, onPreview]);
+
+ return (
+
+
{
+ e.preventDefault();
+ void submitForm(userName);
+ }}
+ >
+
+ Welcome, you’re about to make your first comment!
+
+
+ Before you post, we’d like to thank you for joining the
+ debate - we’re glad you’ve chosen to participate and we
+ value your opinions and experiences.
+
+
+ Please choose your username under which you would like all
+ your comments to show up. You can only set your username
+ once.
+
+ ) =>
+ setUserName(e.target.value)
+ }
+ width={30}
+ error={error}
+ />
+
+ <>
+ Please keep your posts respectful and abide by the{' '}
+
+ community guidelines
+
+ {` -`} and if you spot a comment you think doesn’t
+ adhere to the guidelines, please use the ‘Report’ link
+ next to it to let us know.
+ >
+
+
+ Please preview your comment below and click ‘post’ when
+ you’re happy with it.
+
+
+
+ void submitForm(userName)}
+ linkName="post comment"
+ size="small"
+ >
+ Post your comment
+
+
+
+ Cancel
+
+
+
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/LoadingComments/LoadingComments.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/LoadingComments/LoadingComments.stories.tsx
new file mode 100644
index 00000000000..fbb6ed65a70
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/LoadingComments/LoadingComments.stories.tsx
@@ -0,0 +1,6 @@
+import { LoadingComments } from './LoadingComments';
+
+export default { component: LoadingComments, title: 'LoadingComments' };
+
+export const Default = () => ;
+Default.storyName = 'default';
diff --git a/dotcom-rendering/src/discussion-rendering/components/LoadingComments/LoadingComments.tsx b/dotcom-rendering/src/discussion-rendering/components/LoadingComments/LoadingComments.tsx
new file mode 100644
index 00000000000..7a9983d0ae3
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/LoadingComments/LoadingComments.tsx
@@ -0,0 +1,89 @@
+import { css, keyframes } from '@emotion/react';
+import { neutral, space } from '@guardian/source-foundations';
+import { Column } from '../Column/Column';
+import { Row } from '../Row/Row';
+
+const BACKGROUND_COLOUR = neutral[93];
+
+const shimmer = keyframes`
+ 0% {
+ background-position: -1500px 0;
+ }
+ 100% {
+ background-position: 1500px 0;
+ }
+`;
+
+const shimmerStyles = css`
+ animation: ${shimmer} 2s infinite linear;
+ background: linear-gradient(
+ to right,
+ ${BACKGROUND_COLOUR} 4%,
+ ${neutral[86]} 25%,
+ ${BACKGROUND_COLOUR} 36%
+ );
+ background-size: 1500px 100%;
+`;
+
+const containerStyles = css`
+ border-bottom: 1px solid ${neutral[86]};
+ width: 620px;
+ display: flex;
+ padding: ${space[2]}px 0;
+`;
+
+const avatarStyles = (size: number) => css`
+ border-radius: ${size + 10}px;
+ width: ${size}px;
+ height: ${size}px;
+ background-color: ${BACKGROUND_COLOUR};
+ margin-right: ${space[2]}px;
+
+ ${shimmerStyles}
+`;
+
+const Grey = ({
+ height,
+ width,
+ spaceBelow,
+ spaceLeft,
+}: {
+ height: number;
+ width?: number;
+ spaceBelow?: 1 | 2 | 3 | 4 | 5 | 6 | 9;
+ spaceLeft?: 1 | 2 | 3 | 4 | 5 | 6 | 9;
+}) => (
+
+);
+
+export const LoadingComments = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/LoadingPicks/LoadingPicks.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/LoadingPicks/LoadingPicks.stories.tsx
new file mode 100644
index 00000000000..970a454c94d
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/LoadingPicks/LoadingPicks.stories.tsx
@@ -0,0 +1,6 @@
+import { LoadingPicks } from './LoadingPicks';
+
+export default { component: LoadingPicks, title: 'LoadingPicks' };
+
+export const Default = () => ;
+Default.storyName = 'default';
diff --git a/dotcom-rendering/src/discussion-rendering/components/LoadingPicks/LoadingPicks.tsx b/dotcom-rendering/src/discussion-rendering/components/LoadingPicks/LoadingPicks.tsx
new file mode 100644
index 00000000000..16c0f5c456b
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/LoadingPicks/LoadingPicks.tsx
@@ -0,0 +1,114 @@
+import { css, keyframes } from '@emotion/react';
+import { neutral, space } from '@guardian/source-foundations';
+import { Row } from '../Row/Row';
+
+const BACKGROUND_COLOUR = neutral[93];
+
+const shimmer = keyframes`
+ 0% {
+ background-position: -1500px 0;
+ }
+ 100% {
+ background-position: 1500px 0;
+ }
+`;
+
+const shimmerStyles = css`
+ animation: ${shimmer} 2s infinite linear;
+ background: linear-gradient(
+ to right,
+ ${BACKGROUND_COLOUR} 4%,
+ ${neutral[86]} 25%,
+ ${BACKGROUND_COLOUR} 36%
+ );
+ background-size: 1500px 100%;
+`;
+
+const containerStyles = css`
+ width: 220px;
+ display: flex;
+ padding: ${space[2]}px 0;
+`;
+
+const avatarStyles = (size: number) => css`
+ border-radius: ${size + 10}px;
+ width: ${size + 10}px;
+ height: ${size}px;
+ background-color: ${BACKGROUND_COLOUR};
+ margin-right: ${space[2]}px;
+
+ ${shimmerStyles}
+`;
+
+const pickBoxStyles = css`
+ padding: ${space[3]}px;
+ background-color: ${BACKGROUND_COLOUR};
+ border-radius: 15px;
+ margin-bottom: 30px;
+ position: relative;
+ height: 150px;
+
+ :before {
+ content: '';
+ margin-left: ${space[6]}px;
+ position: absolute;
+ border-right: 25px solid transparent;
+ border-top: 26px solid ${BACKGROUND_COLOUR};
+ bottom: -26px;
+ }
+
+ ${shimmerStyles}
+`;
+
+const FullWidthColumn = ({ children }: { children: React.ReactNode }) => (
+
+ {children}
+
+);
+
+const Grey = ({
+ height,
+ width,
+ spaceBelow,
+ spaceLeft,
+}: {
+ height: number;
+ width?: number;
+ spaceBelow?: 1 | 2 | 3 | 4 | 5 | 6 | 9;
+ spaceLeft?: 1 | 2 | 3 | 4 | 5 | 6 | 9;
+}) => (
+
+);
+
+export const LoadingPicks = () => (
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.stories.tsx
new file mode 100644
index 00000000000..28f446e6d58
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.stories.tsx
@@ -0,0 +1,196 @@
+import { useState } from 'react';
+import { FilterOptions } from '../../discussionTypes';
+import { Pagination } from './Pagination';
+
+export default { component: Pagination, title: 'Pagination' };
+
+const DEFAULT_FILTERS: FilterOptions = {
+ orderBy: 'newest',
+ pageSize: 25,
+ threads: 'collapsed',
+};
+
+export const Default = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+Default.storyName = 'default';
+
+export const TwoPages = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+TwoPages.storyName = 'with two pages';
+
+export const WithBackground = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+WithBackground.storyName = 'with a dark background';
+WithBackground.story = {
+ parameters: { backgrounds: { default: 'dark' } },
+};
+
+export const ThreePages = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+ThreePages.storyName = 'with three pages';
+
+export const FourPages = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+FourPages.storyName = 'with four pages';
+
+export const FivePages = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+FivePages.storyName = 'with five pages';
+
+export const SixPages = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+SixPages.storyName = 'with six pages';
+
+export const SevenPages = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+SevenPages.storyName = 'with seven pages';
+
+export const TwelvePages = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+TwelvePages.storyName = 'with twelve pages';
+
+export const LotsOfPages = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+LotsOfPages.storyName = 'with many pages';
+
+export const WhenExpanded = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+WhenExpanded.storyName = 'when expanded';
+
+export const WhenCollapsed = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+WhenCollapsed.storyName = 'when collapsed';
+
+export const WhenUnthreaded = () => {
+ const [page, setCurrentPage] = useState(1);
+ return (
+
+ );
+};
+WhenUnthreaded.storyName = 'when unthreaded';
diff --git a/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.test.tsx b/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.test.tsx
new file mode 100644
index 00000000000..06c809df95b
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.test.tsx
@@ -0,0 +1,59 @@
+import { render } from '@testing-library/react';
+import type { FilterOptions } from '../../discussionTypes';
+import { Pagination } from './Pagination';
+
+const DEFAULT_FILTERS: FilterOptions = {
+ orderBy: 'newest',
+ pageSize: 25,
+ threads: 'collapsed',
+};
+
+describe('Pagination', () => {
+ it('Render Ophan Data Components as expected', () => {
+ const { asFragment } = render(
+ {}}
+ filters={DEFAULT_FILTERS}
+ commentCount={56}
+ />,
+ );
+
+ expect(
+ asFragment().querySelectorAll(
+ '[data-link-name="Pagination view page 2"]',
+ ).length,
+ ).toBe(1); // The number is still a button
+
+ expect(
+ asFragment().querySelectorAll(
+ '[data-link-name="Pagination view page 1"]',
+ ).length,
+ ).toBe(2); // Both the number and the back button
+
+ expect(
+ asFragment().querySelectorAll(
+ '[data-link-name="Pagination view page 3"]',
+ ).length,
+ ).toBe(2); // Both the number and the forward button
+
+ expect(
+ asFragment().querySelectorAll(
+ '[data-link-name="Pagination view page 5"]',
+ ).length,
+ ).toBe(0); // Page five should be hidden
+
+ expect(
+ asFragment().querySelectorAll(
+ '[data-link-name="Pagination view page 9"]',
+ ).length,
+ ).toBe(1); // Page nine should be the last number
+
+ expect(
+ asFragment().querySelectorAll(
+ '[data-link-name="Pagination view page 10"]',
+ ).length,
+ ).toBe(0); // Page 10 doesn't exist
+ });
+});
diff --git a/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.tsx b/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.tsx
new file mode 100644
index 00000000000..4985dd201cc
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Pagination/Pagination.tsx
@@ -0,0 +1,315 @@
+import { css } from '@emotion/react';
+import {
+ border,
+ neutral,
+ space,
+ textSans,
+ until,
+} from '@guardian/source-foundations';
+import {
+ Button,
+ SvgChevronLeftSingle,
+ SvgChevronRightSingle,
+} from '@guardian/source-react-components';
+import type { FilterOptions } from '../../discussionTypes';
+
+type Props = {
+ totalPages: number;
+ currentPage: number;
+ setCurrentPage: (currentPage: number) => void;
+ commentCount: number;
+ filters: FilterOptions;
+};
+
+const pageButtonStyles = (isSelected: boolean) => css`
+ cursor: pointer;
+ ${textSans.small({ fontWeight: 'bold' })}
+
+ text-decoration: none;
+ border-radius: 62.5rem;
+ box-sizing: border-box;
+
+ color: ${isSelected ? neutral[100] : neutral[46]};
+ background-color: ${isSelected ? neutral[46] : 'transparent'};
+ border: none;
+ :hover {
+ border-width: 0.0625rem;
+ border-style: solid;
+ border-color: ${neutral[46]};
+ }
+
+ margin-right: 5px;
+ padding: 0 0.125rem;
+ min-width: 1.5rem;
+ text-align: center;
+
+ height: 1.5rem;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+`;
+
+const chevronButtonStyles = ({ isSelected }: { isSelected: boolean }) => css`
+ margin-right: ${space[1]}px;
+
+ border-radius: 62.5rem;
+ border-width: 1px;
+ border-style: solid;
+ border-color: ${neutral[86]};
+ background-color: ${isSelected ? neutral[46] : neutral[100]};
+
+ height: 22px;
+ min-height: 22px;
+ width: 22px;
+
+ /* Override some of src's properties */
+ > button {
+ height: 22px;
+ min-height: 22px;
+ width: 22px;
+ }
+
+ :hover {
+ border-color: ${neutral[60]};
+ }
+
+ & svg {
+ /* Make the chevrons grey */
+ /* stylelint-disable-next-line declaration-no-important */
+ fill: ${neutral[46]} !important;
+ /* Set the dimensions */
+ width: 22px;
+ height: 22px;
+ }
+`;
+
+const shiftRight = css`
+ /* The right chevron svg positions it's path in such a way that makes the alignment look
+ off. So here we shift it slightly to the right to fix that */
+ & svg {
+ margin-left: 2px;
+ }
+`;
+
+const elipsisStyles = css`
+ line-height: 26px;
+ margin-right: 5px;
+`;
+
+const wrapperStyles = css`
+ ${textSans.small()};
+ color: ${neutral[46]};
+
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ width: 100%;
+ padding-top: ${space[2]}px;
+ padding-bottom: ${space[2]}px;
+ border-top: 1px solid ${border.secondary};
+ ${until.mobileLandscape} {
+ flex-direction: column;
+ }
+`;
+
+const paginationButtons = css`
+ display: flex;
+ flex-direction: row;
+ height: 25px;
+`;
+
+const paginationText = css`
+ ${textSans.small()};
+ margin-left: 5px;
+ ${until.mobileLandscape} {
+ padding-top: 10px;
+ }
+`;
+
+const Forward = ({
+ currentPage,
+ setCurrentPage,
+}: {
+ currentPage: number;
+ setCurrentPage: Props['setCurrentPage'];
+}) => (
+
+ setCurrentPage(currentPage + 1)}
+ aria-label="Previous discussion page"
+ data-link-name={`Pagination view page ${currentPage + 1}`}
+ size="xsmall"
+ priority="subdued"
+ >
+
+
+
+);
+
+const Back = ({
+ currentPage,
+ setCurrentPage,
+}: {
+ currentPage: number;
+ setCurrentPage: Props['setCurrentPage'];
+}) => {
+ const newPage = Math.max(0, currentPage - 1);
+
+ return (
+
+ setCurrentPage(newPage)}
+ aria-label="Previous discussion page"
+ data-link-name={`Pagination view page ${newPage}`}
+ size="xsmall"
+ priority="subdued"
+ >
+
+
+
+ );
+};
+
+const PageButton = ({
+ currentPage,
+ setCurrentPage,
+ isSelected,
+}: {
+ currentPage: number;
+ setCurrentPage: Props['setCurrentPage'];
+ isSelected: boolean;
+}) => (
+ setCurrentPage(currentPage)}
+ data-link-name={`Pagination view page ${currentPage}`}
+ type="button"
+ >
+ {currentPage}
+
+);
+
+const decideSecondPage = ({
+ currentPage,
+ totalPages,
+}: {
+ currentPage: number;
+ totalPages: number;
+}) => {
+ if (currentPage < 4) return 2;
+ if (currentPage > totalPages - 2) return totalPages - 2;
+ return currentPage - 1;
+};
+
+const decideThirdPage = ({
+ currentPage,
+ totalPages,
+}: {
+ currentPage: number;
+ totalPages: number;
+}) => {
+ if (currentPage < 4) return 3;
+ if (currentPage > totalPages - 2) return totalPages - 1;
+ return currentPage;
+};
+
+const decideForthPage = ({
+ currentPage,
+ totalPages,
+}: {
+ currentPage: number;
+ totalPages: number;
+}) => {
+ if (currentPage < 4) return 4;
+ if (currentPage > totalPages - 2) return totalPages;
+ return currentPage + 1;
+};
+
+export const Pagination = ({
+ totalPages,
+ currentPage,
+ setCurrentPage,
+ commentCount,
+ filters,
+}: Props) => {
+ // Make decisions aobut which pagination elements to show
+ const showBackButton = totalPages > 4 && currentPage > 1;
+ const showFirstElipsis = totalPages > 4 && currentPage > 3;
+ const secondPage = decideSecondPage({ currentPage, totalPages });
+ const thirdPage = decideThirdPage({ currentPage, totalPages });
+ const forthPage = decideForthPage({ currentPage, totalPages });
+ const showThirdPage = totalPages > 2;
+ const showForthPage = totalPages > 3;
+ const showLastPage = totalPages > 4 && currentPage < totalPages - 1;
+ const lastPage = totalPages;
+ const showSecondElipsis = totalPages > 4 && currentPage < totalPages - 2;
+ const showForwardButton = totalPages > 4 && currentPage !== totalPages;
+
+ // Pagination Text
+ const { pageSize } = filters; // e.g: pageSize of 25
+ let endIndex = pageSize * currentPage; // e.g: currentPage is page 2, endIndex is 25 * 2 = 50
+ const startIndex = endIndex - (pageSize - 1); // e.g: 50 - (25 - 1) startIndex is 26. Example page 2 has comments 26 - 50 on it.
+ if (endIndex > commentCount) endIndex = commentCount; // If there are less total comments than allowed on the page, endIndex is total comment count
+
+ return (
+
+
+ {showBackButton && (
+
+ )}
+
+ {showFirstElipsis &&
…
}
+
+ {showThirdPage && (
+
+ )}
+ {showForthPage && (
+
+ )}
+ {showSecondElipsis &&
…
}
+ {showLastPage && (
+
+ )}
+ {showForwardButton && (
+
+ )}
+
+ {!!commentCount && (
+
+ {`Displaying ${
+ filters.threads === 'unthreaded'
+ ? 'comments'
+ : 'threads'
+ } ${startIndex} to ${endIndex} of ${commentCount}`}
+
+ )}
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/PillarButton/PillarButton.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/PillarButton/PillarButton.stories.tsx
new file mode 100644
index 00000000000..d86731b0a69
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/PillarButton/PillarButton.stories.tsx
@@ -0,0 +1,258 @@
+import { css } from '@emotion/react';
+import { ArticlePillar } from '@guardian/libs';
+import { space } from '@guardian/source-foundations';
+import { SvgCheckmark } from '@guardian/source-react-components';
+import { Row } from '../Row/Row';
+import { PillarButton } from './PillarButton';
+
+const Space = ({ amount }: { amount: 1 | 2 | 3 | 4 | 5 | 6 | 9 | 12 | 24 }) => (
+
+);
+
+export default { component: PillarButton, title: 'PillarButton' };
+
+export const EachPillar = () => (
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Lifestyle}
+ linkName=""
+ >
+ Lifestyle
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Sport}
+ linkName=""
+ >
+ Sport
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.News}
+ linkName=""
+ >
+ News
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Opinion}
+ linkName=""
+ >
+ Opinion
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Culture}
+ linkName=""
+ >
+ Culture
+
+
+);
+EachPillar.storyName = 'with each pillar';
+
+export const EachSize = () => (
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.News}
+ linkName=""
+ size="xsmall"
+ >
+ X Small
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.News}
+ linkName=""
+ size="small"
+ >
+ Small
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.News}
+ linkName=""
+ size="default"
+ >
+ Default
+
+
+);
+EachSize.storyName = 'with each size';
+
+export const IconLeft = () => (
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Lifestyle}
+ icon={ }
+ iconSide="left"
+ linkName="left"
+ >
+ Left
+
+);
+IconLeft.storyName = 'with an icon on the left';
+
+export const IconRight = () => (
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Sport}
+ icon={ }
+ iconSide="right"
+ linkName=""
+ >
+ Right
+
+);
+
+export const Secondary = () => (
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Lifestyle}
+ priority="secondary"
+ linkName=""
+ >
+ Lifestyle
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Sport}
+ priority="secondary"
+ linkName=""
+ >
+ Sport
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.News}
+ priority="secondary"
+ linkName=""
+ >
+ News
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Opinion}
+ priority="secondary"
+ linkName=""
+ >
+ Opinion
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Culture}
+ priority="secondary"
+ linkName=""
+ >
+ Culture
+
+
+);
+Secondary.storyName = 'with secondary priority';
+
+export const Subdued = () => (
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Lifestyle}
+ priority="subdued"
+ linkName=""
+ >
+ Lifestyle
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Sport}
+ priority="subdued"
+ linkName=""
+ >
+ Sport
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.News}
+ priority="subdued"
+ linkName=""
+ >
+ News
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Opinion}
+ priority="subdued"
+ linkName=""
+ >
+ Opinion
+
+
+ {
+ alert('Clicked!');
+ }}
+ pillar={ArticlePillar.Culture}
+ priority="subdued"
+ linkName=""
+ >
+ Culture
+
+
+);
+Subdued.storyName = 'with subdued priority';
diff --git a/dotcom-rendering/src/discussion-rendering/components/PillarButton/PillarButton.tsx b/dotcom-rendering/src/discussion-rendering/components/PillarButton/PillarButton.tsx
new file mode 100644
index 00000000000..62289857a5a
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/PillarButton/PillarButton.tsx
@@ -0,0 +1,110 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import { ArticlePillar, ArticleSpecial } from '@guardian/libs';
+import { neutral, textSans } from '@guardian/source-foundations';
+import { Button } from '@guardian/source-react-components';
+import { palette } from '../../lib/palette';
+import { pillarToString } from '../../lib/pillarToString';
+
+type Props = {
+ pillar: ArticleTheme;
+ onClick?: () => void | Promise;
+ children: string;
+ type?: 'submit';
+ priority?: 'primary' | 'secondary' | 'subdued';
+ icon?: JSX.Element;
+ iconSide?: 'left' | 'right';
+ linkName: string;
+ size?: 'xsmall' | 'small' | 'default';
+};
+
+// Why this abstraction? To solve an issue where when we use the 800 key in `palette typescript throws errors. Most
+// likely caused by the fact labs only uses 300 & 400 so the union is restricted
+const dark = (pillar: ArticleTheme): string => {
+ switch (pillar) {
+ case ArticlePillar.Culture:
+ return '#FBF6EF';
+ case ArticlePillar.Opinion:
+ return '#FEF9F5';
+ case ArticlePillar.Lifestyle:
+ return '#FEEEF7';
+ case ArticlePillar.Sport:
+ return '#F1F8FC';
+ case ArticlePillar.News:
+ case ArticleSpecial.SpecialReport:
+ case ArticleSpecial.Labs:
+ default:
+ return '#FFF4F2';
+ }
+};
+
+const buttonOverrides = (
+ pillar: ArticleTheme,
+ priority: 'primary' | 'secondary' | 'subdued',
+) => {
+ switch (priority) {
+ case 'primary':
+ return css`
+ button {
+ ${textSans.small({ fontWeight: 'bold' })}
+ background-color: ${palette[pillarToString(pillar)][300]};
+ color: ${neutral[100]};
+
+ :hover {
+ background-color: ${palette[
+ pillarToString(pillar)
+ ][400]};
+ }
+ }
+ `;
+
+ case 'secondary':
+ return css`
+ button {
+ ${textSans.small({ fontWeight: 'bold' })}
+ background-color: transparent;
+ border: 1px solid ${palette[pillarToString(pillar)][400]};
+ color: ${palette[pillarToString(pillar)][400]};
+
+ :hover {
+ background-color: ${dark(pillar)};
+ }
+ }
+ `;
+ case 'subdued':
+ return css`
+ button {
+ ${textSans.small({ fontWeight: 'bold' })}
+ background-color: transparent;
+ color: ${palette[pillarToString(pillar)][400]};
+ border-radius: 0;
+ }
+ `;
+ }
+};
+
+export const PillarButton = ({
+ pillar,
+ onClick,
+ type,
+ priority = 'primary',
+ children,
+ icon,
+ iconSide,
+ linkName,
+ size = 'default',
+}: Props) => (
+
+
+ {children}
+
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/Preview/Preview.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/Preview/Preview.stories.tsx
new file mode 100644
index 00000000000..48eb86c0fcb
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Preview/Preview.stories.tsx
@@ -0,0 +1,28 @@
+import { css } from '@emotion/react';
+import { Preview } from './Preview';
+
+export default { component: Preview, title: 'Preview' };
+
+export const PreviewStory = () => (
+
+);
+PreviewStory.storyName = 'default';
+
+export const PreviewStoryLinebreaks = () => (
+
+);
+PreviewStoryLinebreaks.storyName = 'Preview comment with linebreaks';
diff --git a/dotcom-rendering/src/discussion-rendering/components/Preview/Preview.tsx b/dotcom-rendering/src/discussion-rendering/components/Preview/Preview.tsx
new file mode 100644
index 00000000000..04ae618acca
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Preview/Preview.tsx
@@ -0,0 +1,70 @@
+import { css } from '@emotion/react';
+import { neutral, space, textSans } from '@guardian/source-foundations';
+
+type Props = {
+ previewHtml: string;
+};
+
+const previewStyle = css`
+ ${textSans.small()}
+ padding: ${space[2]}px ${space[4]}px;
+ background-color: ${neutral[93]};
+ border-radius: 5px;
+ margin-top: 0;
+ margin-bottom: ${20}px;
+ word-break: break-word;
+
+ blockquote {
+ margin-top: ${space[3]}px;
+ margin-bottom: ${space[3]}px;
+ margin-left: ${space[5]}px;
+ margin-right: ${space[5]}px;
+ padding-left: ${space[2]}px;
+ color: ${neutral[46]};
+ }
+
+ i {
+ font-style: italic;
+ }
+
+ b {
+ font-weight: bold;
+ }
+
+ code {
+ /* stylelint-disable-next-line property-disallowed-list -- Source doesn't have a monospace font */
+ font-family: monospace;
+ font-size: 1em;
+ }
+
+ /*
+ todo: this spacing is currently repeated here, on regular comments, and
+ on TopPick comments; can we factor out the common styling for these
+ three components?
+ */
+ p {
+ margin-top: 0;
+ margin-bottom: ${space[3]}px;
+ }
+`;
+
+const spout = css`
+ display: block;
+ left: 0;
+ width: 0;
+ height: 0;
+ border-right: 1rem solid transparent;
+ border-bottom: 1rem solid ${neutral[93]};
+ margin-left: 12.5rem;
+ border-right-style: inset;
+`;
+
+export const Preview = ({ previewHtml }: Props) => (
+ <>
+
+
+ >
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/RecommendationCount/RecommendationCount.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/RecommendationCount/RecommendationCount.stories.tsx
new file mode 100644
index 00000000000..4a9e6d03bd1
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/RecommendationCount/RecommendationCount.stories.tsx
@@ -0,0 +1,43 @@
+import { RecommendationCount } from './RecommendationCount';
+
+export default { title: 'RecommendationCount' };
+
+export const NeverRecomended = () => (
+
+);
+
+export const AlreadyRecomended = () => (
+
+);
+
+export const NotSignedIn = () => (
+
+);
+
+export const OwnPost = () => (
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/RecommendationCount/RecommendationCount.tsx b/dotcom-rendering/src/discussion-rendering/components/RecommendationCount/RecommendationCount.tsx
new file mode 100644
index 00000000000..a021f6f2010
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/RecommendationCount/RecommendationCount.tsx
@@ -0,0 +1,89 @@
+import { css } from '@emotion/react';
+import { brand, neutral, textSans } from '@guardian/source-foundations';
+import { SvgArrowUpStraight } from '@guardian/source-react-components';
+import { useState } from 'react';
+import { recommend as recommendDefault } from '../../lib/api';
+import { Row } from '../Row/Row';
+
+type Props = {
+ commentId: number;
+ initialCount: number;
+ alreadyRecommended: boolean;
+ isSignedIn: boolean;
+ userMadeComment: boolean;
+ onRecommend?: (commentId: number) => Promise;
+};
+
+const countStyles = css`
+ ${textSans.xxsmall({ fontWeight: 'light' })}
+ min-width: 0.75rem;
+ color: ${neutral[46]};
+ margin-right: 0.3125rem;
+`;
+
+const buttonStyles = (recommended: boolean, isSignedIn: boolean) => css`
+ cursor: ${recommended || !isSignedIn ? 'default' : 'pointer'};
+ width: 1.1875rem;
+ height: 1.1875rem;
+ background-color: ${recommended ? brand[400] : neutral[97]};
+ border-radius: 62.5rem;
+ border: none;
+`;
+
+const arrowStyles = (recommended: boolean) => css`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ svg {
+ fill: ${recommended ? neutral[100] : neutral[46]};
+ height: 15px;
+ width: 15px;
+ }
+`;
+
+export const RecommendationCount = ({
+ commentId,
+ initialCount,
+ alreadyRecommended,
+ isSignedIn,
+ userMadeComment,
+ onRecommend,
+}: Props) => {
+ const [count, setCount] = useState(initialCount);
+ const [recommended, setRecommended] = useState(alreadyRecommended);
+
+ const tryToRecommend = () => {
+ const newCount = count + 1;
+ setCount(newCount);
+ setRecommended(true);
+ const recommend = onRecommend ?? recommendDefault;
+
+ recommend(commentId)
+ .then((accepted) => {
+ if (!accepted) {
+ setCount(newCount - 1);
+ setRecommended(alreadyRecommended);
+ }
+ })
+ // TODO: do some error handling
+ .catch(() => undefined);
+ };
+
+ return (
+
+ {count}
+ tryToRecommend()}
+ disabled={recommended || !isSignedIn || userMadeComment}
+ data-link-name="Recommend comment"
+ aria-label="Recommend comment"
+ type="button"
+ >
+
+
+
+
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/Row/Row.tsx b/dotcom-rendering/src/discussion-rendering/components/Row/Row.tsx
new file mode 100644
index 00000000000..3954db71dd4
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Row/Row.tsx
@@ -0,0 +1,14 @@
+import { css } from '@emotion/react';
+
+type Props = { children: React.ReactNode };
+
+export const Row = ({ children }: Props) => (
+
+ {children}
+
+);
diff --git a/dotcom-rendering/src/discussion-rendering/components/Timestamp/Timestamp.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/Timestamp/Timestamp.stories.tsx
new file mode 100644
index 00000000000..15c0123f771
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Timestamp/Timestamp.stories.tsx
@@ -0,0 +1,45 @@
+import { Timestamp } from './Timestamp';
+
+export default { component: Timestamp, title: 'Timestamp' };
+
+// Date is mocked to "Fri March 27 2020 12:00:00 GMT+0000 (Greenwich Mean Time)" in config
+
+export const TwoMonths = () => (
+ {}}
+ />
+);
+TwoMonths.storyName = 'Two months';
+
+export const OneHour = () => (
+ {}}
+ />
+);
+OneHour.storyName = 'One Hour';
+
+export const TwentyThreeHours = () => (
+ {}}
+ />
+);
+TwentyThreeHours.storyName = 'Twenty three hours';
+
+export const TwentyFiveHours = () => (
+ {}}
+ />
+);
+TwentyFiveHours.storyName = 'Twenty five hours';
diff --git a/dotcom-rendering/src/discussion-rendering/components/Timestamp/Timestamp.tsx b/dotcom-rendering/src/discussion-rendering/components/Timestamp/Timestamp.tsx
new file mode 100644
index 00000000000..f8d5d6cfb21
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/Timestamp/Timestamp.tsx
@@ -0,0 +1,57 @@
+import { css } from '@emotion/react';
+import { neutral, textSans } from '@guardian/source-foundations';
+import { useState } from 'react';
+import { dateFormatter } from '../../lib/dateFormatter';
+import { useInterval } from '../../lib/useInterval';
+
+type Props = {
+ isoDateTime: string;
+ webUrl: string;
+ commentId: number;
+ onPermalinkClick: (commentId: number) => void;
+};
+
+const linkStyles = css`
+ color: ${neutral[46]};
+ text-decoration: none;
+ :hover,
+ :focus {
+ text-decoration: underline;
+ }
+`;
+const timeStyles = css`
+ ${textSans.xxsmall({ fontWeight: 'light' })}
+ min-width: 0.75rem;
+ margin-right: 0.3125rem;
+ white-space: nowrap;
+`;
+
+export const Timestamp = ({
+ isoDateTime,
+ webUrl,
+ commentId,
+ onPermalinkClick,
+}: Props) => {
+ const [timeAgo, setTimeAgo] = useState(dateFormatter(isoDateTime));
+
+ useInterval(() => {
+ setTimeAgo(dateFormatter(isoDateTime));
+ }, 15000);
+
+ return (
+ {
+ onPermalinkClick(commentId);
+ e.preventDefault();
+ }}
+ rel="nofollow"
+ >
+
+ {timeAgo}
+
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/TopPick/TopPick.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/TopPick/TopPick.stories.tsx
new file mode 100644
index 00000000000..89d6ced3d12
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/TopPick/TopPick.stories.tsx
@@ -0,0 +1,143 @@
+import { css } from '@emotion/react';
+import { ArticlePillar } from '@guardian/libs';
+import { CommentType } from '../../discussionTypes';
+import { TopPick } from './TopPick';
+
+export default { component: TopPick, title: 'TopPick' };
+
+const comment: CommentType = {
+ id: 25488498,
+ body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit . Cras sodales metus magna, et molestie diam gravida quis. Ut ligula libero, condimentum quis elit at
dignissim pulvinar enim. Phasellus mattis felis in mi facilisis, ut vulputate ipsum rhoncus. Proin elit sem, venenatis vitae molestie id, posuere non justo. Morbi ac felis quis diam elementum tempus. Suspendisse efficitur consectetur sapien eleifend rhoncus. Aenean tempor leo pharetra, venenatis elit non, porta arcu. Maecenas tempus tellus sit amet iaculis molestie. Praesent id lobortis dolor. Nullam et ipsum ut leo accumsan vehicula vitae a augue. Integer vitae massa a tellus porta tincidunt ac sed tellus. Etiam ac semper lectus. Quisque et dui libero. Maecenas et lobortis nulla. Ut elementum egestas hendrerit.
',
+ date: '26 July 2013 4:35pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25488498',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25488498',
+ numRecommends: 0,
+ isHighlighted: false,
+ responseTo: {
+ displayName: 'FrankDeFord',
+ commentApiUrl:
+ 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ date: '26 July 2013 4:13pm',
+ commentId: '25487686',
+ commentWebUrl:
+ 'https://discussion.theguardian.com/comment-permalink/25487686',
+ },
+ userProfile: {
+ userId: '3150446',
+ displayName: 'AndyPietrasik',
+ webUrl: 'https://profile.theguardian.com/user/id/3150446',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3150446',
+ avatar: 'https://avatar.guim.co.uk/user/3150446',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3150446',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+};
+
+const commentContributor: CommentType = {
+ ...comment,
+ userProfile: {
+ ...comment.userProfile,
+ badge: [
+ {
+ name: 'Contributor',
+ },
+ ],
+ },
+};
+
+const commentWithShortBody: CommentType = {
+ ...comment,
+ body: "It's still there FrankDeFord - and thanks, I will pass that on
",
+};
+
+const contributorCommentWithShortBody: CommentType = {
+ ...comment,
+ userProfile: {
+ ...comment.userProfile,
+ badge: [
+ {
+ name: 'Contributor',
+ },
+ ],
+ },
+ body: "It's still there FrankDeFord - and thanks, I will pass that on
",
+};
+
+export const LongPick = () => (
+
+ {}}
+ />
+
+);
+LongPick.storyName = 'Long - Staff';
+
+export const ShortPick = () => (
+
+ {}}
+ />
+
+);
+ShortPick.storyName = 'Short - Staff';
+
+export const LongPickContributor = () => (
+
+ {}}
+ />
+
+);
+LongPickContributor.storyName = 'Long - Contributor';
+
+export const ShortPickContributor = () => (
+
+ {}}
+ />
+
+);
+ShortPickContributor.storyName = 'Short - Contributor';
diff --git a/dotcom-rendering/src/discussion-rendering/components/TopPick/TopPick.tsx b/dotcom-rendering/src/discussion-rendering/components/TopPick/TopPick.tsx
new file mode 100644
index 00000000000..1600a3ba573
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/TopPick/TopPick.tsx
@@ -0,0 +1,251 @@
+import { css } from '@emotion/react';
+import type { ArticleTheme } from '@guardian/libs';
+import {
+ brand,
+ from,
+ neutral,
+ space,
+ textSans,
+} from '@guardian/source-foundations';
+import { Link } from '@guardian/source-react-components';
+import type { CommentType } from '../../discussionTypes';
+import { palette } from '../../lib/palette';
+import { pillarToString } from '../../lib/pillarToString';
+import { Avatar } from '../Avatar/Avatar';
+import { GuardianContributor, GuardianStaff } from '../Badges/Badges';
+import { Column } from '../Column/Column';
+import { RecommendationCount } from '../RecommendationCount/RecommendationCount';
+import { Row } from '../Row/Row';
+import { Timestamp } from '../Timestamp/Timestamp';
+
+type Props = {
+ pillar: ArticleTheme;
+ comment: CommentType;
+ isSignedIn: boolean;
+ userMadeComment: boolean;
+ onPermalinkClick: (commentId: number) => void;
+ onRecommend?: (commentId: number) => Promise;
+};
+
+const pickStyles = css`
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ min-width: 250px;
+ margin-bottom: ${space[5]}px;
+ ${textSans.small()};
+
+ blockquote {
+ margin-top: ${space[3]}px;
+ margin-bottom: ${space[3]}px;
+ margin-left: ${space[5]}px;
+ margin-right: ${space[5]}px;
+ padding-left: ${space[2]}px;
+ color: ${neutral[46]};
+ }
+`;
+
+const arrowSize = 25;
+const bg = neutral[93];
+
+const userNameStyles = (pillar: ArticleTheme) => css`
+ margin-top: 3px;
+ margin-bottom: -6px;
+ font-weight: bold;
+ color: ${palette[pillarToString(pillar)][400]};
+`;
+
+const avatarMargin = css`
+ margin-right: ${space[2]}px;
+`;
+
+const smallFontSize = css`
+ a {
+ ${textSans.small()}
+ }
+`;
+
+const linkStyles = css`
+ text-decoration: none;
+ :hover {
+ text-decoration: underline;
+ }
+`;
+
+// to override a tag styles from dangerouslySetInnerHTML
+const inCommentLinkStyling = css`
+ a {
+ color: ${brand[500]};
+ text-decoration: none;
+ :hover {
+ text-decoration: underline;
+ }
+ }
+`;
+
+const titleStyles = css`
+ ${textSans.small()};
+ font-weight: bold;
+ margin: 0px;
+ margin-bottom: ${space[1]}px;
+`;
+
+const inheritColour = css`
+ color: inherit;
+`;
+
+const wrapStyles = css`
+ word-break: break-word;
+`;
+
+const PickBubble = ({ children }: { children: React.ReactNode }) => (
+
+ {children}
+
+);
+
+const Top = ({ children }: { children: React.ReactNode }) => (
+ {children}
+);
+
+const Bottom = ({ children }: { children: React.ReactNode }) => (
+ {children}
+);
+
+const PickMeta = ({ children }: { children: React.ReactNode }) => (
+
+ {children}
+
+);
+
+const truncateText = (input: string, limit: number) => {
+ // If input greater than limit trucate by limit and append an ellipsis
+ if (input.length > limit) return input.substr(0, limit) + '…';
+ return input;
+};
+
+export const TopPick = ({
+ pillar,
+ comment,
+ isSignedIn,
+ userMadeComment,
+ onPermalinkClick,
+ onRecommend,
+}: Props) => {
+ const showStaffBadge = comment.userProfile.badge.some(
+ (obj) => obj['name'] === 'Staff',
+ );
+
+ const showContributorBadge = comment.userProfile.badge.some(
+ (obj) => obj['name'] === 'Contributor',
+ );
+
+ return (
+
+
+
+ Guardian Pick
+
+
+
+
+ ,
+ ) => {
+ onPermalinkClick(comment.id);
+ e.preventDefault();
+ }}
+ rel="nofollow"
+ >
+ Jump to comment
+
+
+
+
+
+
+
+
+
+
+ {comment.userProfile.displayName}
+
+
+
+ {showStaffBadge && }
+ {showContributorBadge && !showStaffBadge && (
+
+ )}
+
+
+
+
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/TopPicks/TopPicks.stories.tsx b/dotcom-rendering/src/discussion-rendering/components/TopPicks/TopPicks.stories.tsx
new file mode 100644
index 00000000000..e8b60c00bab
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/TopPicks/TopPicks.stories.tsx
@@ -0,0 +1,95 @@
+import { ArticlePillar } from '@guardian/libs';
+import { CommentType } from '../../discussionTypes';
+import { TopPicks } from './TopPicks';
+
+export default { component: TopPicks, title: 'TopPicks' };
+
+const comment: CommentType = {
+ id: 25488498,
+ body: 'Quisque feugiat odio nibh, ac congue lectus interdum nec. Maecenas ut elit ut turpis fringilla dignissim. Sed molestie vehicula ullamcorper. Cras vulputate augue vel diam tempus pellentesque. Etiam aliquam erat nec imperdiet semper.
',
+ date: '26 July 2013 4:35pm',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ status: 'visible',
+ webUrl: 'https://discussion.theguardian.com/comment-permalink/25488498',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/comment/25488498',
+ numRecommends: 0,
+ isHighlighted: false,
+ responseTo: {
+ displayName: 'FrankDeFord',
+ commentApiUrl:
+ 'https://discussion.guardianapis.com/discussion-api/comment/25487686',
+ isoDateTime: '2013-07-26T15:13:20Z',
+ date: '26 July 2013 4:13pm',
+ commentId: '25487686',
+ commentWebUrl:
+ 'https://discussion.theguardian.com/comment-permalink/25487686',
+ },
+ userProfile: {
+ userId: '3150446',
+ displayName: 'AndyPietrasik',
+ webUrl: 'https://profile.theguardian.com/user/id/3150446',
+ apiUrl: 'https://discussion.guardianapis.com/discussion-api/profile/3150446',
+ avatar: 'https://avatar.guim.co.uk/user/3150446',
+ secureAvatarUrl: 'https://avatar.guim.co.uk/user/3150446',
+ badge: [
+ {
+ name: 'Staff',
+ },
+ ],
+ },
+};
+
+const commentWithLongBody: CommentType = {
+ ...comment,
+ body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sodales metus magna, et molestie diam gravida quis. Ut ligula libero, condimentum quis elit at, dignissim pulvinar enim. Phasellus mattis felis in mi facilisis, ut vulputate ipsum rhoncus. Proin elit sem, venenatis vitae molestie id, posuere non justo. Morbi ac felis quis diam elementum tempus. Suspendisse efficitur consectetur sapien eleifend rhoncus. Aenean tempor leo pharetra, venenatis elit non, porta arcu. Maecenas tempus tellus sit amet iaculis molestie. Praesent id lobortis dolor. Nullam et ipsum ut leo accumsan vehicula vitae a augue. Integer vitae massa a tellus porta tincidunt ac sed tellus. Etiam ac semper lectus. Quisque et dui libero. Maecenas et lobortis nulla. Ut elementum egestas hendrerit.
',
+};
+
+const commentWithShortBody: CommentType = {
+ ...comment,
+ body: "It's still there FrankDeFord - and thanks, I will pass that on
",
+};
+
+export const SingleComment = () => (
+ {}}
+ />
+);
+SingleComment.storyName = 'Single Comment';
+
+export const MulitColumn = () => (
+ {}}
+ />
+);
+MulitColumn.storyName = 'Mulitple Columns Comments';
+
+export const SingleColumn = () => (
+ {}}
+ />
+);
+SingleColumn.storyName = 'Single Column Comments';
+SingleColumn.story = {
+ parameters: {
+ viewport: { defaultViewport: 'phablet' },
+ },
+};
diff --git a/dotcom-rendering/src/discussion-rendering/components/TopPicks/TopPicks.tsx b/dotcom-rendering/src/discussion-rendering/components/TopPicks/TopPicks.tsx
new file mode 100644
index 00000000000..28f2ce5b449
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/components/TopPicks/TopPicks.tsx
@@ -0,0 +1,117 @@
+import { css } from '@emotion/react';
+import { ArticleTheme } from '@guardian/libs';
+import { from, until } from '@guardian/source-foundations';
+import { CommentType, UserProfile } from '../../discussionTypes';
+import { TopPick } from '../TopPick/TopPick';
+
+type Props = {
+ pillar: ArticleTheme;
+ user?: UserProfile;
+ comments: CommentType[];
+ isSignedIn: boolean;
+ onPermalinkClick: (commentId: number) => void;
+ onRecommend?: (commentId: number) => Promise;
+};
+
+const columWrapperStyles = css`
+ width: 50%;
+ display: flex;
+ flex-direction: column;
+`;
+const paddingRight = css`
+ padding-right: 10px;
+`;
+const paddingLeft = css`
+ padding-left: 10px;
+`;
+
+const picksWrapper = css`
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+`;
+
+const twoColCommentsStyles = css`
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ ${until.tablet} {
+ display: none;
+ }
+`;
+const oneColCommentsStyles = css`
+ width: 100%;
+ ${from.tablet} {
+ display: none;
+ }
+`;
+
+export const TopPicks = ({
+ pillar,
+ user,
+ comments,
+ isSignedIn,
+ onPermalinkClick,
+ onRecommend,
+}: Props) => {
+ const leftColComments: CommentType[] = [];
+ const rightColComments: CommentType[] = [];
+ comments.forEach((comment, index) =>
+ index % 2 === 0
+ ? leftColComments.push(comment)
+ : rightColComments.push(comment),
+ );
+ return (
+
+
+
+ {leftColComments.map((comment) => (
+
+ ))}
+
+
+ {rightColComments.map((comment) => (
+
+ ))}
+
+
+
+ {comments.map((comment) => (
+
+ ))}
+
+
+ );
+};
diff --git a/dotcom-rendering/src/discussion-rendering/discussionTypes.ts b/dotcom-rendering/src/discussion-rendering/discussionTypes.ts
new file mode 100644
index 00000000000..333aabbb805
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/discussionTypes.ts
@@ -0,0 +1,175 @@
+export type CAPIPillar =
+ | 'news'
+ | 'sport'
+ | 'culture'
+ | 'opinion'
+ | 'lifestyle'
+ | 'labs';
+
+export interface CommentType {
+ id: number;
+ body: string;
+ date: string;
+ isoDateTime: string;
+ status: string;
+ webUrl: string;
+ apiUrl: string;
+ numResponses?: number;
+ numRecommends: number;
+ isHighlighted: boolean;
+ userProfile: UserProfile;
+ responseTo?: {
+ displayName: string;
+ commentApiUrl: string;
+ isoDateTime: string;
+ date: string;
+ commentId: string;
+ commentWebUrl: string;
+ };
+ responses?: CommentType[];
+ metaData?: {
+ commentCount: number;
+ staffCommenterCount: number;
+ editorsPickCount: number;
+ blockedCount: number;
+ responseCount: number;
+ };
+ discussion?: {
+ key: string;
+ webUrl: string;
+ apiUrl: string;
+ title: string;
+ isClosedForComments: boolean;
+ isClosedForRecommendation: boolean;
+ };
+}
+
+export type CommentResponse = {
+ status: 'ok' | 'error';
+ statusCode: number;
+ message: string;
+ errorCode?: string;
+};
+
+type UserNameError = {
+ message: string;
+ description: string;
+ context: string;
+};
+
+type UserConsents = {
+ id: string;
+ actor: string;
+ version: number;
+ consented: boolean;
+ timestamp: string;
+ privacyPolicyVersion: number;
+};
+
+type UserGroups = {
+ path: string;
+ packageCode: string;
+};
+
+type UserNameUser = {
+ dates: { accountCreatedDate: string };
+ consents: UserConsents[];
+ userGroups: UserGroups[];
+ publicFields: {
+ username: string;
+ displayName: string;
+ };
+ statusFields: {
+ userEmailValidated: boolean;
+ };
+ privateFields: {
+ legacyPackages: string;
+ legacyProducts: string;
+ // Optional fields. See scala @ https://github.com/guardian/identity/blob/07142212b1571d5f8e0a60585c6511abb3620f8c/identity-model-play/src/main/scala/com/gu/identity/model/play/PrivateFields.scala#L5-L18
+ brazeUuid?: string;
+ puzzleUuid?: string;
+ googleTagId?: string;
+ firstName?: string;
+ secondName?: string;
+ registrationIp?: string;
+ lastActiveIpAddress?: string;
+ registrationType?: string;
+ registrationPlatform?: string;
+ telephoneNumber?: string;
+ title?: string;
+ };
+ primaryEmailAddress: string;
+ id: string;
+ hasPassword: boolean;
+};
+
+export type UserNameResponse = {
+ status: 'ok' | 'error';
+ user: UserNameUser;
+ errors?: UserNameError[];
+};
+
+export type OrderByType = 'newest' | 'oldest' | 'recommendations';
+export type ThreadsType = 'collapsed' | 'expanded' | 'unthreaded';
+export type PageSizeType = 25 | 50 | 100;
+export interface FilterOptions {
+ orderBy: OrderByType;
+ pageSize: PageSizeType;
+ threads: ThreadsType;
+}
+
+export interface UserProfile {
+ userId: string;
+ displayName: string;
+ webUrl: string;
+ apiUrl: string;
+ avatar: string;
+ secureAvatarUrl: string;
+ badge: { name: string }[];
+
+ // only included from /profile/me endpoint
+ privateFields?: {
+ canPostComment: boolean;
+ isPremoderated: boolean;
+ hasCommented: boolean;
+ };
+}
+
+export interface DiscussionResponse {
+ status: string;
+ errorCode?: string;
+ page: number;
+ pages: number;
+ pageSize: number;
+ orderBy: string;
+ discussion: {
+ key: string;
+ webUrl: string;
+ apiUrl: string;
+ commentCount: number;
+ topLevelCommentCount: number;
+ isClosedForComments: boolean;
+ isClosedForRecommendation: boolean;
+ isThreaded: boolean;
+ title: string;
+ comments: CommentType[];
+ };
+}
+
+export interface DiscussionOptions {
+ orderBy: string;
+ pageSize: number;
+ displayThreaded: boolean;
+ maxResponses: number;
+ page: number;
+ 'api-key': string;
+}
+
+export type AdditionalHeadersType = { [key: string]: string };
+
+export type DropdownOptionType = {
+ value: string;
+ title: string;
+ disabled?: boolean;
+ isActive?: boolean;
+};
diff --git a/dotcom-rendering/src/discussion-rendering/lib/api.tsx b/dotcom-rendering/src/discussion-rendering/lib/api.tsx
new file mode 100644
index 00000000000..c4427a25e83
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/api.tsx
@@ -0,0 +1,346 @@
+import { joinUrl } from '@guardian/libs';
+import type {
+ AdditionalHeadersType,
+ CommentResponse,
+ CommentType,
+ DiscussionOptions,
+ DiscussionResponse,
+ OrderByType,
+ ThreadsType,
+ UserNameResponse,
+ UserProfile,
+} from '../discussionTypes';
+
+const options = {
+ // Defaults
+ baseUrl: 'https://discussion.theguardian.com/discussion-api',
+ apiKey: 'discussion-rendering',
+ headers: {},
+ idApiUrl: 'https://idapi.theguardian.com',
+};
+
+const defaultParams = {
+ 'api-key': options.apiKey,
+};
+
+export const initialiseApi = ({
+ baseUrl,
+ additionalHeaders,
+ apiKey,
+ idApiUrl,
+}: {
+ baseUrl: string;
+ additionalHeaders: AdditionalHeadersType;
+ apiKey: string;
+ idApiUrl: string;
+}) => {
+ options.baseUrl = baseUrl || options.baseUrl;
+ options.headers = additionalHeaders;
+ options.apiKey = apiKey || options.apiKey;
+ options.idApiUrl = idApiUrl || options.idApiUrl;
+
+ defaultParams['api-key'] = options.apiKey;
+};
+
+const objAsParams = (obj: any): string => {
+ const params = Object.keys(obj)
+ .map((key) => {
+ // TODO: Refactor this for better typesafety. See https://github.com/guardian/dotcom-rendering/pull/8057/commits/da4667399d4a7726589f1944ac60380f1f3f36e1
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions -- type issues here cannot be avoided with this implementation
+ return `${key}=${obj[key]}`;
+ })
+ .join('&');
+
+ return '?' + params;
+};
+
+//todo: figure out the different return types and consider error handling
+export const getDiscussion = (
+ shortUrl: string,
+ opts: {
+ orderBy: OrderByType;
+ pageSize: number;
+ threads: ThreadsType;
+ page: number;
+ },
+): Promise => {
+ const apiOpts: DiscussionOptions = {
+ ...defaultParams,
+ ...{
+ // Frontend uses the 'recommendations' key to store this options but the api expects
+ // 'mostRecommended' so we have to map here to support both
+ orderBy:
+ opts.orderBy === 'recommendations'
+ ? 'mostRecommended'
+ : opts.orderBy,
+ pageSize: opts.pageSize,
+ displayThreaded: opts.threads !== 'unthreaded',
+ maxResponses: opts.threads === 'collapsed' ? 3 : 100,
+ page: opts.page,
+ },
+ };
+ const params = objAsParams(apiOpts);
+
+ const url = joinUrl(options.baseUrl, 'discussion', shortUrl) + params;
+
+ return fetch(url, {
+ headers: {
+ ...options.headers,
+ },
+ })
+ .then((resp) => resp.json())
+ .then((json) => {
+ if (
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
+ json.errorCode === 'DISCUSSION_ONLY_AVAILABLE_IN_LINEAR_FORMAT'
+ ) {
+ // We need force a refetch with unthreaded set, as we don't know
+ // that this discussion is only available in linear format until
+ // we get the response to tell us
+ return getDiscussion(shortUrl, {
+ ...opts,
+ ...{ threads: 'unthreaded' },
+ });
+ }
+ return json;
+ })
+ .catch((error) => console.error(`Error fetching ${url}`, error));
+};
+
+export const preview = (body: string): Promise => {
+ const url =
+ joinUrl(options.baseUrl, 'comment/preview') +
+ objAsParams(defaultParams);
+ const data = new URLSearchParams();
+ data.append('body', body);
+
+ return (
+ fetch(url, {
+ method: 'POST',
+ body: data.toString(),
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ ...options.headers,
+ },
+ })
+ .then((resp) => resp.json())
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
+ .then((json) => json.commentBody)
+ .catch((error) => console.error(`Error fetching ${url}`, error))
+ );
+};
+
+export const getProfile = (): Promise => {
+ const url =
+ joinUrl(options.baseUrl, 'profile/me') + objAsParams(defaultParams);
+
+ return fetch(url, {
+ credentials: 'include',
+ headers: {
+ ...options.headers,
+ },
+ })
+ .then((resp) => resp.json())
+ .catch((error) => console.error(`Error fetching ${url}`, error));
+};
+
+export const comment = (
+ shortUrl: string,
+ body: string,
+): Promise => {
+ const url =
+ joinUrl(options.baseUrl, 'discussion', shortUrl, 'comment') +
+ objAsParams(defaultParams);
+ const data = new URLSearchParams();
+ data.append('body', body);
+
+ return fetch(url, {
+ method: 'POST',
+ body: data.toString(),
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ ...options.headers,
+ },
+ credentials: 'include',
+ }).then((resp) => resp.json());
+};
+
+export const reply = (
+ shortUrl: string,
+ body: string,
+ parentCommentId: number,
+): Promise => {
+ const url =
+ joinUrl(
+ options.baseUrl,
+ 'discussion',
+ shortUrl,
+ 'comment',
+ parentCommentId.toString(),
+ 'reply',
+ ) + objAsParams(defaultParams);
+ const data = new URLSearchParams();
+ data.append('body', body);
+
+ return fetch(url, {
+ method: 'POST',
+ body: data.toString(),
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ ...options.headers,
+ },
+ credentials: 'include',
+ }).then((resp) => resp.json());
+};
+
+//todo: come back and parse the response properly and set a proper return type for the error case
+export const getPicks = (
+ shortUrl: string,
+): Promise => {
+ const url =
+ joinUrl(options.baseUrl, 'discussion', shortUrl, 'topcomments') +
+ objAsParams(defaultParams);
+
+ return (
+ fetch(url, {
+ headers: {
+ ...options.headers,
+ },
+ })
+ .then((resp) => resp.json())
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
+ .then((json) => json.discussion.comments)
+ .catch((error) => console.error(`Error fetching ${url}`, error))
+ );
+};
+
+export const reportAbuse = ({
+ commentId,
+ categoryId,
+ email,
+ reason,
+}: {
+ commentId: number;
+ categoryId: number;
+ reason?: string;
+ email?: string;
+}): Promise => {
+ const url =
+ joinUrl(
+ options.baseUrl,
+ 'comment',
+ commentId.toString(),
+ 'reportAbuse',
+ ) + objAsParams(defaultParams);
+
+ const data = new URLSearchParams();
+ data.append('categoryId', categoryId.toString());
+ email && data.append('email', email.toString());
+ reason && data.append('reason', reason);
+
+ return fetch(url, {
+ method: 'POST',
+ body: data.toString(),
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ ...options.headers,
+ },
+ }).then((resp) => resp.json());
+};
+
+export const recommend = (commentId: number): Promise => {
+ const url =
+ joinUrl(options.baseUrl, 'comment', commentId.toString(), 'recommend') +
+ objAsParams(defaultParams);
+
+ return fetch(url, {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ ...options.headers,
+ },
+ }).then((resp) => resp.ok);
+};
+
+export const addUserName = (userName: string): Promise => {
+ const url = options.idApiUrl + `/user/me` + objAsParams(defaultParams);
+
+ return fetch(url, {
+ method: 'POST',
+ credentials: 'include',
+ body: JSON.stringify({
+ publicFields: {
+ username: userName,
+ displayName: userName,
+ },
+ }),
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ })
+ .then((resp) => resp.json())
+ .catch((error) => console.error(`Error fetching ${url}`, error));
+};
+
+export const pickComment = (commentId: number): Promise => {
+ const url =
+ joinUrl(options.baseUrl, 'comment', commentId.toString(), 'highlight') +
+ objAsParams(defaultParams);
+
+ return fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ ...options.headers,
+ },
+ credentials: 'include',
+ })
+ .then((resp) => resp.json())
+ .catch((error) => console.error(`Error fetching ${url}`, error));
+};
+
+export const unPickComment = (commentId: number): Promise => {
+ const url =
+ joinUrl(
+ options.baseUrl,
+ 'comment',
+ commentId.toString(),
+ 'unhighlight',
+ ) + objAsParams(defaultParams);
+
+ return fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ ...options.headers,
+ },
+ credentials: 'include',
+ })
+ .then((resp) => resp.json())
+ .catch((error) => console.error(`Error fetching ${url}`, error));
+};
+
+export const getMoreResponses = (
+ commentId: number,
+): Promise<{
+ status: 'ok' | 'error';
+ comment: CommentType;
+}> => {
+ const url =
+ joinUrl(options.baseUrl, 'comment', commentId.toString()) +
+ objAsParams({
+ ...defaultParams,
+ ...{
+ displayThreaded: true,
+ displayResponses: true,
+ },
+ });
+
+ return fetch(url, {
+ headers: {
+ ...options.headers,
+ },
+ })
+ .then((resp) => resp.json())
+ .catch((error) => console.error(`Error fetching ${url}`, error));
+};
diff --git a/dotcom-rendering/src/discussion-rendering/lib/dateFormatter.ts b/dotcom-rendering/src/discussion-rendering/lib/dateFormatter.ts
new file mode 100644
index 00000000000..146aa1df729
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/dateFormatter.ts
@@ -0,0 +1,52 @@
+import { timeAgo } from '@guardian/libs';
+
+const getMonthString = (month: number): string => {
+ switch (month) {
+ case 0:
+ return 'Jan';
+ case 1:
+ return 'Feb';
+ case 2:
+ return 'Mar';
+ case 3:
+ return 'Apr';
+ case 4:
+ return 'May';
+ case 5:
+ return 'Jun';
+ case 6:
+ return 'Jul';
+ case 7:
+ return 'Aug';
+ case 8:
+ return 'Sep';
+ case 9:
+ return 'Oct';
+ case 10:
+ return 'Nov';
+ case 11:
+ return 'Dec';
+ default:
+ return '';
+ }
+};
+
+const isLast24Hrs = (date: Date) => {
+ const timeStamp = Math.round(new Date().getTime() / 1000);
+ const timeStampYesterday = timeStamp - 24 * 3600;
+ return date.getTime() >= new Date(timeStampYesterday * 1000).getTime();
+};
+
+export const dateFormatter = (dateString: string): string | false => {
+ const date = new Date(dateString);
+
+ if (isLast24Hrs(date)) {
+ return timeAgo(date.getTime(), { verbose: true, daysUntilAbsolute: 1 });
+ }
+
+ return `${date.getDate()} ${getMonthString(
+ date.getMonth(),
+ )} ${date.getFullYear()} ${date.getHours()}.${String(
+ date.getMinutes(),
+ ).padStart(2, '0')}`;
+};
diff --git a/dotcom-rendering/src/discussion-rendering/lib/identity-component-event.test.ts b/dotcom-rendering/src/discussion-rendering/lib/identity-component-event.test.ts
new file mode 100644
index 00000000000..fb4201e2280
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/identity-component-event.test.ts
@@ -0,0 +1,9 @@
+import { createAuthenticationEventParams } from './identity-component-event';
+
+describe('createAuthenticationEventParams', () => {
+ it('creates authentication event params given a component Id', () => {
+ expect(createAuthenticationEventParams('signin_to_reply_comment')).toBe(
+ 'componentEventParams=componentType%3Didentityauthentication%26componentId%3Dsignin_to_reply_comment',
+ );
+ });
+});
diff --git a/dotcom-rendering/src/discussion-rendering/lib/identity-component-event.ts b/dotcom-rendering/src/discussion-rendering/lib/identity-component-event.ts
new file mode 100644
index 00000000000..5110b18605f
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/identity-component-event.ts
@@ -0,0 +1,8 @@
+export type AuthenticationComponentId = 'signin_to_reply_comment';
+
+export const createAuthenticationEventParams = (
+ componentId: AuthenticationComponentId,
+): string => {
+ const params = `componentType=identityauthentication&componentId=${componentId}`;
+ return `componentEventParams=${encodeURIComponent(params)}`;
+};
diff --git a/dotcom-rendering/src/discussion-rendering/lib/palette.ts b/dotcom-rendering/src/discussion-rendering/lib/palette.ts
new file mode 100644
index 00000000000..08bcad60996
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/palette.ts
@@ -0,0 +1,17 @@
+import {
+ culture,
+ labs,
+ lifestyle,
+ news,
+ opinion,
+ sport,
+} from '@guardian/source-foundations';
+
+export const palette = {
+ news,
+ opinion,
+ culture,
+ sport,
+ lifestyle,
+ labs,
+};
diff --git a/dotcom-rendering/src/discussion-rendering/lib/pillarToEnum.ts b/dotcom-rendering/src/discussion-rendering/lib/pillarToEnum.ts
new file mode 100644
index 00000000000..5ed8b0e7b04
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/pillarToEnum.ts
@@ -0,0 +1,20 @@
+import { ArticlePillar, ArticleSpecial, ArticleTheme } from '@guardian/libs';
+import { CAPIPillar } from '../discussionTypes';
+
+export const pillarToEnum = (pillar: CAPIPillar): ArticleTheme => {
+ switch (pillar) {
+ case 'opinion':
+ return ArticlePillar.Opinion;
+ case 'culture':
+ return ArticlePillar.Culture;
+ case 'sport':
+ return ArticlePillar.Sport;
+ case 'lifestyle':
+ return ArticlePillar.Lifestyle;
+ case 'labs':
+ return ArticleSpecial.Labs;
+ case 'news':
+ default:
+ return ArticlePillar.News;
+ }
+};
diff --git a/dotcom-rendering/src/discussion-rendering/lib/pillarToString.ts b/dotcom-rendering/src/discussion-rendering/lib/pillarToString.ts
new file mode 100644
index 00000000000..b8bf83ed361
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/pillarToString.ts
@@ -0,0 +1,22 @@
+import type { ArticleTheme } from '@guardian/libs';
+import { ArticlePillar, ArticleSpecial } from '@guardian/libs';
+import type { CAPIPillar } from '../discussionTypes';
+
+export const pillarToString = (pillar: ArticleTheme): CAPIPillar => {
+ switch (pillar) {
+ case ArticlePillar.News:
+ return 'news';
+ case ArticlePillar.Opinion:
+ return 'opinion';
+ case ArticlePillar.Culture:
+ return 'culture';
+ case ArticlePillar.Sport:
+ return 'sport';
+ case ArticlePillar.Lifestyle:
+ return 'lifestyle';
+ case ArticleSpecial.Labs:
+ return 'labs';
+ default:
+ return 'news';
+ }
+};
diff --git a/dotcom-rendering/src/discussion-rendering/lib/simulateNewComment.ts b/dotcom-rendering/src/discussion-rendering/lib/simulateNewComment.ts
new file mode 100644
index 00000000000..11b37149a22
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/simulateNewComment.ts
@@ -0,0 +1,51 @@
+import type { CommentType, UserProfile } from '../discussionTypes';
+
+export const simulateNewComment = (
+ commentId: number,
+ body: string,
+ user: UserProfile,
+ commentBeingRepliedTo?: CommentType,
+): CommentType => {
+ // The returned object below is a simulation of the comment that was created that
+ // we add to our local state so that the reader has immediate feedback. We do
+ // this because the api has a 1 minute cache expiry so simply refreshing the
+ // main list of comments often won't return the comment just added.
+ // Edge case: If the user _does_ refresh then this local state will be overridden
+ // by the new api response and - if the refresh was within 60 seconds - the
+ // reader's comment will not be present. The same edge case exists in frontend.
+ return {
+ id: commentId,
+ body,
+ date: Date(),
+ isoDateTime: new Date().toISOString(),
+ status: 'visible',
+ webUrl: `https://discussion.theguardian.com/comment-permalink/${commentId}`,
+ apiUrl: `https://discussion.guardianapis.com/discussion-api/comment/${commentId}`,
+ numRecommends: 0,
+ isHighlighted: false,
+ userProfile: {
+ userId: user.userId,
+ displayName: user.displayName,
+ webUrl: user.webUrl,
+ apiUrl: user.apiUrl,
+ avatar: user.avatar,
+ secureAvatarUrl: user.secureAvatarUrl,
+ badge: user.badge,
+ },
+ ...(commentBeingRepliedTo
+ ? {
+ responseTo: {
+ displayName:
+ commentBeingRepliedTo.userProfile.displayName,
+ commentApiUrl: `https://discussion.guardianapis.com/discussion-api/comment/${commentBeingRepliedTo.id}`,
+ isoDateTime: commentBeingRepliedTo.isoDateTime,
+ date: commentBeingRepliedTo.date,
+ commentId: String(commentBeingRepliedTo.id),
+ commentWebUrl: `https://discussion.theguardian.com/comment-permalink/${commentBeingRepliedTo.id}`,
+ },
+ }
+ : {
+ responses: [],
+ }),
+ };
+};
diff --git a/dotcom-rendering/src/discussion-rendering/lib/useInterval.ts b/dotcom-rendering/src/discussion-rendering/lib/useInterval.ts
new file mode 100644
index 00000000000..adaa11d3cc2
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/lib/useInterval.ts
@@ -0,0 +1,29 @@
+import { useEffect, useRef } from 'react';
+
+type CallbackFunction = () => void;
+
+// Why do we have this custom hook?
+// https://overreacted.io/making-setinterval-declarative-with-react-hooks/
+export const useInterval = (
+ callback: CallbackFunction,
+ delay: number,
+): void => {
+ const savedCallback = useRef();
+
+ // Remember the latest callback.
+ useEffect(() => {
+ savedCallback.current = callback;
+ }, [callback]);
+
+ // Set up the interval.
+ useEffect(() => {
+ function tick() {
+ const currentCallback = savedCallback.current;
+ if (currentCallback) {
+ currentCallback();
+ }
+ }
+ const id = setInterval(tick, delay);
+ return () => clearInterval(id);
+ }, [delay]);
+};
diff --git a/dotcom-rendering/src/discussion-rendering/test-page.tsx b/dotcom-rendering/src/discussion-rendering/test-page.tsx
new file mode 100644
index 00000000000..e539d7d2fd3
--- /dev/null
+++ b/dotcom-rendering/src/discussion-rendering/test-page.tsx
@@ -0,0 +1,129 @@
+import { useState } from 'react';
+import { createRoot } from 'react-dom/client';
+import { App } from './App';
+import type { CAPIPillar } from './discussionTypes';
+import { pillarToEnum } from './lib/pillarToEnum';
+
+const getQueryParam = (queryParam: string, defaultValue: string): string =>
+ new URLSearchParams(window.location.search).get(queryParam) ?? defaultValue;
+
+const pillars: CAPIPillar[] = [
+ 'news',
+ 'sport',
+ 'opinion',
+ 'culture',
+ 'lifestyle',
+ 'labs',
+];
+const isPillar = (s: string): s is CAPIPillar =>
+ //@ts-expect-error -- we’re creating a type predicate
+ pillars.includes(s);
+
+const paramPillar = getQueryParam('pillar', 'news');
+
+const IndexPageWrapper = () => {
+ // const [page, setPage] = useState(1);
+ const [closed, setClosed] = useState(
+ getQueryParam('closedForComments', 'false') === 'true',
+ );
+ const [expanded, setExpanded] = useState(
+ getQueryParam('expanded', 'true') === 'true',
+ );
+ const [id, setId] = useState(getQueryParam('id', '39f5z'));
+ const [pillar, setPillar] = useState(
+ isPillar(paramPillar) ? paramPillar : 'news',
+ );
+
+ // Only render when we have checked the query params
+ if (id === '') {
+ return null;
+ }
+
+ return (
+ <>
+ Discussion-rendering Test Page
+
+ Set a specific discussion using the id in a query param like{' '}
+
+ ?id=32255&closedForComments=true&pillar=opinion
+
+ .
+
+
+
+
setExpanded(!expanded)}
+ type="button"
+ >
+ {expanded ? 'collapse' : 'expand'}
+
+
+
+
+ {closed ? 'Closed' : 'Open'} for comment
+
+ setClosed(!closed)}
+ type="button"
+ >
+ click to {closed ? 'open' : 'close'}
+
+
+
+
setId(e.target.value)}
+ />
+
{
+ const selectedPillar = e.target.value;
+ const validPillar = isPillar(selectedPillar)
+ ? selectedPillar
+ : 'news';
+ setPillar(validPillar);
+ }}
+ >
+ {pillars.map((aPillar) => (
+
+ {aPillar}
+
+ ))}
+
+
+
+
+
+ {}}
+ apiKey="discussion-rendering"
+ initialPage={1}
+ idApiUrl="https://idapi.theguardian.com"
+ // page={page}
+ // onPageChange={setPage}
+ />
+
+
+ >
+ );
+};
+
+const container = document.createElement('div');
+document.body.appendChild(container);
+
+const root = createRoot(container);
+root.render( );
diff --git a/dotcom-rendering/src/layouts/CommentLayout.tsx b/dotcom-rendering/src/layouts/CommentLayout.tsx
index 964412cea21..57f133f5781 100644
--- a/dotcom-rendering/src/layouts/CommentLayout.tsx
+++ b/dotcom-rendering/src/layouts/CommentLayout.tsx
@@ -39,7 +39,6 @@ import { Standfirst } from '../components/Standfirst';
import { StickyBottomBanner } from '../components/StickyBottomBanner.importable';
import { SubMeta } from '../components/SubMeta';
import { SubNav } from '../components/SubNav.importable';
-import { buildAdTargeting } from '../lib/ad-targeting';
import { getSoleContributor } from '../lib/byline';
import { canRenderAds } from '../lib/canRenderAds';
import { getContributionsServiceUrl } from '../lib/contributions';
@@ -279,16 +278,6 @@ export const CommentLayout = ({
const isInEuropeTest =
article.config.abTests.europeNetworkFrontVariant === 'variant';
- const adTargeting: AdTargeting = buildAdTargeting({
- isAdFreeUser: article.isAdFreeUser,
- isSensitive: article.config.isSensitive,
- videoDuration: article.config.videoDuration,
- edition: article.config.edition,
- section: article.config.section,
- sharedAdTargeting: article.config.sharedAdTargeting,
- adUnit: article.config.adUnit,
- });
-
const showBodyEndSlot =
parse(article.slotMachineFlags ?? '').showBodyEnd ||
article.config.switches.slotBodyEnd;
@@ -449,7 +438,6 @@ export const CommentLayout = ({
{
+ // show CPScott?
+ if (
+ collection.displayName === 'Opinion' &&
+ ['uk/commentisfree', 'au/commentisfree'].includes(front.config.pageId)
+ ) {
+ return ;
+ }
+
+ // show weather?
+ if (
+ front.config.switches['weather'] &&
+ ['uk', 'us', 'au', 'international', 'europe'].includes(
+ front.config.pageId,
+ ) &&
+ // based on https://github.com/guardian/frontend/blob/473aafd168fec7f2a578a52c8e84982e3ec10fea/common/app/views/support/GetClasses.scala#L107
+ collection.displayName.toLowerCase() === 'headlines'
+ ) {
+ return (
+
+
+
+ );
+ }
+
+ // show nothing!
+ return null;
+};
+
export const FrontLayout = ({ front, NAV }: Props) => {
const {
config: { abTests, isPaidContent, hasPageSkin },
@@ -454,47 +491,60 @@ export const FrontLayout = ({ front, NAV }: Props) => {
const containerOverrides =
decideContainerOverrides(containerPalette);
return (
- 0}
- padContent={false}
- url={collection.href}
- containerPalette={containerPalette}
- showDateHeader={
- collection.config.showDateHeader
- }
- editionId={front.editionId}
- backgroundColour={
- containerOverrides.background.containerOuter
- }
- innerBackgroundColour={
- containerOverrides.background.container
- }
- hasPageSkin={hasPageSkin}
- >
-
-
-
-
+
+ 0}
+ padContent={false}
+ url={collection.href}
+ containerPalette={containerPalette}
+ showDateHeader={
+ collection.config.showDateHeader
+ }
+ editionId={front.editionId}
+ backgroundColour={
+ containerOverrides.background
+ .containerOuter
+ }
+ innerBackgroundColour={
+ containerOverrides.background.container
+ }
+ hasPageSkin={hasPageSkin}
+ >
+
+
+
+
+ {decideAdSlot(
+ renderAds,
+ index,
+ front.isNetworkFront,
+ front.pressedPage.collections.length,
+ front.pressedPage.frontProperties
+ .isPaidContent,
+ mobileAdPositions,
+ hasPageSkin,
+ )}
+
);
}
@@ -518,15 +568,10 @@ export const FrontLayout = ({ front, NAV }: Props) => {
collection,
front.isNetworkFront,
)}
- leftContent={
- (front.config.pageId ===
- 'uk/commentisfree' ||
- front.config.pageId ===
- 'au/commentisfree') &&
- collection.displayName === 'Opinion' && (
-
- )
- }
+ leftContent={decideLeftContent(
+ front,
+ collection,
+ )}
badge={collection.badge}
sectionId={ophanName}
collectionId={collection.id}
@@ -551,7 +596,9 @@ export const FrontLayout = ({ front, NAV }: Props) => {
collection.containerPalette
}
showAge={
- collection.displayName === 'Headlines'
+ !hideAge.includes(
+ collection.displayName,
+ )
}
adIndex={desktopAdPositions.indexOf(index)}
renderAds={renderAds}
diff --git a/dotcom-rendering/src/layouts/FullPageInteractiveLayout.tsx b/dotcom-rendering/src/layouts/FullPageInteractiveLayout.tsx
index ddfe7cf6289..b59a7e90d7b 100644
--- a/dotcom-rendering/src/layouts/FullPageInteractiveLayout.tsx
+++ b/dotcom-rendering/src/layouts/FullPageInteractiveLayout.tsx
@@ -72,7 +72,6 @@ const Renderer = ({
format,
element,
- adTargeting: undefined,
host,
index,
isMainMedia: false,
diff --git a/dotcom-rendering/src/layouts/ImmersiveLayout.tsx b/dotcom-rendering/src/layouts/ImmersiveLayout.tsx
index cc7dd9f0f03..5fc6ab09dbd 100644
--- a/dotcom-rendering/src/layouts/ImmersiveLayout.tsx
+++ b/dotcom-rendering/src/layouts/ImmersiveLayout.tsx
@@ -1,5 +1,4 @@
import { css } from '@emotion/react';
-import type { SerializedStyles } from '@emotion/react';
import { ArticleDesign, ArticleDisplay, ArticleSpecial } from '@guardian/libs';
import type { ArticleFormat } from '@guardian/libs';
import {
@@ -34,7 +33,7 @@ import { LabsHeader } from '../components/LabsHeader';
import { MainMedia } from '../components/MainMedia';
import { MostViewedFooterData } from '../components/MostViewedFooterData.importable';
import { MostViewedFooterLayout } from '../components/MostViewedFooterLayout';
-import { minNavHeight, Nav } from '../components/Nav/Nav';
+import { minNavHeightPx, Nav } from '../components/Nav/Nav';
import { OnwardsUpper } from '../components/OnwardsUpper.importable';
import { RightColumn } from '../components/RightColumn';
import { Section } from '../components/Section';
@@ -43,7 +42,6 @@ import { Standfirst } from '../components/Standfirst';
import { StickyBottomBanner } from '../components/StickyBottomBanner.importable';
import { SubMeta } from '../components/SubMeta';
import { SubNav } from '../components/SubNav.importable';
-import { buildAdTargeting } from '../lib/ad-targeting';
import { canRenderAds } from '../lib/canRenderAds';
import { getContributionsServiceUrl } from '../lib/contributions';
import { decidePalette } from '../lib/decidePalette';
@@ -255,16 +253,6 @@ export const ImmersiveLayout = ({
config: { isPaidContent, host },
} = article;
- const adTargeting: AdTargeting = buildAdTargeting({
- isAdFreeUser: article.isAdFreeUser,
- isSensitive: article.config.isSensitive,
- videoDuration: article.config.videoDuration,
- edition: article.config.edition,
- section: article.config.section,
- sharedAdTargeting: article.config.sharedAdTargeting,
- adUnit: article.config.adUnit,
- });
-
const showBodyEndSlot =
parse(article.slotMachineFlags ?? '').showBodyEnd ||
article.config.switches.slotBodyEnd;
@@ -296,13 +284,11 @@ export const ImmersiveLayout = ({
*/
const labsHeaderHeight = LABS_HEADER_HEIGHT;
- const navHeightCSS: SerializedStyles = minNavHeight;
- const navHeight = parseInt(navHeightCSS.styles.slice(11, -2));
- const combinedHeight = (navHeight + labsHeaderHeight).toString();
+ const combinedHeight = (minNavHeightPx + labsHeaderHeight).toString();
const navAndLabsHeaderHeight = isLabs
? `${combinedHeight}px`
- : `${navHeight}px`;
+ : `${minNavHeightPx}px`;
const hasMainMediaStyles = css`
height: calc(80vh - ${navAndLabsHeaderHeight});
@@ -408,7 +394,6 @@ export const ImmersiveLayout = ({
{
const isInEuropeTest =
article.config.abTests.europeNetworkFrontVariant === 'variant';
- const adTargeting: AdTargeting = buildAdTargeting({
- isAdFreeUser: article.isAdFreeUser,
- isSensitive: article.config.isSensitive,
- videoDuration: article.config.videoDuration,
- edition: article.config.edition,
- section: article.config.section,
- sharedAdTargeting: article.config.sharedAdTargeting,
- adUnit: article.config.adUnit,
- });
const contributionsServiceUrl = getContributionsServiceUrl(article);
const palette = decidePalette(format);
@@ -493,7 +484,6 @@ export const NewsletterSignupLayout = ({ article, NAV, format }: Props) => {
{
const isInEuropeTest =
article.config.abTests.europeNetworkFrontVariant === 'variant';
- const adTargeting: AdTargeting = buildAdTargeting({
- isAdFreeUser: article.isAdFreeUser,
- isSensitive: article.config.isSensitive,
- videoDuration: article.config.videoDuration,
- edition: article.config.edition,
- section: article.config.section,
- sharedAdTargeting: article.config.sharedAdTargeting,
- adUnit: article.config.adUnit,
- });
-
const showBodyEndSlot =
parse(article.slotMachineFlags ?? '').showBodyEnd ||
article.config.switches.slotBodyEnd;
@@ -537,7 +526,6 @@ export const StandardLayout = (props: WebProps | AppProps) => {
{
format={format}
blocks={article.blocks}
pinnedPost={article.pinnedPost}
- adTargeting={adTargeting}
host={host}
pageId={article.pageId}
webTitle={article.webTitle}
diff --git a/dotcom-rendering/src/layouts/TagFrontLayout.tsx b/dotcom-rendering/src/layouts/TagFrontLayout.tsx
index 4fb7dd97394..35d3b6d9150 100644
--- a/dotcom-rendering/src/layouts/TagFrontLayout.tsx
+++ b/dotcom-rendering/src/layouts/TagFrontLayout.tsx
@@ -8,6 +8,7 @@ import {
news,
} from '@guardian/source-foundations';
import { StraightLines } from '@guardian/source-react-components-development-kitchen';
+import { Fragment } from 'react';
import { AdSlot } from '../components/AdSlot';
import { DecideContainerByTrails } from '../components/DecideContainerByTrails';
import { Footer } from '../components/Footer';
@@ -18,13 +19,20 @@ import { Island } from '../components/Island';
import { Nav } from '../components/Nav/Nav';
import { Section } from '../components/Section';
import { SubNav } from '../components/SubNav.importable';
+import { TagFrontFastMpu } from '../components/TagFrontFastMpu';
import { TagFrontHeader } from '../components/TagFrontHeader';
+import { TagFrontSlowMpu } from '../components/TagFrontSlowMpu';
import { TrendingTopics } from '../components/TrendingTopics';
import { canRenderAds } from '../lib/canRenderAds';
import { decidePalette } from '../lib/decidePalette';
import { getEditionFromId } from '../lib/edition';
+import {
+ getMerchHighPosition,
+ getTagFrontMobileAdPositions,
+} from '../lib/getAdPositions';
import type { NavType } from '../model/extract-nav';
import type { DCRTagFrontType } from '../types/tagFront';
+import { decideAdSlot } from './FrontLayout';
import { Stuck } from './lib/stickiness';
interface Props {
@@ -66,11 +74,23 @@ export const TagFrontLayout = ({ tagFront, NAV }: Props) => {
const palette = decidePalette(format);
+ const merchHighPosition = getMerchHighPosition(
+ tagFront.groupedTrails.length,
+ false,
+ );
+
/**
* This property currently only applies to the header and merchandising slots
*/
const renderAds = canRenderAds(tagFront);
+ const mobileAdPositions = renderAds
+ ? getTagFrontMobileAdPositions(
+ tagFront.groupedTrails,
+ merchHighPosition,
+ )
+ : [];
+
return (
<>
@@ -194,6 +214,35 @@ export const TagFrontLayout = ({ tagFront, NAV }: Props) => {
groupedTrails.day !== undefined,
);
+ const ContainerComponent = () => {
+ if (
+ 'injected' in groupedTrails &&
+ 'speed' in groupedTrails
+ ) {
+ if (groupedTrails.speed === 'fast') {
+ return (
+
+ );
+ } else {
+ return (
+
+ );
+ }
+ }
+ return (
+
+ );
+ };
+
const url =
groupedTrails.day !== undefined
? `/${tagFront.pageId}/${groupedTrails.year}/${date
@@ -210,37 +259,44 @@ export const TagFrontLayout = ({ tagFront, NAV }: Props) => {
: undefined;
return (
-
-
-
+
+
+
+
+ {decideAdSlot(
+ renderAds,
+ index,
+ false,
+ tagFront.groupedTrails.length,
+ tagFront.config.isPaidContent,
+ mobileAdPositions,
+ tagFront.config.hasPageSkin,
+ )}
+
);
})}
diff --git a/dotcom-rendering/src/lib/ArticleRenderer.tsx b/dotcom-rendering/src/lib/ArticleRenderer.tsx
index 2cf2f75988f..5346f59f464 100644
--- a/dotcom-rendering/src/lib/ArticleRenderer.tsx
+++ b/dotcom-rendering/src/lib/ArticleRenderer.tsx
@@ -27,7 +27,6 @@ const adStylesDynamic = css`
type Props = {
format: ArticleFormat;
elements: FEElement[];
- adTargeting?: AdTargeting;
host?: string;
pageId: string;
webTitle: string;
@@ -49,7 +48,6 @@ type Props = {
export const ArticleRenderer = ({
format,
elements,
- adTargeting,
host,
pageId,
webTitle,
@@ -74,7 +72,6 @@ export const ArticleRenderer = ({
key={index}
format={format}
element={element}
- adTargeting={adTargeting}
ajaxUrl={ajaxUrl}
host={host}
index={index}
diff --git a/dotcom-rendering/src/lib/LiveBlogRenderer.tsx b/dotcom-rendering/src/lib/LiveBlogRenderer.tsx
index b65ede4f590..2c114b8f5f2 100644
--- a/dotcom-rendering/src/lib/LiveBlogRenderer.tsx
+++ b/dotcom-rendering/src/lib/LiveBlogRenderer.tsx
@@ -17,7 +17,6 @@ import type { TagType } from '../types/tag';
type Props = {
format: ArticleFormat;
blocks: Block[];
- adTargeting: AdTargeting;
pinnedPost?: Block;
host?: string;
pageId: string;
@@ -45,7 +44,6 @@ export const LiveBlogRenderer = ({
format,
blocks,
pinnedPost,
- adTargeting,
host,
pageId,
webTitle,
@@ -83,7 +81,6 @@ export const LiveBlogRenderer = ({
block={pinnedPost}
pageId={pageId}
webTitle={webTitle}
- adTargeting={adTargeting}
host={host}
ajaxUrl={ajaxUrl}
isLiveUpdate={isLiveUpdate}
@@ -137,7 +134,6 @@ export const LiveBlogRenderer = ({
format={format}
pageId={pageId}
webTitle={webTitle}
- adTargeting={adTargeting}
host={host}
ajaxUrl={ajaxUrl}
isLiveUpdate={isLiveUpdate}
diff --git a/dotcom-rendering/src/lib/ad-targeting.ts b/dotcom-rendering/src/lib/ad-targeting.ts
index 15481f87202..7334943c3d5 100644
--- a/dotcom-rendering/src/lib/ad-targeting.ts
+++ b/dotcom-rendering/src/lib/ad-targeting.ts
@@ -1,5 +1,7 @@
import { isString } from '@guardian/libs';
+export type SharedAdTargeting = Record
;
+
// TODO: this function already exists in commercial-core, consider exporting it to avoid duplication
const getUrlKeywords = (url: string): string[] => {
const lastSegment = url
@@ -23,7 +25,7 @@ export const buildAdTargeting = ({
isSensitive: boolean;
edition: string;
section: string;
- sharedAdTargeting: Record;
+ sharedAdTargeting: SharedAdTargeting;
adUnit: string;
videoDuration?: number;
}): AdTargeting => {
diff --git a/dotcom-rendering/src/lib/cardWrappers.tsx b/dotcom-rendering/src/lib/cardWrappers.tsx
index a30364c588d..c043d06bdb7 100644
--- a/dotcom-rendering/src/lib/cardWrappers.tsx
+++ b/dotcom-rendering/src/lib/cardWrappers.tsx
@@ -266,6 +266,7 @@ export const Card25Media25 = ({
imageSize="small"
headlineSize="medium"
headlineSizeOnMobile="medium"
+ videoSize="too small to play: 479px or less"
/>
);
};
@@ -301,6 +302,7 @@ export const Card25Media25SmallHeadline = ({
imageSize="small"
headlineSize="small"
headlineSizeOnMobile="medium"
+ videoSize="too small to play: 479px or less"
/>
);
};
@@ -343,6 +345,7 @@ export const Card25Media25Tall = ({
: undefined
}
supportingContent={trail.supportingContent?.slice(0, 2)}
+ videoSize="too small to play: 479px or less"
/>
);
};
@@ -377,6 +380,7 @@ export const Card25Media25TallNoTrail = ({
headlineSize="medium"
headlineSizeOnMobile="medium"
supportingContent={trail.supportingContent?.slice(0, 2)}
+ videoSize="too small to play: 479px or less"
/>
);
};
@@ -411,6 +415,7 @@ export const Card25Media25TallSmallHeadline = ({
headlineSize="small"
headlineSizeOnMobile="medium"
supportingContent={trail.supportingContent?.slice(0, 2)}
+ videoSize="too small to play: 479px or less"
/>
);
};
@@ -651,6 +656,7 @@ export const CardDefault = ({
avatarUrl={undefined}
headlineSize="small"
headlineSizeOnMobile="small"
+ videoSize="too small to play: 479px or less"
/>
);
};
@@ -682,6 +688,7 @@ export const CardDefaultMedia = ({
imagePositionOnMobile="none"
headlineSize="small"
headlineSizeOnMobile="small"
+ videoSize="too small to play: 479px or less"
/>
);
};
@@ -713,6 +720,7 @@ export const CardDefaultMediaMobile = ({
imagePositionOnMobile="left"
headlineSize="small"
headlineSizeOnMobile="small"
+ videoSize="too small to play: 479px or less"
/>
);
};
diff --git a/dotcom-rendering/src/lib/dynamicSlices.tsx b/dotcom-rendering/src/lib/dynamicSlices.tsx
index 04f59417826..54ce79e0a5d 100644
--- a/dotcom-rendering/src/lib/dynamicSlices.tsx
+++ b/dotcom-rendering/src/lib/dynamicSlices.tsx
@@ -15,6 +15,7 @@ import {
Card50Media50Tall,
Card75Media50Left,
Card75Media50Right,
+ CardDefaultMedia,
} from './cardWrappers';
/**
@@ -236,6 +237,96 @@ export const Card100PictureTop = ({
);
};
+export const Card25_Card25_Card25_Card25 = ({
+ cards,
+ showAge,
+ containerPalette,
+}: {
+ cards: DCRFrontCard[];
+ showAge?: boolean;
+ containerPalette?: DCRContainerPalette;
+}) => {
+ if (cards.length < 4) return null;
+
+ const bigs = cards.slice(0, 4);
+
+ return (
+
+ {bigs.map((card, cardIndex) => {
+ return (
+
+
+
+ );
+ })}
+
+ );
+};
+
+export const ColumnOfCards50_Card25_Card25 = ({
+ cards,
+ showAge,
+ containerPalette,
+}: {
+ cards: DCRFrontCard[];
+ showAge?: boolean;
+ containerPalette?: DCRContainerPalette;
+}) => {
+ const bigs = cards.slice(0, 2).reverse();
+ const remaining = cards.slice(2);
+
+ return (
+
+ {bigs.map((big) => {
+ return (
+
+
+
+ );
+ })}
+
+
+ {remaining.map((card) => {
+ return (
+
+
+
+ );
+ })}
+
+
+
+ );
+};
+
/* .___________________________________.
* | ############################|
* | ############################|
diff --git a/dotcom-rendering/src/lib/getAdPositions.test.ts b/dotcom-rendering/src/lib/getAdPositions.test.ts
index 282c587659f..e9df3a9562f 100644
--- a/dotcom-rendering/src/lib/getAdPositions.test.ts
+++ b/dotcom-rendering/src/lib/getAdPositions.test.ts
@@ -1,5 +1,9 @@
import type { DCRCollectionType } from '../types/front';
-import { getDesktopAdPositions, getMobileAdPositions } from './getAdPositions';
+import {
+ getDesktopAdPositions,
+ getMerchHighPosition,
+ getMobileAdPositions,
+} from './getAdPositions';
const defaultTestCollections: Pick[] = [
...Array(12),
@@ -22,10 +26,10 @@ describe('Mobile Ads', () => {
});
// MerchandiseHigh is in position:
- // 3: when it's a network front and collections are equal or more than 4
- // 2: when collections are equal or more than 4 and is not a network front
+ // 2: when it's a network front and collections are equal or more than 4
+ // 1: when collections are equal or more than 4 and is not a network front
// 0: when collections are less than 4
- it.each([3, 2, 0])(
+ it.each([2, 1, 0])(
`should not insert ad when merchandise high is in position %i`,
(merchHighPosition) => {
const mobileAdPositions = getMobileAdPositions(
@@ -37,7 +41,10 @@ describe('Mobile Ads', () => {
);
it('Should not insert ad after a thrasher container', () => {
- const merchHighPosition = 2;
+ const merchHighPosition = getMerchHighPosition(
+ defaultTestCollections.length,
+ false,
+ );
const testCollections = [...defaultTestCollections];
testCollections.splice(6, 0, { collectionType: 'fixed/thrasher' });
testCollections.splice(9, 0, { collectionType: 'fixed/thrasher' });
@@ -53,7 +60,6 @@ describe('Mobile Ads', () => {
// We used https://www.theguardian.com/uk/commentisfree as a blueprint
it('Non-network front, with more than 4 collections, without thrashers', () => {
- const merchHighPosition = 2;
const testCollections: Pick[] = [
{ collectionType: 'fixed/large/slow-XIV' },
{ collectionType: 'fixed/medium/slow-VI' },
@@ -70,6 +76,11 @@ describe('Mobile Ads', () => {
{ collectionType: 'news/most-popular' },
];
+ const merchHighPosition = getMerchHighPosition(
+ testCollections.length,
+ false,
+ );
+
const mobileAdPositions = getMobileAdPositions(
testCollections,
merchHighPosition,
@@ -80,7 +91,6 @@ describe('Mobile Ads', () => {
// We used https://www.theguardian.com/uk as a blueprint
it('UK Network Front, with more than 4 collections, with thrashers at various places', () => {
- const merchHighPosition = 3;
const testCollections: Pick[] = [
{ collectionType: 'dynamic/fast' },
{ collectionType: 'fixed/small/slow-IV' },
@@ -108,17 +118,55 @@ describe('Mobile Ads', () => {
{ collectionType: 'news/most-popular' },
];
+ const merchHighPosition = getMerchHighPosition(
+ testCollections.length,
+ true,
+ );
+
+ const mobileAdPositions = getMobileAdPositions(
+ testCollections,
+ merchHighPosition,
+ );
+
+ expect(mobileAdPositions).toEqual([0, 3, 6, 9, 12, 16, 18, 20, 22]);
+ });
+
+ // We used https://www.theguardian.com/international as a blueprint
+ it('International Network Front, with more than 4 collections, with thrashers at various places', () => {
+ const merchHighPosition = 3;
+ const testCollections: Pick[] = [
+ { collectionType: 'dynamic/fast' },
+ { collectionType: 'fixed/small/slow-IV' },
+ { collectionType: 'dynamic/slow' },
+ { collectionType: 'dynamic/slow-mpu' },
+ { collectionType: 'dynamic/slow' },
+ { collectionType: 'fixed/thrasher' },
+ { collectionType: 'fixed/small/slow-IV' },
+ { collectionType: 'dynamic/fast' },
+ { collectionType: 'fixed/small/slow-IV' },
+ { collectionType: 'fixed/thrasher' },
+ { collectionType: 'dynamic/slow-mpu' },
+ { collectionType: 'fixed/thrasher' },
+ { collectionType: 'dynamic/slow-mpu' },
+ { collectionType: 'fixed/thrasher' },
+ { collectionType: 'dynamic/slow-mpu' },
+ { collectionType: 'fixed/small/slow-IV' },
+ { collectionType: 'fixed/small/slow-IV' },
+ { collectionType: 'fixed/video' },
+ { collectionType: 'fixed/medium/slow-VI' },
+ { collectionType: 'news/most-popular' },
+ ];
+
const mobileAdPositions = getMobileAdPositions(
testCollections,
merchHighPosition,
);
- expect(mobileAdPositions).toEqual([0, 2, 6, 9, 12, 16, 18, 20, 22]);
+ expect(mobileAdPositions).toEqual([0, 2, 6, 9, 13, 15, 17]);
});
// We used https://www.theguardian.com/us as a blueprint
it('US Network Front, with more than 4 collections, with thrashers at various places', () => {
- const merchHighPosition = 3;
const testCollections: Pick[] = [
{ collectionType: 'dynamic/fast' },
{ collectionType: 'fixed/small/slow-IV' },
@@ -143,18 +191,21 @@ describe('Mobile Ads', () => {
{ collectionType: 'news/most-popular' },
];
+ const merchHighPosition = getMerchHighPosition(
+ testCollections.length,
+ true,
+ );
+
const mobileAdPositions = getMobileAdPositions(
testCollections,
merchHighPosition,
);
- expect(mobileAdPositions).toEqual([0, 2, 5, 9, 12, 14, 16, 19]);
+ expect(mobileAdPositions).toEqual([0, 4, 7, 10, 13, 15, 17]);
});
// We used https://www.theguardian.com/uk/lifeandstyle as a blueprint
it('Lifeandstyle front, with more than 4 collections, with thrashers at various places', () => {
- const merchHighPosition = 2;
-
const testCollections: Pick[] = [
{ collectionType: 'dynamic/slow' },
{ collectionType: 'fixed/medium/slow-VI' },
@@ -174,18 +225,21 @@ describe('Mobile Ads', () => {
{ collectionType: 'news/most-popular' },
];
+ const merchHighPosition = getMerchHighPosition(
+ testCollections.length,
+ false,
+ );
+
const mobileAdPositions = getMobileAdPositions(
testCollections,
merchHighPosition,
);
- expect(mobileAdPositions).toEqual([0, 4, 8, 10, 13]);
+ expect(mobileAdPositions).toEqual([0, 3, 6, 9, 12, 14]);
});
// We used https://www.theguardian.com/tone/recipes as a blueprint
it('Recipes front, with more than 4 collections, with thrasher at the first position', () => {
- const merchHighPosition = 2;
-
const testCollections: Pick[] = [
{ collectionType: 'fixed/thrasher' },
{ collectionType: 'fixed/medium/slow-VI' },
@@ -203,12 +257,17 @@ describe('Mobile Ads', () => {
{ collectionType: 'news/most-popular' },
];
+ const merchHighPosition = getMerchHighPosition(
+ testCollections.length,
+ false,
+ );
+
const mobileAdPositions = getMobileAdPositions(
testCollections,
merchHighPosition,
);
- expect(mobileAdPositions).toEqual([1, 4, 6, 8, 10, 12]);
+ expect(mobileAdPositions).toEqual([2, 4, 6, 8, 10, 12]);
});
});
diff --git a/dotcom-rendering/src/lib/getAdPositions.ts b/dotcom-rendering/src/lib/getAdPositions.ts
index 9ddeb895e87..005a09d87d4 100644
--- a/dotcom-rendering/src/lib/getAdPositions.ts
+++ b/dotcom-rendering/src/lib/getAdPositions.ts
@@ -1,4 +1,5 @@
import type { DCRCollectionType } from '../types/front';
+import type { GroupedTrailsBase } from '../types/tagFront';
type AdCandidate = Pick;
@@ -8,9 +9,9 @@ export const getMerchHighPosition = (
): number => {
if (collectionCount >= 4) {
if (isNetworkFront === true) {
- return 3;
- } else {
return 2;
+ } else {
+ return 1;
}
} else {
return 0;
@@ -74,6 +75,35 @@ export const getMobileAdPositions = (
// Should insert no more than 10 ads
.slice(0, 10);
+/**
+ * Uses a very similar approach to pressed fronts, except we
+ * - Do not need to consider thrashers
+ * - Do not need to consider the 'most viewed' container
+ *
+ * The types are also slightly different, as we no longer have
+ * specific container IDs, so we use the date which is unique
+ */
+export const getTagFrontMobileAdPositions = (
+ collections: Array,
+ merchHighPosition: number,
+): number[] =>
+ collections
+ .filter(
+ (_, index) =>
+ !hasAdjacentCommercialContainer(index, merchHighPosition),
+ )
+ .filter(isEvenIndex)
+ .map((collection) =>
+ collections.findIndex(
+ ({ day, month, year }) =>
+ day === collection.day &&
+ month === collection.month &&
+ year === collection.year,
+ ),
+ )
+ // Should insert no more than 10 ads
+ .slice(0, 10);
+
const hasDesktopAd = (collection: AdCandidate) => {
return (
collection.collectionType == 'dynamic/slow-mpu' ||
diff --git a/dotcom-rendering/src/lib/getDataLinkName.ts b/dotcom-rendering/src/lib/getDataLinkName.ts
index 43705f20083..8dfaab153d1 100644
--- a/dotcom-rendering/src/lib/getDataLinkName.ts
+++ b/dotcom-rendering/src/lib/getDataLinkName.ts
@@ -9,6 +9,7 @@ const getLinkType = (
cardStyle?: FEFrontCardStyle,
): RichLinkCardType => {
if (cardStyle === 'ExternalLink') return 'external';
+ if (cardStyle === 'Feature') return 'feature';
switch (theme) {
case ArticleSpecial.SpecialReport:
diff --git a/dotcom-rendering/src/lib/hideAge.ts b/dotcom-rendering/src/lib/hideAge.ts
new file mode 100644
index 00000000000..5b554e13c96
--- /dev/null
+++ b/dotcom-rendering/src/lib/hideAge.ts
@@ -0,0 +1,6 @@
+export const hideAge = [
+ 'Newsletters',
+ 'Showcase',
+ 'How to listen to Podcasts',
+ 'Get in touch',
+];
diff --git a/dotcom-rendering/src/lib/isServer.ts b/dotcom-rendering/src/lib/isServer.ts
new file mode 100644
index 00000000000..df6bd5693a1
--- /dev/null
+++ b/dotcom-rendering/src/lib/isServer.ts
@@ -0,0 +1 @@
+export const isServer = typeof window === 'undefined';
diff --git a/dotcom-rendering/src/lib/mockRESTCalls.ts b/dotcom-rendering/src/lib/mockRESTCalls.ts
index e6c5dd4c180..fe362702cb2 100644
--- a/dotcom-rendering/src/lib/mockRESTCalls.ts
+++ b/dotcom-rendering/src/lib/mockRESTCalls.ts
@@ -2,12 +2,20 @@ import fetchMock from 'fetch-mock';
import { matchReport } from '../../fixtures/generated/match-report';
import { series } from '../../fixtures/generated/series';
import { storyPackage } from '../../fixtures/generated/story-package';
+import { comment } from '../../fixtures/manual/comment';
import { discussion } from '../../fixtures/manual/discussion';
import { discussionNoTopComments } from '../../fixtures/manual/discussion-no-top-comments';
+import { discussionWithNoComments } from '../../fixtures/manual/discussionWithNoComments';
+import { discussionWithTwoComments } from '../../fixtures/manual/discussionWithTwoComments';
+import { legacyDiscussionWithoutThreading } from '../../fixtures/manual/legacyDiscussionWithoutThreading';
import { mostRead } from '../../fixtures/manual/most-read';
import { mostReadGeo } from '../../fixtures/manual/most-read-geo';
+import { noTopPicks } from '../../fixtures/manual/noTopPicks';
import { related } from '../../fixtures/manual/related';
import { shortDiscussion } from '../../fixtures/manual/short-discussion';
+import { topPicks } from '../../fixtures/manual/topPicks';
+
+export const mockedMessageID = '123456';
const richLinkCard = {
tags: [
@@ -119,175 +127,361 @@ const richLinkCard = {
},
};
-export const mockRESTCalls = (): void => {
- fetchMock
- .restore()
- // Intercept Logs
- .post(/logs\.(code.dev-)?guardianapis\.com\/log/, {
- status: 204,
- })
- // Most read by Geo
- .get(
- /.*api.nextgen.guardianapps.co.uk\/most-read-geo.*/,
- {
- status: 200,
- body: mostReadGeo,
- },
- { overwriteRoutes: false },
- )
- // Comment count
- .get(
- /.*api.nextgen.guardianapps.co.uk\/discussion\/comment-counts.*/,
- {
- status: 200,
- body: {
- counts: [
- {
- id: '/p/4k83z',
- count: 432,
- },
- ],
- },
- },
- { overwriteRoutes: false },
- )
- // Most read by category
- .get(
- /.*api.nextgen.guardianapps.co.uk\/most-read.*/,
- {
- status: 200,
- body: mostRead,
- },
- { overwriteRoutes: false },
- )
- // Related
- .get(
- /.*api.nextgen.guardianapps.co.uk\/related.*/,
- {
- status: 200,
- body: related,
- },
- { overwriteRoutes: false },
- )
- // Popular in tag
- .get(
- /.*api.nextgen.guardianapps.co.uk\/popular-in-tag.*/,
- {
- status: 200,
- body: related,
- },
- { overwriteRoutes: false },
- )
- // Series
- .get(
- /.*api.nextgen.guardianapps.co.uk\/series.*/,
- {
- status: 200,
- body: series,
- },
- { overwriteRoutes: false },
- )
- // Story package
- .get(
- /.*api.nextgen.guardianapps.co.uk\/story-package.*/,
- {
- status: 200,
- body: storyPackage,
- },
- { overwriteRoutes: false },
- )
- // Rich link
- .get(
- /.*api.nextgen.guardianapps.co.uk\/embed\/card.*/,
- {
- status: 200,
- body: richLinkCard,
- },
- { overwriteRoutes: false },
- )
- // Article share count
- .get(
- /.*api.nextgen.guardianapps.co.uk\/sharecount.*/,
- {
- status: 200,
- body: {
- path: 'money/2017/mar/10/ministers-to-criminalise-use-of-ticket-tout-harvesting-software',
- share_count: 273,
- refreshStatus: true,
- },
- },
- { overwriteRoutes: false },
- )
- // Get 'short' discussion - top comments
- .get(
- /.*discussion.theguardian.com\/discussion-api\/discussion\/p\/4v8kk\/topcomments/,
- {
- status: 200,
- body: discussionNoTopComments,
- },
- { overwriteRoutes: false },
- )
- // Get 'short' discussion
- .get(
- /.*discussion.theguardian.com\/discussion-api\/discussion\/p\/4v8kk/,
- {
- status: 200,
- body: shortDiscussion,
- },
- { overwriteRoutes: false },
- )
- // Get discussion
- .get(
- /.*discussion.theguardian.com\/discussion-api\/discussion\/.*/,
- {
- status: 200,
- body: discussion,
- },
- { overwriteRoutes: false },
- )
- // Get country code
- .get(
- /.*api.nextgen.guardianapps.co.uk\/geolocation.*/,
- {
- status: 200,
- body: { country: 'GB' },
- },
- { overwriteRoutes: false },
- )
- // Match report data
- .get(
- /.*api.nextgen.guardianapps.co.uk\/football\/api.*/,
- {
- status: 200,
- body: matchReport,
- },
- { overwriteRoutes: false },
- )
+export const mockRESTCalls = (): typeof fetchMock => {
+ return (
+ fetchMock
+ .restore()
+ // Intercept Logs
+ .post(/logs\.(code.dev-)?guardianapis\.com\/log/, {
+ status: 204,
+ })
+ // Most read by Geo
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/most-read-geo.*/,
+ {
+ status: 200,
+ body: mostReadGeo,
+ },
+ { overwriteRoutes: false },
+ )
+ // Comment count
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/discussion\/comment-counts.*/,
+ {
+ status: 200,
+ body: {
+ counts: [
+ {
+ id: '/p/4k83z',
+ count: 432,
+ },
+ ],
+ },
+ },
+ { overwriteRoutes: false },
+ )
+ .get(
+ /\/discussion\/comments\/count.*/,
+ {
+ status: 200,
+ body: {
+ counts: [
+ {
+ id: '/p/4k83z',
+ count: 432,
+ },
+ ],
+ },
+ },
+ { overwriteRoutes: false },
+ )
+ // Most read by category
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/most-read.*/,
+ {
+ status: 200,
+ body: mostRead,
+ },
+ { overwriteRoutes: false },
+ )
+ // Related
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/related.*/,
+ {
+ status: 200,
+ body: related,
+ },
+ { overwriteRoutes: false },
+ )
+ // Popular in tag
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/popular-in-tag.*/,
+ {
+ status: 200,
+ body: related,
+ },
+ { overwriteRoutes: false },
+ )
+ // Series
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/series.*/,
+ {
+ status: 200,
+ body: series,
+ },
+ { overwriteRoutes: false },
+ )
+ // Story package
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/story-package.*/,
+ {
+ status: 200,
+ body: storyPackage,
+ },
+ { overwriteRoutes: false },
+ )
+ // Rich link
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/embed\/card.*/,
+ {
+ status: 200,
+ body: richLinkCard,
+ },
+ { overwriteRoutes: false },
+ )
+ // Article share count
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/sharecount.*/,
+ {
+ status: 200,
+ body: {
+ path: 'money/2017/mar/10/ministers-to-criminalise-use-of-ticket-tout-harvesting-software',
+ share_count: 273,
+ refreshStatus: true,
+ },
+ },
+ { overwriteRoutes: false },
+ )
+ // Get 'short' discussion - top comments
+ .get(
+ /.*discussion.theguardian.com\/discussion-api\/discussion\/p\/4v8kk\/topcomments/,
+ {
+ status: 200,
+ body: discussionNoTopComments,
+ },
+ { overwriteRoutes: false },
+ )
+ // Get 'short' discussion
+ .get(
+ /.*discussion.theguardian.com\/discussion-api\/discussion\/p\/4v8kk/,
+ {
+ status: 200,
+ body: shortDiscussion,
+ },
+ { overwriteRoutes: false },
+ )
+ // Get country code
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/geolocation.*/,
+ {
+ status: 200,
+ body: { country: 'GB' },
+ },
+ { overwriteRoutes: false },
+ )
+ // Match report data
+ .get(
+ /.*api.nextgen.guardianapps.co.uk\/football\/api.*/,
+ {
+ status: 200,
+ body: matchReport,
+ },
+ { overwriteRoutes: false },
+ )
- // Get user discussion api (used for myAccount dropdown)
- .get(
- /discussionApiUrl\/profile\/me\?strict_sanctions_check=false/,
- {
- status: 200,
- body: {
- status: 'ok',
- userProfile: {
- userId: '123',
- displayName: 'Guardian User',
- webUrl: 'https://profile.test-theguardian.com/user/id/123',
- apiUrl: 'http://discussion.test-guardianapis.com/discussion-api/profile/123',
- avatar: 'https://avatar.test-guimcode.co.uk/user/123',
- secureAvatarUrl:
- 'https://avatar.test-guimcode.co.uk/user/123',
- badge: [],
- privateFields: {
- canPostComment: true,
- isPremoderated: false,
- hasCommented: false,
+ // Get user discussion api (used for myAccount dropdown)
+ .get(
+ /discussionApiUrl\/profile\/me\?strict_sanctions_check=false/,
+ {
+ status: 200,
+ body: {
+ status: 'ok',
+ userProfile: {
+ userId: '123',
+ displayName: 'Guardian User',
+ webUrl: 'https://profile.test-theguardian.com/user/id/123',
+ apiUrl: 'http://discussion.test-guardianapis.com/discussion-api/profile/123',
+ avatar: 'https://avatar.test-guimcode.co.uk/user/123',
+ secureAvatarUrl:
+ 'https://avatar.test-guimcode.co.uk/user/123',
+ badge: [],
+ privateFields: {
+ canPostComment: true,
+ isPremoderated: false,
+ hasCommented: false,
+ },
},
},
},
- },
- { overwriteRoutes: false },
- );
+ { overwriteRoutes: false },
+ )
+ // Get discussion 39f5z
+ .get(
+ /.*\/discussion.theguardian.com\/discussion-api\/discussion\/p\/39f5z\?.*/,
+ {
+ status: 200,
+ body: discussion,
+ },
+ { overwriteRoutes: false },
+ )
+ .get(
+ /.*\/discussion\/p\/39f5z\/topcomments.*/,
+ {
+ status: 200,
+ body: topPicks,
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Get discussion 39f5x
+ .get(
+ /.*\/discussion.theguardian.com\/discussion-api\/discussion\/p\/39f5x\?.*/,
+ {
+ status: 200,
+ body: discussionWithNoComments,
+ },
+ { overwriteRoutes: false },
+ )
+ .get(
+ /.*\/discussion\/p\/39f5x\/topcomments.*/,
+ {
+ status: 200,
+ body: noTopPicks,
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Get discussion 39f5a
+ .get(
+ /.*\/discussion.theguardian.com\/discussion-api\/discussion\/p\/39f5a\?.*/,
+ {
+ status: 200,
+ body: discussionWithTwoComments,
+ },
+ { overwriteRoutes: false },
+ )
+ .get(
+ /.*\/discussion\/p\/39f5a\/topcomments.*/,
+ {
+ status: 200,
+ body: noTopPicks,
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Get discussion 32255
+ .get(
+ /.*\/discussion.theguardian.com\/discussion-api\/discussion\/p\/32255\?.*/,
+ {
+ status: 200,
+ body: legacyDiscussionWithoutThreading,
+ },
+ { overwriteRoutes: false },
+ )
+ .get(
+ /.*\/discussion\/p\/32255\/topcomments.*/,
+ {
+ status: 200,
+ body: noTopPicks,
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Get discussion abc123
+ .get(
+ /.*\/discussion.theguardian.com\/discussion-api\/discussion\/p\/abc123\?.*/,
+ {
+ status: 200,
+ body: discussion,
+ },
+ { overwriteRoutes: false },
+ )
+ .get(
+ /.*\/discussion\/p\/abc123\/topcomments.*/,
+ {
+ status: 200,
+ body: noTopPicks,
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Get more replies
+ .get(
+ /.*discussion.theguardian.com\/discussion-api\/comment\/.*/,
+ {
+ status: 200,
+ body: {
+ status: 'ok',
+ comment,
+ },
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Recommend
+ .post(
+ /.*discussion.theguardian.com\/discussion-api\/comment\/.*\/recommend/,
+ {
+ status: 200,
+ body: {
+ status: 'ok',
+ },
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Abuse form
+ .post(
+ /.*discussion.theguardian.com\/discussion-api\/comment\/.*\/reportAbuse/,
+ {
+ status: 200,
+ body: {
+ status: 'ok',
+ },
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Login redirect
+ .get(
+ /.*profile\.theguardian\.com\/signin\?INTCMP=DOTCOM_NEWHEADER_SIGNIN/,
+ {
+ status: 200,
+ },
+ { overwriteRoutes: false },
+ )
+ .post(
+ /.*profile\.theguardian\.com\/actions\/signInSecondStepCurrent/,
+ {
+ status: 200,
+ },
+ )
+
+ //https://discussion.theguardian.com/discussion-api/discussion/p/g8g7v/comment?api-key=dotcom-rendering
+ // This returns a mocked error for a story 97d6eab4a98917f63bc96a7ac64f7ca7
+ .post(
+ /.*discussion.theguardian.com\/discussion-api\/discussion\/p\/g8g7v\/.*/,
+ {
+ status: 400,
+ body: {
+ status: 'error',
+ message: 'API: Username Missing',
+ errorCode: 'USERNAME_MISSING',
+ },
+ },
+ { overwriteRoutes: false },
+ )
+
+ // Post comment
+ .post(
+ /.*discussion.theguardian.com\/discussion-api\/discussion\/.*/,
+ {
+ status: 200,
+ body: {
+ status: 'ok',
+ message: mockedMessageID,
+ },
+ },
+ { overwriteRoutes: false },
+ )
+ // Get discussion
+ .get(
+ /.*discussion.theguardian.com\/discussion-api\/discussion\/.*/,
+ {
+ status: 200,
+ body: discussion,
+ },
+ { overwriteRoutes: false },
+ )
+ );
};
diff --git a/dotcom-rendering/src/lib/renderElement.tsx b/dotcom-rendering/src/lib/renderElement.tsx
index 7ed8bab5fed..a30c350c12d 100644
--- a/dotcom-rendering/src/lib/renderElement.tsx
+++ b/dotcom-rendering/src/lib/renderElement.tsx
@@ -71,7 +71,6 @@ import { decidePalette } from './decidePalette';
type Props = {
format: ArticleFormat;
element: FEElement;
- adTargeting?: AdTargeting;
host?: string;
index: number;
isMainMedia: boolean;
@@ -126,7 +125,6 @@ const updateRole = (el: FEElement, format: ArticleFormat): FEElement => {
export const renderElement = ({
format,
element,
- adTargeting,
host,
index,
hideCaption,
@@ -738,7 +736,6 @@ export const renderElement = ({
key={index}
hideCaption={hideCaption}
role="inline"
- adTargeting={adTargeting}
isMainMedia={isMainMedia}
id={element.id}
elementId={element.elementId}
@@ -786,7 +783,6 @@ const bareElements = new Set([
export const RenderArticleElement = ({
format,
element,
- adTargeting,
ajaxUrl,
host,
index,
@@ -806,7 +802,6 @@ export const RenderArticleElement = ({
const el = renderElement({
format,
element: withUpdatedRole,
- adTargeting,
ajaxUrl,
host,
index,
diff --git a/dotcom-rendering/src/lib/tuple.test.ts b/dotcom-rendering/src/lib/tuple.test.ts
new file mode 100644
index 00000000000..8751a04161c
--- /dev/null
+++ b/dotcom-rendering/src/lib/tuple.test.ts
@@ -0,0 +1,83 @@
+import { takeFirst } from './tuple';
+
+describe('takeFirst', () => {
+ it('Always returns the correct array length when the array is one less, the same as, or one more than n', () => {
+ const results = [
+ // Format, from 1 to 12, cover length n - 1, n & n+1
+ takeFirst([0, 1], 1),
+ takeFirst([0], 1),
+ takeFirst([], 1),
+ takeFirst([0, 1, 2], 2),
+ takeFirst([0, 1], 2),
+ takeFirst([0], 2),
+ takeFirst([0, 1, 2, 3], 3),
+ takeFirst([0, 1, 2], 3),
+ takeFirst([0, 1], 3),
+ takeFirst([0, 1, 2, 3, 4], 4),
+ takeFirst([0, 1, 2, 3], 4),
+ takeFirst([0, 1, 2], 4),
+ takeFirst([0, 1, 2, 3, 4, 5], 5),
+ takeFirst([0, 1, 2, 3, 4], 5),
+ takeFirst([0, 1, 2, 3], 5),
+ takeFirst([0, 1, 2, 3, 4, 5, 6], 6),
+ takeFirst([0, 1, 2, 3, 4, 5], 6),
+ takeFirst([0, 1, 2, 3, 4], 6),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7], 7),
+ takeFirst([0, 1, 2, 3, 4, 5, 6], 7),
+ takeFirst([0, 1, 2, 3, 4, 5], 7),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8], 8),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7], 8),
+ takeFirst([0, 1, 2, 3, 4, 5, 6], 8),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 9),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8], 9),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7], 9),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 10),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8], 10),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], 11),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 11),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 11),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 12),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], 12),
+ takeFirst([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 12),
+ ] as const;
+
+ // Expected results from n are n, n & n-1
+ expect(results[0].length).toEqual(1);
+ expect(results[1].length).toEqual(1);
+ expect(results[2].length).toEqual(0);
+ expect(results[3].length).toEqual(2);
+ expect(results[4].length).toEqual(2);
+ expect(results[5].length).toEqual(1);
+ expect(results[6].length).toEqual(3);
+ expect(results[7].length).toEqual(3);
+ expect(results[8].length).toEqual(2);
+ expect(results[9].length).toEqual(4);
+ expect(results[10].length).toEqual(4);
+ expect(results[11].length).toEqual(3);
+ expect(results[12].length).toEqual(5);
+ expect(results[13].length).toEqual(5);
+ expect(results[14].length).toEqual(4);
+ expect(results[15].length).toEqual(6);
+ expect(results[16].length).toEqual(6);
+ expect(results[17].length).toEqual(5);
+ expect(results[18].length).toEqual(7);
+ expect(results[19].length).toEqual(7);
+ expect(results[20].length).toEqual(6);
+ expect(results[21].length).toEqual(8);
+ expect(results[22].length).toEqual(8);
+ expect(results[23].length).toEqual(7);
+ expect(results[24].length).toEqual(9);
+ expect(results[25].length).toEqual(9);
+ expect(results[26].length).toEqual(8);
+ expect(results[27].length).toEqual(10);
+ expect(results[28].length).toEqual(10);
+ expect(results[29].length).toEqual(9);
+ expect(results[30].length).toEqual(11);
+ expect(results[31].length).toEqual(11);
+ expect(results[32].length).toEqual(10);
+ expect(results[33].length).toEqual(12);
+ expect(results[34].length).toEqual(12);
+ expect(results[35].length).toEqual(11);
+ });
+});
diff --git a/dotcom-rendering/src/lib/tuple.ts b/dotcom-rendering/src/lib/tuple.ts
new file mode 100644
index 00000000000..a93956eab63
--- /dev/null
+++ b/dotcom-rendering/src/lib/tuple.ts
@@ -0,0 +1,84 @@
+/** A tuple of up to 12 items. Larger tuples will not be narrowed */
+export type Tuple = N extends 12
+ ? [T, T, T, T, T, T, T, T, T, T, T, T]
+ : N extends 11
+ ? [T, T, T, T, T, T, T, T, T, T, T]
+ : N extends 10
+ ? [T, T, T, T, T, T, T, T, T, T]
+ : N extends 9
+ ? [T, T, T, T, T, T, T, T, T]
+ : N extends 8
+ ? [T, T, T, T, T, T, T, T]
+ : N extends 7
+ ? [T, T, T, T, T, T, T]
+ : N extends 6
+ ? [T, T, T, T, T, T]
+ : N extends 5
+ ? [T, T, T, T, T]
+ : N extends 4
+ ? [T, T, T, T]
+ : N extends 3
+ ? [T, T, T]
+ : N extends 2
+ ? [T, T]
+ : N extends 1
+ ? [T]
+ : N extends 0
+ ? []
+ : T[];
+
+/**
+ * Type-guard for whether an array is a tuple of exact length.
+ *
+ * Only tuples of 12 elements or less will be narrowed.
+ */
+export const isTuple = (
+ arr: Array | ReadonlyArray,
+ count: N,
+): arr is Tuple => arr.length === count;
+
+/** Type where a tuple can have any 'n' number of items or less */
+type SlicedTuple<
+ T,
+ N extends 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12,
+> = N extends 12
+ ? Tuple
+ : N extends 11
+ ? Tuple
+ : N extends 10
+ ? Tuple
+ : N extends 9
+ ? Tuple
+ : N extends 8
+ ? Tuple
+ : N extends 7
+ ? Tuple
+ : N extends 6
+ ? Tuple
+ : N extends 5
+ ? Tuple
+ : N extends 4
+ ? Tuple
+ : N extends 3
+ ? Tuple
+ : N extends 2
+ ? Tuple
+ : N extends 1
+ ? Tuple
+ : undefined;
+
+/**
+ * Takes the first 'n' number of items in an array
+ *
+ * By returning `SlicedTuple` you receive a type-safe response
+ * that can be checked exhaustively.
+ */
+export const takeFirst = <
+ T,
+ N extends 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12,
+>(
+ array: Array | ReadonlyArray,
+ count: N,
+): SlicedTuple =>
+ //@ts-expect-error – this output is tested by jest and it’s a very helpful method
+ array.slice(0, count);
diff --git a/dotcom-rendering/src/lib/useAdTargeting.ts b/dotcom-rendering/src/lib/useAdTargeting.ts
new file mode 100644
index 00000000000..1c5c319eeec
--- /dev/null
+++ b/dotcom-rendering/src/lib/useAdTargeting.ts
@@ -0,0 +1,33 @@
+import { log } from '@guardian/libs';
+import { mutate } from 'swr';
+import useSWRImmutable from 'swr/immutable';
+
+const key = 'ad-targeting';
+const apiPromise = new Promise(() => {
+ /* this never resolves */
+});
+
+/**
+ * A hook which returns the Ad Targeting for a given page.
+ *
+ * @param videoLength allows overriding video length, when there are multiple videos on a page
+ */
+export const useAdTargeting = (
+ videoLength?: number,
+): AdTargeting | undefined => {
+ const { data } = useSWRImmutable(key, () => apiPromise);
+
+ if (data && !data.disableAds && typeof videoLength === 'number') {
+ data.customParams['vl'] = videoLength;
+ log(
+ 'commercial',
+ `🎯 Ad Targeting – video length (vl) overriden to ${videoLength}`,
+ );
+ }
+
+ return data;
+};
+
+export const setAdTargeting = (adTargeting: AdTargeting): void => {
+ void mutate(key, adTargeting, false);
+};
diff --git a/dotcom-rendering/src/model/article-schema.json b/dotcom-rendering/src/model/article-schema.json
index 4f7e0ff14b7..873ee15b639 100644
--- a/dotcom-rendering/src/model/article-schema.json
+++ b/dotcom-rendering/src/model/article-schema.json
@@ -14,158 +14,7 @@
"mainMediaElements": {
"type": "array",
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/AudioAtomBlockElement"
- },
- {
- "$ref": "#/definitions/AudioBlockElement"
- },
- {
- "$ref": "#/definitions/BlockquoteBlockElement"
- },
- {
- "$ref": "#/definitions/CaptionBlockElement"
- },
- {
- "$ref": "#/definitions/CalloutBlockElement"
- },
- {
- "$ref": "#/definitions/CalloutBlockElementV2"
- },
- {
- "$ref": "#/definitions/ChartAtomBlockElement"
- },
- {
- "$ref": "#/definitions/QuizAtomBlockElement"
- },
- {
- "$ref": "#/definitions/CodeBlockElement"
- },
- {
- "$ref": "#/definitions/CommentBlockElement"
- },
- {
- "$ref": "#/definitions/ContentAtomBlockElement"
- },
- {
- "$ref": "#/definitions/DisclaimerBlockElement"
- },
- {
- "$ref": "#/definitions/DividerBlockElement"
- },
- {
- "$ref": "#/definitions/DocumentBlockElement"
- },
- {
- "$ref": "#/definitions/EmbedBlockElement"
- },
- {
- "$ref": "#/definitions/ExplainerAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GenericAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GuideAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GuVideoBlockElement"
- },
- {
- "$ref": "#/definitions/HighlightBlockElement"
- },
- {
- "$ref": "#/definitions/ImageBlockElement"
- },
- {
- "$ref": "#/definitions/InstagramBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveAtomBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveBlockElement"
- },
- {
- "$ref": "#/definitions/ItemLinkBlockElement"
- },
- {
- "$ref": "#/definitions/MapBlockElement"
- },
- {
- "$ref": "#/definitions/MediaAtomBlockElement"
- },
- {
- "$ref": "#/definitions/MultiImageBlockElement"
- },
- {
- "$ref": "#/definitions/NewsletterSignupBlockElement"
- },
- {
- "$ref": "#/definitions/NumberedTitleBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveContentsBlockElement"
- },
- {
- "$ref": "#/definitions/ProfileAtomBlockElement"
- },
- {
- "$ref": "#/definitions/PullquoteBlockElement"
- },
- {
- "$ref": "#/definitions/QABlockElement"
- },
- {
- "$ref": "#/definitions/RichLinkBlockElement"
- },
- {
- "$ref": "#/definitions/SoundcloudBlockElement"
- },
- {
- "$ref": "#/definitions/SpotifyBlockElement"
- },
- {
- "$ref": "#/definitions/StarRatingBlockElement"
- },
- {
- "$ref": "#/definitions/SubheadingBlockElement"
- },
- {
- "$ref": "#/definitions/TableBlockElement"
- },
- {
- "$ref": "#/definitions/TextBlockElement"
- },
- {
- "$ref": "#/definitions/TimelineBlockElement"
- },
- {
- "$ref": "#/definitions/TweetBlockElement"
- },
- {
- "$ref": "#/definitions/VineBlockElement"
- },
- {
- "$ref": "#/definitions/VideoBlockElement"
- },
- {
- "$ref": "#/definitions/VideoFacebookBlockElement"
- },
- {
- "$ref": "#/definitions/VideoVimeoBlockElement"
- },
- {
- "$ref": "#/definitions/VideoYoutubeBlockElement"
- },
- {
- "$ref": "#/definitions/YoutubeBlockElement"
- },
- {
- "$ref": "#/definitions/WitnessTypeBlockElement"
- }
- ]
+ "$ref": "#/definitions/FEElement"
}
},
"main": {
@@ -693,14 +542,166 @@
"webURL"
],
"definitions": {
+ "FEElement": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/AudioAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/AudioBlockElement"
+ },
+ {
+ "$ref": "#/definitions/BlockquoteBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CaptionBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CalloutBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CalloutBlockElementV2"
+ },
+ {
+ "$ref": "#/definitions/ChartAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/QuizAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CodeBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CommentBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ContentAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/DisclaimerBlockElement"
+ },
+ {
+ "$ref": "#/definitions/DividerBlockElement"
+ },
+ {
+ "$ref": "#/definitions/DocumentBlockElement"
+ },
+ {
+ "$ref": "#/definitions/EmbedBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ExplainerAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/GenericAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/GuideAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/GuVideoBlockElement"
+ },
+ {
+ "$ref": "#/definitions/HighlightBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ImageBlockElement"
+ },
+ {
+ "$ref": "#/definitions/InstagramBlockElement"
+ },
+ {
+ "$ref": "#/definitions/InteractiveAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/InteractiveBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ItemLinkBlockElement"
+ },
+ {
+ "$ref": "#/definitions/MapBlockElement"
+ },
+ {
+ "$ref": "#/definitions/MediaAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/MultiImageBlockElement"
+ },
+ {
+ "$ref": "#/definitions/NewsletterSignupBlockElement"
+ },
+ {
+ "$ref": "#/definitions/NumberedTitleBlockElement"
+ },
+ {
+ "$ref": "#/definitions/InteractiveContentsBlockElement"
+ },
+ {
+ "$ref": "#/definitions/SubheadingBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ProfileAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/PullquoteBlockElement"
+ },
+ {
+ "$ref": "#/definitions/QABlockElement"
+ },
+ {
+ "$ref": "#/definitions/RichLinkBlockElement"
+ },
+ {
+ "$ref": "#/definitions/SoundcloudBlockElement"
+ },
+ {
+ "$ref": "#/definitions/SpotifyBlockElement"
+ },
+ {
+ "$ref": "#/definitions/StarRatingBlockElement"
+ },
+ {
+ "$ref": "#/definitions/TableBlockElement"
+ },
+ {
+ "$ref": "#/definitions/TextBlockElement"
+ },
+ {
+ "$ref": "#/definitions/TimelineBlockElement"
+ },
+ {
+ "$ref": "#/definitions/TweetBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VineBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VideoBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VideoFacebookBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VideoVimeoBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VideoYoutubeBlockElement"
+ },
+ {
+ "$ref": "#/definitions/YoutubeBlockElement"
+ },
+ {
+ "$ref": "#/definitions/WitnessTypeBlockElement"
+ }
+ ]
+ },
"AudioAtomBlockElement": {
"type": "object",
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.AudioAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.AudioAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -754,9 +755,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.AudioBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.AudioBlockElement"
},
"elementId": {
"type": "string"
@@ -772,9 +771,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.BlockquoteBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.BlockquoteBlockElement"
},
"elementId": {
"type": "string"
@@ -797,9 +794,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CaptionBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.CaptionBlockElement"
},
"elementId": {
"type": "string"
@@ -833,9 +828,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CalloutBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.CalloutBlockElement"
},
"elementId": {
"type": "string"
@@ -870,26 +863,7 @@
"formFields": {
"type": "array",
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/CampaignFieldText"
- },
- {
- "$ref": "#/definitions/CampaignFieldTextArea"
- },
- {
- "$ref": "#/definitions/CampaignFieldFile"
- },
- {
- "$ref": "#/definitions/CampaignFieldRadio"
- },
- {
- "$ref": "#/definitions/CampaignFieldCheckbox"
- },
- {
- "$ref": "#/definitions/CampaignFieldSelect"
- }
- ]
+ "$ref": "#/definitions/CampaignFieldType"
}
},
"role": {
@@ -910,6 +884,28 @@
"title"
]
},
+ "CampaignFieldType": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/CampaignFieldText"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldTextArea"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldFile"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldRadio"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldCheckbox"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldSelect"
+ }
+ ]
+ },
"CampaignFieldText": {
"type": "object",
"properties": {
@@ -959,9 +955,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "textarea"
- ]
+ "const": "textarea"
},
"minlength": {
"type": "number"
@@ -1007,9 +1001,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "file"
- ]
+ "const": "file"
},
"id": {
"type": "string"
@@ -1049,9 +1041,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "radio"
- ]
+ "const": "radio"
},
"options": {
"type": "array",
@@ -1110,9 +1100,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "checkbox"
- ]
+ "const": "checkbox"
},
"options": {
"type": "array",
@@ -1171,9 +1159,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "select"
- ]
+ "const": "select"
},
"options": {
"type": "array",
@@ -1232,9 +1218,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CalloutBlockElementV2"
- ]
+ "const": "model.dotcomrendering.pageElements.CalloutBlockElementV2"
},
"elementId": {
"type": "string"
@@ -1272,26 +1256,7 @@
"formFields": {
"type": "array",
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/CampaignFieldText"
- },
- {
- "$ref": "#/definitions/CampaignFieldTextArea"
- },
- {
- "$ref": "#/definitions/CampaignFieldFile"
- },
- {
- "$ref": "#/definitions/CampaignFieldRadio"
- },
- {
- "$ref": "#/definitions/CampaignFieldCheckbox"
- },
- {
- "$ref": "#/definitions/CampaignFieldSelect"
- }
- ]
+ "$ref": "#/definitions/CampaignFieldType"
}
},
"role": {
@@ -1350,9 +1315,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ChartAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ChartAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1392,9 +1355,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.QuizAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.QuizAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1530,9 +1491,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CodeBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.CodeBlockElement"
},
"elementId": {
"type": "string"
@@ -1559,9 +1518,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CommentBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.CommentBlockElement"
},
"elementId": {
"type": "string"
@@ -1604,9 +1561,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ContentAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ContentAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1626,9 +1581,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.DisclaimerBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.DisclaimerBlockElement"
},
"elementId": {
"type": "string"
@@ -1651,9 +1604,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.DividerBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.DividerBlockElement"
},
"size": {
"enum": [
@@ -1679,9 +1630,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.DocumentBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.DocumentBlockElement"
},
"elementId": {
"type": "string"
@@ -1725,9 +1674,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.EmbedBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.EmbedBlockElement"
},
"elementId": {
"type": "string"
@@ -1779,9 +1726,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ExplainerAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ExplainerAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1812,9 +1757,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.GenericAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.GenericAtomBlockElement"
},
"url": {
"type": "string"
@@ -1849,9 +1792,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.GuideAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.GuideAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1893,9 +1834,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.GuVideoBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.GuVideoBlockElement"
},
"elementId": {
"type": "string"
@@ -2036,9 +1975,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.HighlightBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.HighlightBlockElement"
},
"elementId": {
"type": "string"
@@ -2058,9 +1995,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ImageBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ImageBlockElement"
},
"elementId": {
"type": "string"
@@ -2193,9 +2128,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.InstagramBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.InstagramBlockElement"
},
"elementId": {
"type": "string"
@@ -2236,9 +2169,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.InteractiveAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.InteractiveAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -2277,9 +2208,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.InteractiveBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.InteractiveBlockElement"
},
"elementId": {
"type": "string"
@@ -2313,9 +2242,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ItemLinkBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ItemLinkBlockElement"
},
"elementId": {
"type": "string"
@@ -2335,9 +2262,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.MapBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.MapBlockElement"
},
"elementId": {
"type": "string"
@@ -2389,9 +2314,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.MediaAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.MediaAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -2442,9 +2365,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.MultiImageBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.MultiImageBlockElement"
},
"elementId": {
"type": "string"
@@ -2473,9 +2394,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.NewsletterSignupBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.NewsletterSignupBlockElement"
},
"newsletter": {
"type": "object",
@@ -2533,9 +2452,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.NumberedTitleBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.NumberedTitleBlockElement"
},
"elementId": {
"type": "string"
@@ -2631,9 +2548,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.InteractiveContentsBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.InteractiveContentsBlockElement"
},
"elementId": {
"type": "string"
@@ -2659,9 +2574,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.SubheadingBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.SubheadingBlockElement"
},
"elementId": {
"type": "string"
@@ -2681,9 +2594,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ProfileAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ProfileAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -2725,9 +2636,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.PullquoteBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.PullquoteBlockElement"
},
"elementId": {
"type": "string"
@@ -2756,9 +2665,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.QABlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.QABlockElement"
},
"elementId": {
"type": "string"
@@ -2796,9 +2703,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.RichLinkBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.RichLinkBlockElement"
},
"elementId": {
"type": "string"
@@ -2838,9 +2743,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.SoundcloudBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.SoundcloudBlockElement"
},
"elementId": {
"type": "string"
@@ -2885,9 +2788,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.SpotifyBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.SpotifyBlockElement"
},
"elementId": {
"type": "string"
@@ -2931,9 +2832,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.StarRatingBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.StarRatingBlockElement"
},
"elementId": {
"type": "string"
@@ -2965,9 +2864,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.TableBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.TableBlockElement"
},
"elementId": {
"type": "string"
@@ -2994,9 +2891,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.TextBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.TextBlockElement"
},
"elementId": {
"type": "string"
@@ -3019,9 +2914,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.TimelineBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.TimelineBlockElement"
},
"elementId": {
"type": "string"
@@ -3086,9 +2979,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.TweetBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.TweetBlockElement"
},
"elementId": {
"type": "string"
@@ -3133,9 +3024,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VineBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VineBlockElement"
},
"elementId": {
"type": "string"
@@ -3181,9 +3070,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VideoBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VideoBlockElement"
},
"elementId": {
"type": "string"
@@ -3212,9 +3099,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VideoFacebookBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VideoFacebookBlockElement"
},
"elementId": {
"type": "string"
@@ -3261,9 +3146,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VideoVimeoBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VideoVimeoBlockElement"
},
"elementId": {
"type": "string"
@@ -3319,9 +3202,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VideoYoutubeBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VideoYoutubeBlockElement"
},
"elementId": {
"type": "string"
@@ -3378,9 +3259,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.YoutubeBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.YoutubeBlockElement"
},
"elementId": {
"type": "string"
@@ -3445,9 +3324,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.WitnessBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.WitnessBlockElement"
},
"elementId": {
"type": "string"
@@ -3494,9 +3371,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "Image"
- ]
+ "const": "Image"
},
"mimeType": {
"type": "string"
@@ -3522,15 +3397,11 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.WitnessTypeDataImage"
- ]
+ "const": "model.dotcomrendering.pageElements.WitnessTypeDataImage"
},
"type": {
"type": "string",
- "enum": [
- "image"
- ]
+ "const": "image"
},
"alt": {
"type": "string"
@@ -3601,15 +3472,11 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.WitnessTypeDataVideo"
- ]
+ "const": "model.dotcomrendering.pageElements.WitnessTypeDataVideo"
},
"type": {
"type": "string",
- "enum": [
- "video"
- ]
+ "const": "video"
},
"description": {
"type": "string"
@@ -3701,15 +3568,11 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.WitnessTypeDataText"
- ]
+ "const": "model.dotcomrendering.pageElements.WitnessTypeDataText"
},
"type": {
"type": "string",
- "enum": [
- "text"
- ]
+ "const": "text"
},
"description": {
"type": "string"
@@ -3773,158 +3636,7 @@
"elements": {
"type": "array",
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/AudioAtomBlockElement"
- },
- {
- "$ref": "#/definitions/AudioBlockElement"
- },
- {
- "$ref": "#/definitions/BlockquoteBlockElement"
- },
- {
- "$ref": "#/definitions/CaptionBlockElement"
- },
- {
- "$ref": "#/definitions/CalloutBlockElement"
- },
- {
- "$ref": "#/definitions/CalloutBlockElementV2"
- },
- {
- "$ref": "#/definitions/ChartAtomBlockElement"
- },
- {
- "$ref": "#/definitions/QuizAtomBlockElement"
- },
- {
- "$ref": "#/definitions/CodeBlockElement"
- },
- {
- "$ref": "#/definitions/CommentBlockElement"
- },
- {
- "$ref": "#/definitions/ContentAtomBlockElement"
- },
- {
- "$ref": "#/definitions/DisclaimerBlockElement"
- },
- {
- "$ref": "#/definitions/DividerBlockElement"
- },
- {
- "$ref": "#/definitions/DocumentBlockElement"
- },
- {
- "$ref": "#/definitions/EmbedBlockElement"
- },
- {
- "$ref": "#/definitions/ExplainerAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GenericAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GuideAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GuVideoBlockElement"
- },
- {
- "$ref": "#/definitions/HighlightBlockElement"
- },
- {
- "$ref": "#/definitions/ImageBlockElement"
- },
- {
- "$ref": "#/definitions/InstagramBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveAtomBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveBlockElement"
- },
- {
- "$ref": "#/definitions/ItemLinkBlockElement"
- },
- {
- "$ref": "#/definitions/MapBlockElement"
- },
- {
- "$ref": "#/definitions/MediaAtomBlockElement"
- },
- {
- "$ref": "#/definitions/MultiImageBlockElement"
- },
- {
- "$ref": "#/definitions/NewsletterSignupBlockElement"
- },
- {
- "$ref": "#/definitions/NumberedTitleBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveContentsBlockElement"
- },
- {
- "$ref": "#/definitions/ProfileAtomBlockElement"
- },
- {
- "$ref": "#/definitions/PullquoteBlockElement"
- },
- {
- "$ref": "#/definitions/QABlockElement"
- },
- {
- "$ref": "#/definitions/RichLinkBlockElement"
- },
- {
- "$ref": "#/definitions/SoundcloudBlockElement"
- },
- {
- "$ref": "#/definitions/SpotifyBlockElement"
- },
- {
- "$ref": "#/definitions/StarRatingBlockElement"
- },
- {
- "$ref": "#/definitions/SubheadingBlockElement"
- },
- {
- "$ref": "#/definitions/TableBlockElement"
- },
- {
- "$ref": "#/definitions/TextBlockElement"
- },
- {
- "$ref": "#/definitions/TimelineBlockElement"
- },
- {
- "$ref": "#/definitions/TweetBlockElement"
- },
- {
- "$ref": "#/definitions/VineBlockElement"
- },
- {
- "$ref": "#/definitions/VideoBlockElement"
- },
- {
- "$ref": "#/definitions/VideoFacebookBlockElement"
- },
- {
- "$ref": "#/definitions/VideoVimeoBlockElement"
- },
- {
- "$ref": "#/definitions/VideoYoutubeBlockElement"
- },
- {
- "$ref": "#/definitions/YoutubeBlockElement"
- },
- {
- "$ref": "#/definitions/WitnessTypeBlockElement"
- }
- ]
+ "$ref": "#/definitions/FEElement"
}
},
"attributes": {
@@ -4193,8 +3905,7 @@
"type": "string"
},
"sharedAdTargeting": {
- "type": "object",
- "additionalProperties": {}
+ "$ref": "#/definitions/SharedAdTargeting"
},
"isPaidContent": {
"type": "boolean"
@@ -4331,6 +4042,9 @@
],
"type": "string"
},
+ "SharedAdTargeting": {
+ "type": "object"
+ },
"FETrailType": {
"type": "object",
"properties": {
@@ -4386,9 +4100,6 @@
"avatarUrl": {
"type": "string"
},
- "mediaType": {
- "$ref": "#/definitions/MediaType"
- },
"mediaDuration": {
"type": "number"
},
@@ -4460,8 +4171,8 @@
"isCommentable"
]
},
- "showMainVideo": {
- "type": "boolean"
+ "mainMedia": {
+ "$ref": "#/definitions/MainMedia"
}
},
"required": [
@@ -4470,14 +4181,6 @@
"url"
]
},
- "MediaType": {
- "enum": [
- "Audio",
- "Gallery",
- "Video"
- ],
- "type": "string"
- },
"Branding": {
"type": "object",
"properties": {
@@ -4575,6 +4278,172 @@
"sponsorName"
]
},
+ "MainMedia": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/Video",
+ "description": "For displaying embedded, playable videos directly in cards"
+ },
+ {
+ "$ref": "#/definitions/Audio"
+ },
+ {
+ "$ref": "#/definitions/Gallery"
+ }
+ ]
+ },
+ "Video": {
+ "description": "For displaying embedded, playable videos directly in cards",
+ "allOf": [
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "enum": [
+ "Audio",
+ "Gallery",
+ "Video"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "Video"
+ },
+ "elementId": {
+ "type": "string"
+ },
+ "videoId": {
+ "type": "string"
+ },
+ "height": {
+ "type": "number"
+ },
+ "width": {
+ "type": "number"
+ },
+ "origin": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "duration": {
+ "type": "number"
+ },
+ "expired": {
+ "type": "boolean"
+ },
+ "images": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "width": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "url",
+ "width"
+ ]
+ }
+ }
+ },
+ "required": [
+ "duration",
+ "elementId",
+ "expired",
+ "height",
+ "images",
+ "origin",
+ "title",
+ "type",
+ "videoId",
+ "width"
+ ]
+ }
+ ]
+ },
+ "Audio": {
+ "allOf": [
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "enum": [
+ "Audio",
+ "Gallery",
+ "Video"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "Audio"
+ },
+ "duration": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "duration",
+ "type"
+ ]
+ }
+ ]
+ },
+ "Gallery": {
+ "allOf": [
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "enum": [
+ "Audio",
+ "Gallery",
+ "Video"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "Gallery"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ }
+ ]
+ },
"OnwardsSource": {
"enum": [
"curated-content",
@@ -4592,13 +4461,13 @@
"CommercialProperties": {
"type": "object",
"properties": {
- "AU": {
+ "UK": {
"$ref": "#/definitions/EditionCommercialProperties"
},
"US": {
"$ref": "#/definitions/EditionCommercialProperties"
},
- "UK": {
+ "AU": {
"$ref": "#/definitions/EditionCommercialProperties"
},
"INT": {
@@ -4891,14 +4760,7 @@
"formFields": {
"type": "array",
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/CampaignFieldText"
- },
- {
- "$ref": "#/definitions/CampaignFieldTextArea"
- }
- ]
+ "$ref": "#/definitions/MessageUsFieldType"
}
}
},
@@ -4907,6 +4769,16 @@
"formId"
]
},
+ "MessageUsFieldType": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/CampaignFieldText"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldTextArea"
+ }
+ ]
+ },
"TableOfContentsItem": {
"type": "object",
"properties": {
diff --git a/dotcom-rendering/src/model/block-schema.json b/dotcom-rendering/src/model/block-schema.json
index ae3ed4ac8f2..3bf539f90eb 100644
--- a/dotcom-rendering/src/model/block-schema.json
+++ b/dotcom-rendering/src/model/block-schema.json
@@ -7,158 +7,7 @@
"elements": {
"type": "array",
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/AudioAtomBlockElement"
- },
- {
- "$ref": "#/definitions/AudioBlockElement"
- },
- {
- "$ref": "#/definitions/BlockquoteBlockElement"
- },
- {
- "$ref": "#/definitions/CaptionBlockElement"
- },
- {
- "$ref": "#/definitions/CalloutBlockElement"
- },
- {
- "$ref": "#/definitions/CalloutBlockElementV2"
- },
- {
- "$ref": "#/definitions/ChartAtomBlockElement"
- },
- {
- "$ref": "#/definitions/QuizAtomBlockElement"
- },
- {
- "$ref": "#/definitions/CodeBlockElement"
- },
- {
- "$ref": "#/definitions/CommentBlockElement"
- },
- {
- "$ref": "#/definitions/ContentAtomBlockElement"
- },
- {
- "$ref": "#/definitions/DisclaimerBlockElement"
- },
- {
- "$ref": "#/definitions/DividerBlockElement"
- },
- {
- "$ref": "#/definitions/DocumentBlockElement"
- },
- {
- "$ref": "#/definitions/EmbedBlockElement"
- },
- {
- "$ref": "#/definitions/ExplainerAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GenericAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GuideAtomBlockElement"
- },
- {
- "$ref": "#/definitions/GuVideoBlockElement"
- },
- {
- "$ref": "#/definitions/HighlightBlockElement"
- },
- {
- "$ref": "#/definitions/ImageBlockElement"
- },
- {
- "$ref": "#/definitions/InstagramBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveAtomBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveBlockElement"
- },
- {
- "$ref": "#/definitions/ItemLinkBlockElement"
- },
- {
- "$ref": "#/definitions/MapBlockElement"
- },
- {
- "$ref": "#/definitions/MediaAtomBlockElement"
- },
- {
- "$ref": "#/definitions/MultiImageBlockElement"
- },
- {
- "$ref": "#/definitions/NewsletterSignupBlockElement"
- },
- {
- "$ref": "#/definitions/NumberedTitleBlockElement"
- },
- {
- "$ref": "#/definitions/InteractiveContentsBlockElement"
- },
- {
- "$ref": "#/definitions/ProfileAtomBlockElement"
- },
- {
- "$ref": "#/definitions/PullquoteBlockElement"
- },
- {
- "$ref": "#/definitions/QABlockElement"
- },
- {
- "$ref": "#/definitions/RichLinkBlockElement"
- },
- {
- "$ref": "#/definitions/SoundcloudBlockElement"
- },
- {
- "$ref": "#/definitions/SpotifyBlockElement"
- },
- {
- "$ref": "#/definitions/StarRatingBlockElement"
- },
- {
- "$ref": "#/definitions/SubheadingBlockElement"
- },
- {
- "$ref": "#/definitions/TableBlockElement"
- },
- {
- "$ref": "#/definitions/TextBlockElement"
- },
- {
- "$ref": "#/definitions/TimelineBlockElement"
- },
- {
- "$ref": "#/definitions/TweetBlockElement"
- },
- {
- "$ref": "#/definitions/VineBlockElement"
- },
- {
- "$ref": "#/definitions/VideoBlockElement"
- },
- {
- "$ref": "#/definitions/VideoFacebookBlockElement"
- },
- {
- "$ref": "#/definitions/VideoVimeoBlockElement"
- },
- {
- "$ref": "#/definitions/VideoYoutubeBlockElement"
- },
- {
- "$ref": "#/definitions/YoutubeBlockElement"
- },
- {
- "$ref": "#/definitions/WitnessTypeBlockElement"
- }
- ]
+ "$ref": "#/definitions/FEElement"
}
},
"attributes": {
@@ -227,14 +76,166 @@
"secondaryDateLine"
],
"definitions": {
+ "FEElement": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/AudioAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/AudioBlockElement"
+ },
+ {
+ "$ref": "#/definitions/BlockquoteBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CaptionBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CalloutBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CalloutBlockElementV2"
+ },
+ {
+ "$ref": "#/definitions/ChartAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/QuizAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CodeBlockElement"
+ },
+ {
+ "$ref": "#/definitions/CommentBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ContentAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/DisclaimerBlockElement"
+ },
+ {
+ "$ref": "#/definitions/DividerBlockElement"
+ },
+ {
+ "$ref": "#/definitions/DocumentBlockElement"
+ },
+ {
+ "$ref": "#/definitions/EmbedBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ExplainerAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/GenericAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/GuideAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/GuVideoBlockElement"
+ },
+ {
+ "$ref": "#/definitions/HighlightBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ImageBlockElement"
+ },
+ {
+ "$ref": "#/definitions/InstagramBlockElement"
+ },
+ {
+ "$ref": "#/definitions/InteractiveAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/InteractiveBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ItemLinkBlockElement"
+ },
+ {
+ "$ref": "#/definitions/MapBlockElement"
+ },
+ {
+ "$ref": "#/definitions/MediaAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/MultiImageBlockElement"
+ },
+ {
+ "$ref": "#/definitions/NewsletterSignupBlockElement"
+ },
+ {
+ "$ref": "#/definitions/NumberedTitleBlockElement"
+ },
+ {
+ "$ref": "#/definitions/InteractiveContentsBlockElement"
+ },
+ {
+ "$ref": "#/definitions/SubheadingBlockElement"
+ },
+ {
+ "$ref": "#/definitions/ProfileAtomBlockElement"
+ },
+ {
+ "$ref": "#/definitions/PullquoteBlockElement"
+ },
+ {
+ "$ref": "#/definitions/QABlockElement"
+ },
+ {
+ "$ref": "#/definitions/RichLinkBlockElement"
+ },
+ {
+ "$ref": "#/definitions/SoundcloudBlockElement"
+ },
+ {
+ "$ref": "#/definitions/SpotifyBlockElement"
+ },
+ {
+ "$ref": "#/definitions/StarRatingBlockElement"
+ },
+ {
+ "$ref": "#/definitions/TableBlockElement"
+ },
+ {
+ "$ref": "#/definitions/TextBlockElement"
+ },
+ {
+ "$ref": "#/definitions/TimelineBlockElement"
+ },
+ {
+ "$ref": "#/definitions/TweetBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VineBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VideoBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VideoFacebookBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VideoVimeoBlockElement"
+ },
+ {
+ "$ref": "#/definitions/VideoYoutubeBlockElement"
+ },
+ {
+ "$ref": "#/definitions/YoutubeBlockElement"
+ },
+ {
+ "$ref": "#/definitions/WitnessTypeBlockElement"
+ }
+ ]
+ },
"AudioAtomBlockElement": {
"type": "object",
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.AudioAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.AudioAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -288,9 +289,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.AudioBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.AudioBlockElement"
},
"elementId": {
"type": "string"
@@ -306,9 +305,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.BlockquoteBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.BlockquoteBlockElement"
},
"elementId": {
"type": "string"
@@ -331,9 +328,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CaptionBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.CaptionBlockElement"
},
"elementId": {
"type": "string"
@@ -367,9 +362,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CalloutBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.CalloutBlockElement"
},
"elementId": {
"type": "string"
@@ -404,26 +397,7 @@
"formFields": {
"type": "array",
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/CampaignFieldText"
- },
- {
- "$ref": "#/definitions/CampaignFieldTextArea"
- },
- {
- "$ref": "#/definitions/CampaignFieldFile"
- },
- {
- "$ref": "#/definitions/CampaignFieldRadio"
- },
- {
- "$ref": "#/definitions/CampaignFieldCheckbox"
- },
- {
- "$ref": "#/definitions/CampaignFieldSelect"
- }
- ]
+ "$ref": "#/definitions/CampaignFieldType"
}
},
"role": {
@@ -444,6 +418,28 @@
"title"
]
},
+ "CampaignFieldType": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/CampaignFieldText"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldTextArea"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldFile"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldRadio"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldCheckbox"
+ },
+ {
+ "$ref": "#/definitions/CampaignFieldSelect"
+ }
+ ]
+ },
"CampaignFieldText": {
"type": "object",
"properties": {
@@ -493,9 +489,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "textarea"
- ]
+ "const": "textarea"
},
"minlength": {
"type": "number"
@@ -541,9 +535,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "file"
- ]
+ "const": "file"
},
"id": {
"type": "string"
@@ -583,9 +575,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "radio"
- ]
+ "const": "radio"
},
"options": {
"type": "array",
@@ -644,9 +634,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "checkbox"
- ]
+ "const": "checkbox"
},
"options": {
"type": "array",
@@ -705,9 +693,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "select"
- ]
+ "const": "select"
},
"options": {
"type": "array",
@@ -766,9 +752,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CalloutBlockElementV2"
- ]
+ "const": "model.dotcomrendering.pageElements.CalloutBlockElementV2"
},
"elementId": {
"type": "string"
@@ -806,26 +790,7 @@
"formFields": {
"type": "array",
"items": {
- "anyOf": [
- {
- "$ref": "#/definitions/CampaignFieldText"
- },
- {
- "$ref": "#/definitions/CampaignFieldTextArea"
- },
- {
- "$ref": "#/definitions/CampaignFieldFile"
- },
- {
- "$ref": "#/definitions/CampaignFieldRadio"
- },
- {
- "$ref": "#/definitions/CampaignFieldCheckbox"
- },
- {
- "$ref": "#/definitions/CampaignFieldSelect"
- }
- ]
+ "$ref": "#/definitions/CampaignFieldType"
}
},
"role": {
@@ -884,9 +849,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ChartAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ChartAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -926,9 +889,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.QuizAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.QuizAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1064,9 +1025,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CodeBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.CodeBlockElement"
},
"elementId": {
"type": "string"
@@ -1093,9 +1052,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.CommentBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.CommentBlockElement"
},
"elementId": {
"type": "string"
@@ -1138,9 +1095,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ContentAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ContentAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1160,9 +1115,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.DisclaimerBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.DisclaimerBlockElement"
},
"elementId": {
"type": "string"
@@ -1185,9 +1138,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.DividerBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.DividerBlockElement"
},
"size": {
"enum": [
@@ -1213,9 +1164,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.DocumentBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.DocumentBlockElement"
},
"elementId": {
"type": "string"
@@ -1259,9 +1208,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.EmbedBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.EmbedBlockElement"
},
"elementId": {
"type": "string"
@@ -1313,9 +1260,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ExplainerAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ExplainerAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1346,9 +1291,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.GenericAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.GenericAtomBlockElement"
},
"url": {
"type": "string"
@@ -1383,9 +1326,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.GuideAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.GuideAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1427,9 +1368,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.GuVideoBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.GuVideoBlockElement"
},
"elementId": {
"type": "string"
@@ -1570,9 +1509,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.HighlightBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.HighlightBlockElement"
},
"elementId": {
"type": "string"
@@ -1592,9 +1529,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ImageBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ImageBlockElement"
},
"elementId": {
"type": "string"
@@ -1727,9 +1662,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.InstagramBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.InstagramBlockElement"
},
"elementId": {
"type": "string"
@@ -1770,9 +1703,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.InteractiveAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.InteractiveAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1811,9 +1742,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.InteractiveBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.InteractiveBlockElement"
},
"elementId": {
"type": "string"
@@ -1847,9 +1776,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ItemLinkBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ItemLinkBlockElement"
},
"elementId": {
"type": "string"
@@ -1869,9 +1796,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.MapBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.MapBlockElement"
},
"elementId": {
"type": "string"
@@ -1923,9 +1848,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.MediaAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.MediaAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -1976,9 +1899,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.MultiImageBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.MultiImageBlockElement"
},
"elementId": {
"type": "string"
@@ -2007,9 +1928,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.NewsletterSignupBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.NewsletterSignupBlockElement"
},
"newsletter": {
"type": "object",
@@ -2067,9 +1986,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.NumberedTitleBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.NumberedTitleBlockElement"
},
"elementId": {
"type": "string"
@@ -2165,9 +2082,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.InteractiveContentsBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.InteractiveContentsBlockElement"
},
"elementId": {
"type": "string"
@@ -2193,9 +2108,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.SubheadingBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.SubheadingBlockElement"
},
"elementId": {
"type": "string"
@@ -2215,9 +2128,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.ProfileAtomBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.ProfileAtomBlockElement"
},
"elementId": {
"type": "string"
@@ -2259,9 +2170,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.PullquoteBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.PullquoteBlockElement"
},
"elementId": {
"type": "string"
@@ -2290,9 +2199,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.QABlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.QABlockElement"
},
"elementId": {
"type": "string"
@@ -2330,9 +2237,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.RichLinkBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.RichLinkBlockElement"
},
"elementId": {
"type": "string"
@@ -2372,9 +2277,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.SoundcloudBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.SoundcloudBlockElement"
},
"elementId": {
"type": "string"
@@ -2419,9 +2322,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.SpotifyBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.SpotifyBlockElement"
},
"elementId": {
"type": "string"
@@ -2465,9 +2366,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.StarRatingBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.StarRatingBlockElement"
},
"elementId": {
"type": "string"
@@ -2499,9 +2398,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.TableBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.TableBlockElement"
},
"elementId": {
"type": "string"
@@ -2528,9 +2425,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.TextBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.TextBlockElement"
},
"elementId": {
"type": "string"
@@ -2553,9 +2448,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.TimelineBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.TimelineBlockElement"
},
"elementId": {
"type": "string"
@@ -2620,9 +2513,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.TweetBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.TweetBlockElement"
},
"elementId": {
"type": "string"
@@ -2667,9 +2558,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VineBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VineBlockElement"
},
"elementId": {
"type": "string"
@@ -2715,9 +2604,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VideoBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VideoBlockElement"
},
"elementId": {
"type": "string"
@@ -2746,9 +2633,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VideoFacebookBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VideoFacebookBlockElement"
},
"elementId": {
"type": "string"
@@ -2795,9 +2680,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VideoVimeoBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VideoVimeoBlockElement"
},
"elementId": {
"type": "string"
@@ -2853,9 +2736,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.VideoYoutubeBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.VideoYoutubeBlockElement"
},
"elementId": {
"type": "string"
@@ -2912,9 +2793,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.YoutubeBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.YoutubeBlockElement"
},
"elementId": {
"type": "string"
@@ -2979,9 +2858,7 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.WitnessBlockElement"
- ]
+ "const": "model.dotcomrendering.pageElements.WitnessBlockElement"
},
"elementId": {
"type": "string"
@@ -3028,9 +2905,7 @@
"properties": {
"type": {
"type": "string",
- "enum": [
- "Image"
- ]
+ "const": "Image"
},
"mimeType": {
"type": "string"
@@ -3056,15 +2931,11 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.WitnessTypeDataImage"
- ]
+ "const": "model.dotcomrendering.pageElements.WitnessTypeDataImage"
},
"type": {
"type": "string",
- "enum": [
- "image"
- ]
+ "const": "image"
},
"alt": {
"type": "string"
@@ -3135,15 +3006,11 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.WitnessTypeDataVideo"
- ]
+ "const": "model.dotcomrendering.pageElements.WitnessTypeDataVideo"
},
"type": {
"type": "string",
- "enum": [
- "video"
- ]
+ "const": "video"
},
"description": {
"type": "string"
@@ -3235,15 +3102,11 @@
"properties": {
"_type": {
"type": "string",
- "enum": [
- "model.dotcomrendering.pageElements.WitnessTypeDataText"
- ]
+ "const": "model.dotcomrendering.pageElements.WitnessTypeDataText"
},
"type": {
"type": "string",
- "enum": [
- "text"
- ]
+ "const": "text"
},
"description": {
"type": "string"
diff --git a/dotcom-rendering/src/model/enhanceBlocks.ts b/dotcom-rendering/src/model/enhanceBlocks.ts
index 907288b997c..d9a0b65254b 100644
--- a/dotcom-rendering/src/model/enhanceBlocks.ts
+++ b/dotcom-rendering/src/model/enhanceBlocks.ts
@@ -8,10 +8,6 @@ import { enhanceH3s } from './enhance-H3s';
import { enhanceImages } from './enhance-images';
import { enhanceInteractiveContentsElements } from './enhance-interactive-contents-elements';
import { enhanceNumberedLists } from './enhance-numbered-lists';
-/**
- * Removing this enhancer temporarily because it's causing a bug in production
- */
-// import { enhanceRecipes } from './enhance-recipes';
import { enhanceTweets } from './enhance-tweets';
import { insertPromotedNewsletter } from './insertPromotedNewsletter';
import { validateAsBlock } from './validate';
diff --git a/dotcom-rendering/src/model/enhanceCards.ts b/dotcom-rendering/src/model/enhanceCards.ts
index 24734190a85..b0c8db51dd6 100644
--- a/dotcom-rendering/src/model/enhanceCards.ts
+++ b/dotcom-rendering/src/model/enhanceCards.ts
@@ -10,8 +10,10 @@ import type {
DCRSlideshowImage,
DCRSupportingContent,
FEFrontCard,
+ FEMediaAtoms,
FESupportingContent,
} from '../types/front';
+import type { MainMedia } from '../types/mainMedia';
import type { FETagType, TagType } from '../types/tag';
import { enhanceSnaps } from './enhanceSnaps';
@@ -87,13 +89,14 @@ const enhanceSupportingContent = (
const supportingContentIsLive =
subLink.format?.design === 'LiveBlogDesign';
+ const kickerText = subLink.header?.kicker?.item?.properties.kickerText;
+
return {
format: presentationFormat,
headline: subLink.header?.headline ?? '',
url: subLink.properties.href ?? subLink.header?.url,
- kickerText: supportingContentIsLive
- ? 'Live'
- : subLink.header?.kicker?.item?.properties.kickerText,
+ kickerText:
+ supportingContentIsLive && !kickerText ? 'Live' : kickerText,
};
});
};
@@ -123,19 +126,6 @@ const decideImage = (trail: FEFrontCard) => {
return trail.properties.maybeContent?.trail.trailPicture?.allImages[0]?.url;
};
-const decideMediaType = (format: ArticleFormat): MediaType | undefined => {
- switch (format.design) {
- case ArticleDesign.Gallery:
- return 'Gallery';
- case ArticleDesign.Video:
- return 'Video';
- case ArticleDesign.Audio:
- return 'Audio';
- default:
- return undefined;
- }
-};
-
const decideKicker = (
trail: FEFrontCard,
cardInTagFront: boolean,
@@ -189,6 +179,60 @@ const enhanceTags = (tags: FETagType[]): TagType[] => {
});
};
+/**
+ * While the first Media Atom is *not* guaranteed to be the main media,
+ * it *happens to be* correct in the majority of cases.
+ * @see https://github.com/guardian/frontend/pull/26247 for inspiration
+ */
+const decideMedia = (
+ format: ArticleFormat,
+ mediaAtom?: FEMediaAtoms,
+): MainMedia | undefined => {
+ switch (format.design) {
+ case ArticleDesign.Gallery:
+ return { type: 'Gallery' };
+
+ case ArticleDesign.Audio:
+ return {
+ type: 'Audio',
+ duration: mediaAtom?.duration ?? 0,
+ };
+
+ case ArticleDesign.Video: {
+ if (mediaAtom) {
+ const asset = mediaAtom.assets.find(
+ ({ version }) => version === mediaAtom.activeVersion,
+ );
+ if (asset?.platform === 'Youtube') {
+ return {
+ type: 'Video',
+ elementId: mediaAtom.id,
+ videoId: asset.id,
+ duration: mediaAtom.duration ?? 0,
+ title: mediaAtom.title,
+ // Size fixed to a 5:3 ratio
+ width: 500,
+ height: 300,
+ origin: mediaAtom.source ?? 'Unknown origin',
+ expired: !!mediaAtom.expired,
+ images:
+ mediaAtom.posterImage?.allImages.map(
+ ({ url, fields: { width } }) => ({
+ url,
+ width: Number(width),
+ }),
+ ) ?? [],
+ };
+ }
+ }
+ return undefined;
+ }
+
+ default:
+ return undefined;
+ }
+};
+
export const enhanceCards = (
collections: FEFrontCard[],
{
@@ -284,11 +328,10 @@ export const enhanceCards = (
faciaCard.properties.maybeContent.trail.byline,
)
: undefined,
- mediaType: decideMediaType(format),
- mediaDuration:
- faciaCard.properties.maybeContent?.elements.mediaAtoms[0]
- ?.duration,
- showMainVideo: faciaCard.properties.showMainVideo,
+ mainMedia: decideMedia(
+ format,
+ faciaCard.properties.maybeContent?.elements.mediaAtoms[0],
+ ),
isExternalLink: faciaCard.card.cardStyle.type === 'ExternalLink',
embedUri: faciaCard.properties.embedUri ?? undefined,
branding,
diff --git a/dotcom-rendering/src/model/enhanceCollections.ts b/dotcom-rendering/src/model/enhanceCollections.ts
index c546d950b60..15d488f7159 100644
--- a/dotcom-rendering/src/model/enhanceCollections.ts
+++ b/dotcom-rendering/src/model/enhanceCollections.ts
@@ -72,7 +72,8 @@ export const enhanceCollections = (
href,
containerPalette,
badge: decideBadge(
- allCardsHaveBranding ? allBranding : [],
+ // We only try to use branded badge for paid content containers
+ isPaidContent && allCardsHaveBranding ? allBranding : [],
collection.config.href,
),
grouped: groupCards(
diff --git a/dotcom-rendering/src/model/front-schema.json b/dotcom-rendering/src/model/front-schema.json
index fdb81e948d6..f0a30b352a9 100644
--- a/dotcom-rendering/src/model/front-schema.json
+++ b/dotcom-rendering/src/model/front-schema.json
@@ -59,8 +59,7 @@
"type": "string"
},
"sharedAdTargeting": {
- "type": "object",
- "additionalProperties": {}
+ "$ref": "#/definitions/SharedAdTargeting"
},
"buildNumber": {
"type": "string"
@@ -120,9 +119,7 @@
},
"isFront": {
"type": "boolean",
- "enum": [
- true
- ]
+ "const": true
},
"idWebAppUrl": {
"type": "string"
@@ -2840,10 +2837,120 @@
"FEMediaAtoms": {
"type": "object",
"properties": {
+ "id": {
+ "type": "string"
+ },
+ "assets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/MediaAsset"
+ }
+ },
+ "title": {
+ "type": "string"
+ },
"duration": {
"type": "number"
+ },
+ "source": {
+ "type": "string"
+ },
+ "posterImage": {
+ "type": "object",
+ "properties": {
+ "allImages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Image"
+ }
+ }
+ },
+ "required": [
+ "allImages"
+ ]
+ },
+ "expired": {
+ "type": "boolean"
+ },
+ "activeVersion": {
+ "type": "number"
}
- }
+ },
+ "required": [
+ "assets",
+ "id",
+ "title"
+ ]
+ },
+ "MediaAsset": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "version": {
+ "type": "number"
+ },
+ "platform": {
+ "type": "string"
+ },
+ "mimeType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "platform",
+ "version"
+ ]
+ },
+ "Image": {
+ "type": "object",
+ "properties": {
+ "index": {
+ "type": "number"
+ },
+ "fields": {
+ "type": "object",
+ "properties": {
+ "height": {
+ "type": "string"
+ },
+ "width": {
+ "type": "string"
+ },
+ "isMaster": {
+ "type": "string"
+ },
+ "source": {
+ "type": "string"
+ },
+ "caption": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "height",
+ "width"
+ ]
+ },
+ "mediaType": {
+ "type": "string"
+ },
+ "mimeType": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "fields",
+ "index",
+ "mediaType",
+ "mimeType",
+ "url"
+ ]
},
"EditionId": {
"enum": [
@@ -3204,6 +3311,9 @@
"type": "boolean"
}
},
+ "SharedAdTargeting": {
+ "type": "object"
+ },
"StageType": {
"enum": [
"CODE",
@@ -3306,9 +3416,6 @@
"avatarUrl": {
"type": "string"
},
- "mediaType": {
- "$ref": "#/definitions/MediaType"
- },
"mediaDuration": {
"type": "number"
},
@@ -3380,8 +3487,8 @@
"isCommentable"
]
},
- "showMainVideo": {
- "type": "boolean"
+ "mainMedia": {
+ "$ref": "#/definitions/MainMedia"
}
},
"required": [
@@ -3390,13 +3497,171 @@
"url"
]
},
- "MediaType": {
- "enum": [
- "Audio",
- "Gallery",
- "Video"
- ],
- "type": "string"
+ "MainMedia": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/Video",
+ "description": "For displaying embedded, playable videos directly in cards"
+ },
+ {
+ "$ref": "#/definitions/Audio"
+ },
+ {
+ "$ref": "#/definitions/Gallery"
+ }
+ ]
+ },
+ "Video": {
+ "description": "For displaying embedded, playable videos directly in cards",
+ "allOf": [
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "enum": [
+ "Audio",
+ "Gallery",
+ "Video"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "Video"
+ },
+ "elementId": {
+ "type": "string"
+ },
+ "videoId": {
+ "type": "string"
+ },
+ "height": {
+ "type": "number"
+ },
+ "width": {
+ "type": "number"
+ },
+ "origin": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "duration": {
+ "type": "number"
+ },
+ "expired": {
+ "type": "boolean"
+ },
+ "images": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "width": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "url",
+ "width"
+ ]
+ }
+ }
+ },
+ "required": [
+ "duration",
+ "elementId",
+ "expired",
+ "height",
+ "images",
+ "origin",
+ "title",
+ "type",
+ "videoId",
+ "width"
+ ]
+ }
+ ]
+ },
+ "Audio": {
+ "allOf": [
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "enum": [
+ "Audio",
+ "Gallery",
+ "Video"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "Audio"
+ },
+ "duration": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "duration",
+ "type"
+ ]
+ }
+ ]
+ },
+ "Gallery": {
+ "allOf": [
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "enum": [
+ "Audio",
+ "Gallery",
+ "Video"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "Gallery"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ }
+ ]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
diff --git a/dotcom-rendering/src/model/groupTrailsByDates.ts b/dotcom-rendering/src/model/groupTrailsByDates.ts
index b750df0a998..687fe2b1567 100644
--- a/dotcom-rendering/src/model/groupTrailsByDates.ts
+++ b/dotcom-rendering/src/model/groupTrailsByDates.ts
@@ -1,4 +1,5 @@
import type { DCRFrontCard } from '../types/front';
+import type { GroupedTrails } from '../types/tagFront';
/**
* The number of trails per day required (on average) for trails to be
@@ -15,16 +16,6 @@ interface TrailAndDate {
date: Date;
}
-/**
- * Represents a set of trails grouped by their year, month & optionally day of publication.
- */
-export interface GroupedTrails {
- year: number;
- month: number;
- day: number | undefined;
- trails: DCRFrontCard[];
-}
-
/**
* Calculates the average number of trails per day across a set of days
*/
diff --git a/dotcom-rendering/src/model/injectMpuIntoGroupedTrails.ts b/dotcom-rendering/src/model/injectMpuIntoGroupedTrails.ts
new file mode 100644
index 00000000000..f8753ed2bfe
--- /dev/null
+++ b/dotcom-rendering/src/model/injectMpuIntoGroupedTrails.ts
@@ -0,0 +1,81 @@
+import { takeFirst } from '../lib/tuple';
+import type {
+ GroupedTrails,
+ GroupedTrailsFastMpu,
+ GroupedTrailsSlowMpu,
+} from '../types/tagFront';
+
+/**
+ * Injects an MPU container into a list of grouped trails
+ *
+ * For both slow & fast tag fronts, containers of certain lengths can receive an MPU slot.
+ * The code looks for the first container of the right length and injects the ad slot
+ * object (GroupedTrailsSlowMpu / GroupedTrailsFastMpu).
+ */
+export const injectMpuIntoGroupedTrails = (
+ groupedTrails: GroupedTrails[],
+ speed: 'slow' | 'fast',
+): Array => {
+ let injected = false;
+ const result: Array<
+ GroupedTrails | GroupedTrailsFastMpu | GroupedTrailsSlowMpu
+ > = [];
+
+ groupedTrails.forEach((grouped) => {
+ if (injected) {
+ result.push(grouped);
+ return;
+ }
+
+ if (speed === 'fast') {
+ // When we have a container with > 9 trails for fast,
+ // we 'cap' the number of trails at 9 in order to fit an MPU in.
+ // Containers that don't get an MPU injected will of course still be
+ // able to show more than 9 trails.
+ const fastTrails = takeFirst(grouped.trails, 9);
+ switch (fastTrails.length) {
+ case 2:
+ case 4:
+ case 6:
+ case 9:
+ injected = true;
+ result.push({
+ day: grouped.day,
+ month: grouped.month,
+ year: grouped.year,
+ trails: fastTrails,
+ injected: true,
+ speed: 'fast',
+ });
+ break;
+ default:
+ break;
+ }
+ } else {
+ // By taking the first 12, we get the benefit of being able to use
+ // a switch statement here, without 'capping' the number of trails in the
+ // same way we do when 'fast'
+ const slowTrails = takeFirst(grouped.trails, 12);
+ switch (slowTrails.length) {
+ case 2:
+ case 4:
+ case 5:
+ case 7:
+ injected = true;
+ result.push({
+ day: grouped.day,
+ month: grouped.month,
+ year: grouped.year,
+ trails: slowTrails,
+ injected: true,
+ speed: 'slow',
+ });
+ break;
+ default:
+ break;
+ }
+ }
+ });
+
+ return result;
+};
diff --git a/dotcom-rendering/src/model/tag-front-schema.json b/dotcom-rendering/src/model/tag-front-schema.json
index e8cb77397c1..8da5583ec81 100644
--- a/dotcom-rendering/src/model/tag-front-schema.json
+++ b/dotcom-rendering/src/model/tag-front-schema.json
@@ -866,8 +866,7 @@
"type": "string"
},
"sharedAdTargeting": {
- "type": "object",
- "additionalProperties": {}
+ "$ref": "#/definitions/SharedAdTargeting"
},
"buildNumber": {
"type": "string"
@@ -927,9 +926,7 @@
},
"isFront": {
"type": "boolean",
- "enum": [
- true
- ]
+ "const": true
},
"idWebAppUrl": {
"type": "string"
@@ -1249,10 +1246,120 @@
"FEMediaAtoms": {
"type": "object",
"properties": {
+ "id": {
+ "type": "string"
+ },
+ "assets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/MediaAsset"
+ }
+ },
+ "title": {
+ "type": "string"
+ },
"duration": {
"type": "number"
+ },
+ "source": {
+ "type": "string"
+ },
+ "posterImage": {
+ "type": "object",
+ "properties": {
+ "allImages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Image"
+ }
+ }
+ },
+ "required": [
+ "allImages"
+ ]
+ },
+ "expired": {
+ "type": "boolean"
+ },
+ "activeVersion": {
+ "type": "number"
}
- }
+ },
+ "required": [
+ "assets",
+ "id",
+ "title"
+ ]
+ },
+ "MediaAsset": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "version": {
+ "type": "number"
+ },
+ "platform": {
+ "type": "string"
+ },
+ "mimeType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "platform",
+ "version"
+ ]
+ },
+ "Image": {
+ "type": "object",
+ "properties": {
+ "index": {
+ "type": "number"
+ },
+ "fields": {
+ "type": "object",
+ "properties": {
+ "height": {
+ "type": "string"
+ },
+ "width": {
+ "type": "string"
+ },
+ "isMaster": {
+ "type": "string"
+ },
+ "source": {
+ "type": "string"
+ },
+ "caption": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "height",
+ "width"
+ ]
+ },
+ "mediaType": {
+ "type": "string"
+ },
+ "mimeType": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "fields",
+ "index",
+ "mediaType",
+ "mimeType",
+ "url"
+ ]
},
"EditionId": {
"enum": [
@@ -1550,6 +1657,9 @@
"type": "boolean"
}
},
+ "SharedAdTargeting": {
+ "type": "object"
+ },
"StageType": {
"enum": [
"CODE",
diff --git a/dotcom-rendering/src/server/index.article.web.ts b/dotcom-rendering/src/server/index.article.web.ts
index 0255453a050..f93392c7a9a 100644
--- a/dotcom-rendering/src/server/index.article.web.ts
+++ b/dotcom-rendering/src/server/index.article.web.ts
@@ -10,7 +10,7 @@ import { enhanceTableOfContents } from '../model/enhanceTableOfContents';
import { validateAsArticleType } from '../model/validate';
import { recordTypeAndPlatform } from '../server/lib/logging-store';
import type { FEArticleBadgeType } from '../types/badge';
-import type { FEArticleType } from '../types/frontend';
+import type { FEArticleType, FEBlocksRequest } from '../types/frontend';
import {
renderBlocks,
renderHtml,
diff --git a/dotcom-rendering/src/server/index.front.web.ts b/dotcom-rendering/src/server/index.front.web.ts
index 36f97e26980..559a6428af8 100644
--- a/dotcom-rendering/src/server/index.front.web.ts
+++ b/dotcom-rendering/src/server/index.front.web.ts
@@ -7,6 +7,7 @@ import {
extractTrendingTopicsFomFront,
} from '../model/extractTrendingTopics';
import { groupTrailsByDates } from '../model/groupTrailsByDates';
+import { injectMpuIntoGroupedTrails } from '../model/injectMpuIntoGroupedTrails';
import { getSpeedFromTrails } from '../model/slowOrFastByTrails';
import { validateAsFrontType, validateAsTagFrontType } from '../model/validate';
import { recordTypeAndPlatform } from '../server/lib/logging-store';
@@ -54,13 +55,17 @@ const enhanceTagFront = (body: unknown): DCRTagFrontType => {
});
const speed = getSpeedFromTrails(data.contents);
+ const groupedTrails = groupTrailsByDates(
+ enhancedCards,
+ speed === 'slow' || data.forceDay,
+ );
+
return {
...data,
tags: data.tags.tags,
- groupedTrails: groupTrailsByDates(
- enhancedCards,
- speed === 'slow' || data.forceDay,
- ),
+ groupedTrails: data.isAdFreeUser
+ ? groupedTrails
+ : injectMpuIntoGroupedTrails(groupedTrails, speed),
speed,
// Pagination information comes from the first tag
pagination:
diff --git a/dotcom-rendering/src/server/render.article.web.tsx b/dotcom-rendering/src/server/render.article.web.tsx
index d0f2c2f64f1..9c32aa1c6f8 100644
--- a/dotcom-rendering/src/server/render.article.web.tsx
+++ b/dotcom-rendering/src/server/render.article.web.tsx
@@ -6,7 +6,6 @@ import {
import { ArticlePage } from '../components/ArticlePage';
import { isAmpSupported } from '../components/Elements.amp';
import { KeyEventsContainer } from '../components/KeyEventsContainer';
-import { buildAdTargeting } from '../lib/ad-targeting';
import {
ASSET_ORIGIN,
generateScriptTags,
@@ -23,7 +22,7 @@ import { extractGA } from '../model/extract-ga';
import { extractNAV } from '../model/extract-nav';
import { makeWindowGuardian } from '../model/window-guardian';
import type { FEElement } from '../types/content';
-import type { FEArticleType } from '../types/frontend';
+import type { FEArticleType, FEBlocksRequest } from '../types/frontend';
import type { TagType } from '../types/tag';
import { htmlPageTemplate } from './htmlPageTemplate';
import { recipeSchema } from './temporaryRecipeStructuredData';
@@ -261,31 +260,16 @@ export const renderBlocks = ({
ajaxUrl,
isAdFreeUser,
isSensitive,
- videoDuration,
- edition,
section,
- sharedAdTargeting,
- adUnit,
switches,
keywordIds,
}: FEBlocksRequest): string => {
const format: ArticleFormat = decideFormat(FEFormat);
- const adTargeting: AdTargeting = buildAdTargeting({
- isAdFreeUser,
- isSensitive,
- videoDuration,
- edition,
- section,
- sharedAdTargeting,
- adUnit,
- });
-
const { html, extractedCss } = renderToStringWithEmotion(
diff --git a/dotcom-rendering/src/static/icons/weather/weather-1.svg b/dotcom-rendering/src/static/icons/weather/weather-1.svg
new file mode 100644
index 00000000000..950cafa9308
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-1.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-11.svg b/dotcom-rendering/src/static/icons/weather/weather-11.svg
new file mode 100644
index 00000000000..e2435fdcf43
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-11.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-12.svg b/dotcom-rendering/src/static/icons/weather/weather-12.svg
new file mode 100644
index 00000000000..d54f62c9cf8
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-12.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-13.svg b/dotcom-rendering/src/static/icons/weather/weather-13.svg
new file mode 100644
index 00000000000..d54f62c9cf8
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-13.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-14.svg b/dotcom-rendering/src/static/icons/weather/weather-14.svg
new file mode 100644
index 00000000000..7e60c63fafb
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-14.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-15.svg b/dotcom-rendering/src/static/icons/weather/weather-15.svg
new file mode 100644
index 00000000000..56096f22f73
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-15.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-16.svg b/dotcom-rendering/src/static/icons/weather/weather-16.svg
new file mode 100644
index 00000000000..56096f22f73
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-16.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-17.svg b/dotcom-rendering/src/static/icons/weather/weather-17.svg
new file mode 100644
index 00000000000..9191f05d570
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-17.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-18.svg b/dotcom-rendering/src/static/icons/weather/weather-18.svg
new file mode 100644
index 00000000000..ef5d7004f40
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-18.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-19.svg b/dotcom-rendering/src/static/icons/weather/weather-19.svg
new file mode 100644
index 00000000000..957f0115e04
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-19.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-2.svg b/dotcom-rendering/src/static/icons/weather/weather-2.svg
new file mode 100644
index 00000000000..94faae84cc7
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-2.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-20.svg b/dotcom-rendering/src/static/icons/weather/weather-20.svg
new file mode 100644
index 00000000000..957f0115e04
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-20.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-21.svg b/dotcom-rendering/src/static/icons/weather/weather-21.svg
new file mode 100644
index 00000000000..79a4808126b
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-21.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-22.svg b/dotcom-rendering/src/static/icons/weather/weather-22.svg
new file mode 100644
index 00000000000..c6a4e528072
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-22.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-23.svg b/dotcom-rendering/src/static/icons/weather/weather-23.svg
new file mode 100644
index 00000000000..597d131d7b3
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-23.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-24.svg b/dotcom-rendering/src/static/icons/weather/weather-24.svg
new file mode 100644
index 00000000000..9ddda9ab0a5
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-24.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-25.svg b/dotcom-rendering/src/static/icons/weather/weather-25.svg
new file mode 100644
index 00000000000..e085f7ec4d0
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-25.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-26.svg b/dotcom-rendering/src/static/icons/weather/weather-26.svg
new file mode 100644
index 00000000000..e085f7ec4d0
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-26.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-29.svg b/dotcom-rendering/src/static/icons/weather/weather-29.svg
new file mode 100644
index 00000000000..957f0115e04
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-29.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-3.svg b/dotcom-rendering/src/static/icons/weather/weather-3.svg
new file mode 100644
index 00000000000..94faae84cc7
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-3.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-30.svg b/dotcom-rendering/src/static/icons/weather/weather-30.svg
new file mode 100644
index 00000000000..443d1073406
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-30.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-31.svg b/dotcom-rendering/src/static/icons/weather/weather-31.svg
new file mode 100644
index 00000000000..7ef71805ac0
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-31.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-32.svg b/dotcom-rendering/src/static/icons/weather/weather-32.svg
new file mode 100644
index 00000000000..b1192102655
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-32.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-33.svg b/dotcom-rendering/src/static/icons/weather/weather-33.svg
new file mode 100644
index 00000000000..d7c6b8b3e32
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-33.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-34.svg b/dotcom-rendering/src/static/icons/weather/weather-34.svg
new file mode 100644
index 00000000000..774107faab9
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-34.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-35.svg b/dotcom-rendering/src/static/icons/weather/weather-35.svg
new file mode 100644
index 00000000000..342d7188e8e
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-35.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-36.svg b/dotcom-rendering/src/static/icons/weather/weather-36.svg
new file mode 100644
index 00000000000..7304bf99b77
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-36.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-37.svg b/dotcom-rendering/src/static/icons/weather/weather-37.svg
new file mode 100644
index 00000000000..4972674c618
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-37.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-38.svg b/dotcom-rendering/src/static/icons/weather/weather-38.svg
new file mode 100644
index 00000000000..7304bf99b77
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-38.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-39.svg b/dotcom-rendering/src/static/icons/weather/weather-39.svg
new file mode 100644
index 00000000000..7a6a109aed4
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-39.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-4.svg b/dotcom-rendering/src/static/icons/weather/weather-4.svg
new file mode 100644
index 00000000000..d375d156128
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-4.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-40.svg b/dotcom-rendering/src/static/icons/weather/weather-40.svg
new file mode 100644
index 00000000000..7a6a109aed4
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-40.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-41.svg b/dotcom-rendering/src/static/icons/weather/weather-41.svg
new file mode 100644
index 00000000000..82a0c13f89c
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-41.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-42.svg b/dotcom-rendering/src/static/icons/weather/weather-42.svg
new file mode 100644
index 00000000000..82a0c13f89c
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-42.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-43.svg b/dotcom-rendering/src/static/icons/weather/weather-43.svg
new file mode 100644
index 00000000000..5c5a7674c60
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-43.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-44.svg b/dotcom-rendering/src/static/icons/weather/weather-44.svg
new file mode 100644
index 00000000000..7d71da3a95a
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-44.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-5.svg b/dotcom-rendering/src/static/icons/weather/weather-5.svg
new file mode 100644
index 00000000000..090f9ec9141
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-5.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-6.svg b/dotcom-rendering/src/static/icons/weather/weather-6.svg
new file mode 100644
index 00000000000..a978836ca09
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-6.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-7.svg b/dotcom-rendering/src/static/icons/weather/weather-7.svg
new file mode 100644
index 00000000000..79f9206ec76
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-7.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/static/icons/weather/weather-8.svg b/dotcom-rendering/src/static/icons/weather/weather-8.svg
new file mode 100644
index 00000000000..15a46b8989f
--- /dev/null
+++ b/dotcom-rendering/src/static/icons/weather/weather-8.svg
@@ -0,0 +1 @@
+
diff --git a/dotcom-rendering/src/types/config.ts b/dotcom-rendering/src/types/config.ts
index 3efcf645833..22e8ec58cf4 100644
--- a/dotcom-rendering/src/types/config.ts
+++ b/dotcom-rendering/src/types/config.ts
@@ -1,3 +1,4 @@
+import type { SharedAdTargeting } from '../lib/ad-targeting';
import type { EditionId } from '../lib/edition';
export interface CommercialConfigType {
@@ -61,7 +62,7 @@ export interface ConfigType extends CommercialConfigType {
edition: EditionId;
section: string;
- sharedAdTargeting: { [key: string]: any };
+ sharedAdTargeting: SharedAdTargeting;
isPaidContent?: boolean;
keywordIds: string;
showRelatedContent: boolean;
diff --git a/dotcom-rendering/src/types/front.ts b/dotcom-rendering/src/types/front.ts
index cb2c3c30781..0776ae20c4a 100644
--- a/dotcom-rendering/src/types/front.ts
+++ b/dotcom-rendering/src/types/front.ts
@@ -1,9 +1,12 @@
import type { ArticlePillar, ArticleSpecial } from '@guardian/libs';
+import type { SharedAdTargeting } from '../lib/ad-targeting';
import type { EditionId } from '../lib/edition';
import type { DCRBadgeType } from './badge';
import type { Branding } from './branding';
import type { ServerSideTests, Switches } from './config';
+import type { Image } from './content';
import type { FooterType } from './footer';
+import type { MainMedia } from './mainMedia';
import type { FETagType } from './tag';
import type { Territory } from './territory';
import type { FETrailType, TrailType } from './trails';
@@ -133,8 +136,26 @@ export type DCRContainerPalette =
// TODO: These may need to be declared differently than the front types in the future
export type DCRContainerType = FEContainerType;
-interface FEMediaAtoms {
+/** @see https://github.com/guardian/frontend/blob/0bf69f55a/common/app/model/content/Atom.scala#L191-L196 */
+interface MediaAsset {
+ id: string;
+ version: number;
+ platform: string;
+ mimeType?: string;
+}
+
+/** @see https://github.com/guardian/frontend/blob/0bf69f55a/common/app/model/content/Atom.scala#L158-L169 */
+export interface FEMediaAtoms {
+ id: string;
+ // defaultHtml: string; // currently unused
+ assets: MediaAsset[];
+ title: string;
duration?: number;
+ source?: string;
+ posterImage?: { allImages: Image[] };
+ expired?: boolean;
+ activeVersion?: number;
+ // channelId?: string; // currently unused
}
export type FEFrontCard = {
@@ -288,9 +309,7 @@ export type DCRFrontCard = {
byline?: string;
showByline?: boolean;
avatarUrl?: string;
- mediaType?: MediaType;
- mediaDuration?: number;
- showMainVideo: boolean;
+ mainMedia?: MainMedia;
isExternalLink: boolean;
embedUri?: string;
branding?: Branding;
@@ -399,7 +418,7 @@ export type FEFrontConfigType = {
section: string;
keywordIds: string;
locationapiurl: string;
- sharedAdTargeting: { [key: string]: unknown };
+ sharedAdTargeting: SharedAdTargeting;
buildNumber: string;
abTests: ServerSideTests;
pbIndexSites: { [key: string]: unknown }[];
diff --git a/dotcom-rendering/src/types/frontend.ts b/dotcom-rendering/src/types/frontend.ts
index 1e4a9208fc3..84c5e16c4a3 100644
--- a/dotcom-rendering/src/types/frontend.ts
+++ b/dotcom-rendering/src/types/frontend.ts
@@ -1,3 +1,4 @@
+import type { SharedAdTargeting } from '../lib/ad-targeting';
import type { EditionId } from '../lib/edition';
import type { FEArticleBadgeType } from './badge';
import type { CommercialProperties } from './commercial';
@@ -127,3 +128,24 @@ export interface TableOfContentsItem {
id: string;
title: string;
}
+
+/**
+ * BlocksRequest is the expected body format for POST requests made to /Blocks
+ */
+export interface FEBlocksRequest {
+ blocks: Block[];
+ format: FEFormat;
+ host?: string;
+ pageId: string;
+ webTitle: string;
+ ajaxUrl: string;
+ isAdFreeUser: boolean;
+ isSensitive: boolean;
+ edition: string;
+ section: string;
+ sharedAdTargeting: SharedAdTargeting;
+ adUnit: string;
+ videoDuration?: number;
+ switches: { [key: string]: boolean };
+ keywordIds: string;
+}
diff --git a/dotcom-rendering/src/types/mainMedia.ts b/dotcom-rendering/src/types/mainMedia.ts
new file mode 100644
index 00000000000..dbb21ca7d38
--- /dev/null
+++ b/dotcom-rendering/src/types/mainMedia.ts
@@ -0,0 +1,28 @@
+type Media = {
+ type: 'Video' | 'Audio' | 'Gallery';
+};
+
+/** For displaying embedded, playable videos directly in cards */
+type Video = Media & {
+ type: 'Video';
+ elementId: string;
+ videoId: string;
+ height: number;
+ width: number;
+ origin: string;
+ title: string;
+ duration: number;
+ expired: boolean;
+ images: Array<{ url: string; width: number }>;
+};
+
+type Audio = Media & {
+ type: 'Audio';
+ duration: number;
+};
+
+type Gallery = Media & {
+ type: 'Gallery';
+};
+
+export type MainMedia = Video | Audio | Gallery;
diff --git a/dotcom-rendering/src/types/newslettersPage.ts b/dotcom-rendering/src/types/newslettersPage.ts
index dde45f86be0..46db55c9f43 100644
--- a/dotcom-rendering/src/types/newslettersPage.ts
+++ b/dotcom-rendering/src/types/newslettersPage.ts
@@ -26,7 +26,7 @@ type FENewslettersConfigType = {
// videoDuration?: number;
edition: EditionId;
// section: string;
- // sharedAdTargeting: { [key: string]: any };
+ // sharedAdTargeting: SharedAdTargeting;
idApiUrl: string;
discussionApiUrl: string;
// discussionD2Uid: string;
diff --git a/dotcom-rendering/src/types/tagFront.ts b/dotcom-rendering/src/types/tagFront.ts
index d0cff6ac6ce..5b177db2949 100644
--- a/dotcom-rendering/src/types/tagFront.ts
+++ b/dotcom-rendering/src/types/tagFront.ts
@@ -1,7 +1,7 @@
import type { EditionId } from '../lib/edition';
-import type { GroupedTrails } from '../model/groupTrailsByDates';
+import type { Tuple } from '../lib/tuple';
import type { FooterType } from './footer';
-import type { FEFrontCard, FEFrontConfigType } from './front';
+import type { DCRFrontCard, FEFrontCard, FEFrontConfigType } from './front';
import type { FETagType } from './tag';
export interface FETagFrontType {
@@ -23,8 +23,36 @@ export interface FETagFrontType {
forceDay: boolean;
}
+/**
+ * Represents a set of trails grouped by their year, month & optionally day of publication.
+ */
+export interface GroupedTrailsBase {
+ year: number;
+ month: number;
+ day: number | undefined;
+}
+
+export interface GroupedTrails extends GroupedTrailsBase {
+ trails: DCRFrontCard[];
+}
+
+export interface GroupedTrailsFastMpu extends GroupedTrailsBase {
+ injected: true;
+ speed: 'fast';
+ // Trails must either be length of 2, 4, 6, 9
+ trails: Tuple;
+}
+export interface GroupedTrailsSlowMpu extends GroupedTrailsBase {
+ injected: true;
+ speed: 'slow';
+ // Trails must either be length of 2, 4, 5, 7
+ trails: Tuple;
+}
+
export interface DCRTagFrontType {
- groupedTrails: GroupedTrails[];
+ groupedTrails: Array<
+ GroupedTrails | GroupedTrailsFastMpu | GroupedTrailsSlowMpu
+ >;
nav: FENavType;
tags: FETagType[];
editionId: EditionId;
diff --git a/dotcom-rendering/src/types/trails.ts b/dotcom-rendering/src/types/trails.ts
index 2331e325e11..e6b323c5f6e 100644
--- a/dotcom-rendering/src/types/trails.ts
+++ b/dotcom-rendering/src/types/trails.ts
@@ -1,7 +1,6 @@
import type { Branding } from './branding';
import type { DCRSnapType, DCRSupportingContent } from './front';
-
-type MediaType = 'Video' | 'Audio' | 'Gallery';
+import type { MainMedia } from './mainMedia';
interface BaseTrailType {
url: string;
@@ -9,7 +8,6 @@ interface BaseTrailType {
webPublicationDate?: string;
image?: string;
avatarUrl?: string;
- mediaType?: MediaType;
mediaDuration?: number;
ageWarning?: string;
byline?: string;
@@ -29,7 +27,7 @@ interface BaseTrailType {
isClosedForComments: boolean;
discussionId?: string;
};
- showMainVideo?: boolean;
+ mainMedia?: MainMedia;
}
export interface TrailType extends BaseTrailType {
diff --git a/package.json b/package.json
index 88ad01eacaa..aa89a122cc3 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,8 @@
"type-fest",
"**/@types/webpack",
"**/@types/react",
- "**/@types/express-serve-static-core"
+ "**/@types/express-serve-static-core",
+ "**/@guardian/**"
]
},
"scripts": {
@@ -28,11 +29,11 @@
"prepare": "husky install"
},
"dependencies": {
- "@guardian/prettier": "^2.0.0",
- "chromatic": "^6.17.4",
+ "@guardian/prettier": "^4.0.0",
+ "chromatic": "^6.19.9",
"husky": "^8.0.3",
"npm-run-all": "^4.1.5",
- "prettier": "^2.8.0",
- "typescript": "^4.9.0"
+ "prettier": "^2.8.8",
+ "typescript": "5.1.3"
}
}
diff --git a/yarn.lock b/yarn.lock
index b42798dd9e5..3e2790424b1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,26 +2,24 @@
# yarn lockfile v1
+"@aashutoshrathi/word-wrap@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
+ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+
"@adobe/css-tools@^4.0.1":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.1.0.tgz#417fef4a143f4396ad0b3b4351fee21323f15aa8"
- integrity sha512-mMVJ/j/GbZ/De4ZHWbQAQO1J6iVnjtZLc9WEdkUQb8S/Bu2cAF2bETXUgMAdvMG3/ngtKmcNBe+Zms9bg6jnQQ==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855"
+ integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==
"@ampproject/remapping@^2.2.0":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
- integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
+ integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
dependencies:
- "@jridgewell/gen-mapping" "^0.1.0"
+ "@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
-"@arcanis/slice-ansi@^1.0.2":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@arcanis/slice-ansi/-/slice-ansi-1.1.1.tgz#0ee328a68996ca45854450033a3d161421dc4f55"
- integrity sha512-xguP2WR2Dv0gQ7Ykbdb7BNCnPnIPB94uTi0Z2NvkRBEnhbwjOQ7QyQKJXrVQg4qDpiD9hA5l5cCwy/z2OXgc3w==
- dependencies:
- grapheme-splitter "^1.0.4"
-
"@aw-web-design/x-default-browser@1.4.88":
version "1.4.88"
resolved "https://registry.yarnpkg.com/@aw-web-design/x-default-browser/-/x-default-browser-1.4.88.tgz#33d869cb2a537cd6d2a8369d4dc8ea4988d4be89"
@@ -30,19 +28,19 @@
default-browser-id "3.0.0"
"@aws-cdk/asset-awscli-v1@^2.2.97":
- version "2.2.108"
- resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.108.tgz#500e46b7a0db26eb9f7b4eb421c87c83f14ccccc"
- integrity sha512-ML3Z/m6D3biTcYFclx5ln3jmj2tR51LFrvqc4IXbraKr3CLsXvnrWHl3DYZQRgLbW1cauOAcoK1Lm5wGnc3pcQ==
+ version "2.2.199"
+ resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.199.tgz#59cf4abd11f2c5ff487155d7ddf9cc71cc22b56c"
+ integrity sha512-zNdD2OxALdsdQaRZBpTfMTuudxV+4jLMznJIvVj6O+OqCru4m5UtgVQmyApW1z2H9s4/06ovVt20aXe2G8Ta+w==
"@aws-cdk/asset-kubectl-v20@^2.1.1":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.1.tgz#d01c1efb867fb7f2cfd8c8b230b8eae16447e156"
- integrity sha512-U1ntiX8XiMRRRH5J1IdC+1t5CE89015cwyt5U63Cpk0GnMlN5+h9WsWMlKlPXZR4rdq/m806JRlBMRpBUB2Dhw==
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz#d8e20b5f5dc20128ea2000dc479ca3c7ddc27248"
+ integrity sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==
"@aws-cdk/asset-node-proxy-agent-v5@^2.0.77":
- version "2.0.87"
- resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.87.tgz#91dd83f059bc4fa0391349094ff532140f4e2d53"
- integrity sha512-e924ANUrtvv4drdR1bfYn1YigDUgfnUpJO7ygm/6t0VGjmmhXY2g43XT+NIKOrCpC0z2Aqk4o5px8fuPCfmQTw==
+ version "2.0.165"
+ resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.165.tgz#c169599d83beceea7e638082ef9833997f04c85d"
+ integrity sha512-bsyLQD/vqXQcc9RDmlM1XqiFNO/yewgVFXmkMcQkndJbmE/jgYkzewwYGrBlfL725hGLQipXq19+jwWwdsXQqg==
"@aws-crypto/crc32@3.0.0":
version "3.0.0"
@@ -624,11 +622,11 @@
tslib "^2.5.0"
"@aws-sdk/types@^3.222.0":
- version "3.267.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.267.0.tgz#fe543d1a1977c4e9e7ca6c32c837fcfd87b32441"
- integrity sha512-fICTbSeIfXlTHnciQgDt37R0kXoKxgh0a3prnLWVvTcmf7NFujdZmg5YTAZT3KJJ7SuKsIgnI8azBYioVY8BVQ==
+ version "3.357.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.357.0.tgz#8491da71a4291cc2661c26a75089e86532b6a3b5"
+ integrity sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==
dependencies:
- tslib "^2.3.1"
+ tslib "^2.5.0"
"@aws-sdk/url-parser@3.347.0":
version "3.347.0"
@@ -714,11 +712,11 @@
tslib "^2.5.0"
"@aws-sdk/util-locate-window@^3.0.0":
- version "3.208.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz#0f598fc238a1256e4bcb64d01459f03a922dd4c3"
- integrity sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==
+ version "3.310.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz#b071baf050301adee89051032bd4139bba32cc40"
+ integrity sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==
dependencies:
- tslib "^2.3.1"
+ tslib "^2.5.0"
"@aws-sdk/util-middleware@3.347.0":
version "3.347.0"
@@ -791,22 +789,48 @@
dependencies:
"@babel/highlight" "^7.22.5"
-"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5":
+"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5":
version "7.20.14"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8"
integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==
-"@babel/compat-data@^7.20.0", "@babel/compat-data@^7.21.4":
+"@babel/compat-data@^7.20.0":
version "7.21.4"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f"
integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==
-"@babel/compat-data@^7.22.5":
+"@babel/compat-data@^7.21.5", "@babel/compat-data@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255"
integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==
-"@babel/core@7.22.5", "@babel/core@^7.0.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.16.7", "@babel/core@^7.20.2", "@babel/core@^7.7.5":
+"@babel/compat-data@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.6.tgz#15606a20341de59ba02cd2fcc5086fcbe73bf544"
+ integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==
+
+"@babel/core@7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.6.tgz#aafafbe86e9a1679d876b99dc46382964ef72494"
+ integrity sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.22.6"
+ "@babel/helper-module-transforms" "^7.22.5"
+ "@babel/helpers" "^7.22.6"
+ "@babel/parser" "^7.22.6"
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.6"
+ "@babel/types" "^7.22.5"
+ "@nicolo-ribaudo/semver-v6" "^6.3.3"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.2"
+
+"@babel/core@^7.0.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.16.7", "@babel/core@^7.20.2", "@babel/core@^7.7.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89"
integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==
@@ -828,27 +852,27 @@
semver "^6.3.0"
"@babel/core@~7.21.0":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659"
- integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==
+ version "7.21.8"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4"
+ integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.21.4"
- "@babel/generator" "^7.21.4"
- "@babel/helper-compilation-targets" "^7.21.4"
- "@babel/helper-module-transforms" "^7.21.2"
- "@babel/helpers" "^7.21.0"
- "@babel/parser" "^7.21.4"
+ "@babel/generator" "^7.21.5"
+ "@babel/helper-compilation-targets" "^7.21.5"
+ "@babel/helper-module-transforms" "^7.21.5"
+ "@babel/helpers" "^7.21.5"
+ "@babel/parser" "^7.21.8"
"@babel/template" "^7.20.7"
- "@babel/traverse" "^7.21.4"
- "@babel/types" "^7.21.4"
+ "@babel/traverse" "^7.21.5"
+ "@babel/types" "^7.21.5"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.2"
semver "^6.3.0"
-"@babel/generator@^7.12.11", "@babel/generator@^7.21.4", "@babel/generator@^7.22.5", "@babel/generator@^7.7.2":
+"@babel/generator@^7.12.11", "@babel/generator@^7.21.5", "@babel/generator@^7.22.5", "@babel/generator@^7.7.2":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7"
integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==
@@ -859,37 +883,22 @@
jsesc "^2.5.1"
"@babel/generator@~7.21.1":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc"
- integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==
+ version "7.21.9"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.9.tgz#3a1b706e07d836e204aee0650e8ee878d3aaa241"
+ integrity sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==
dependencies:
- "@babel/types" "^7.21.4"
+ "@babel/types" "^7.21.5"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
-"@babel/helper-annotate-as-pure@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
- integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-annotate-as-pure@^7.22.5":
+"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb"
- integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==
- dependencies:
- "@babel/helper-explode-assignable-expression" "^7.18.6"
- "@babel/types" "^7.18.9"
-
"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878"
@@ -907,7 +916,7 @@
browserslist "^4.21.3"
semver "^6.3.0"
-"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4", "@babel/helper-compilation-targets@^7.22.5":
+"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5", "@babel/helper-compilation-targets@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02"
integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==
@@ -918,7 +927,18 @@
lru-cache "^5.1.1"
semver "^6.3.0"
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.12", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7":
+"@babel/helper-compilation-targets@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz#e30d61abe9480aa5a83232eb31c111be922d2e52"
+ integrity sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==
+ dependencies:
+ "@babel/compat-data" "^7.22.6"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@nicolo-ribaudo/semver-v6" "^6.3.3"
+ browserslist "^4.21.9"
+ lru-cache "^5.1.1"
+
+"@babel/helper-create-class-features-plugin@^7.18.6":
version "7.20.12"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819"
integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==
@@ -961,7 +981,7 @@
"@babel/helper-split-export-declaration" "^7.22.5"
semver "^6.3.0"
-"@babel/helper-create-regexp-features-plugin@7.20.5", "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5":
+"@babel/helper-create-regexp-features-plugin@7.20.5":
version "7.20.5"
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca"
integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==
@@ -969,7 +989,7 @@
"@babel/helper-annotate-as-pure" "^7.18.6"
regexpu-core "^5.2.1"
-"@babel/helper-create-regexp-features-plugin@^7.22.5":
+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4"
integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==
@@ -978,6 +998,15 @@
regexpu-core "^5.3.1"
semver "^6.3.0"
+"@babel/helper-create-regexp-features-plugin@^7.20.5":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz#87afd63012688ad792de430ceb3b6dc28e4e7a40"
+ integrity sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@nicolo-ribaudo/semver-v6" "^6.3.3"
+ regexpu-core "^5.3.1"
+
"@babel/helper-define-polyfill-provider@^0.3.3":
version "0.3.3"
resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a"
@@ -1002,40 +1031,12 @@
resolve "^1.14.2"
semver "^6.1.2"
-"@babel/helper-environment-visitor@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be"
- integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==
-
-"@babel/helper-environment-visitor@^7.22.5":
+"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5", "@babel/helper-environment-visitor@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98"
integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==
-"@babel/helper-explode-assignable-expression@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096"
- integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0":
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c"
- integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==
- dependencies:
- "@babel/template" "^7.18.10"
- "@babel/types" "^7.19.0"
-
-"@babel/helper-function-name@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
- integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
- dependencies:
- "@babel/template" "^7.20.7"
- "@babel/types" "^7.21.0"
-
-"@babel/helper-function-name@^7.22.5":
+"@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0", "@babel/helper-function-name@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be"
integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==
@@ -1043,56 +1044,28 @@
"@babel/template" "^7.22.5"
"@babel/types" "^7.22.5"
-"@babel/helper-hoist-variables@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
- integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-hoist-variables@^7.22.5":
+"@babel/helper-hoist-variables@^7.18.6", "@babel/helper-hoist-variables@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-member-expression-to-functions@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05"
- integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==
- dependencies:
- "@babel/types" "^7.20.7"
-
-"@babel/helper-member-expression-to-functions@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5"
- integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==
- dependencies:
- "@babel/types" "^7.21.0"
-
-"@babel/helper-member-expression-to-functions@^7.22.5":
+"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0", "@babel/helper-member-expression-to-functions@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2"
integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
- integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-module-imports@^7.22.5":
+"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c"
integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2", "@babel/helper-module-transforms@^7.22.5":
+"@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2", "@babel/helper-module-transforms@^7.21.5", "@babel/helper-module-transforms@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef"
integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==
@@ -1106,41 +1079,19 @@
"@babel/traverse" "^7.22.5"
"@babel/types" "^7.22.5"
-"@babel/helper-optimise-call-expression@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
- integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-optimise-call-expression@^7.22.5":
+"@babel/helper-optimise-call-expression@^7.18.6", "@babel/helper-optimise-call-expression@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e"
integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
- version "7.20.2"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629"
- integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==
-
-"@babel/helper-plugin-utils@^7.22.5":
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
-"@babel/helper-remap-async-to-generator@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519"
- integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-wrap-function" "^7.18.9"
- "@babel/types" "^7.18.9"
-
-"@babel/helper-remap-async-to-generator@^7.22.5":
+"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2"
integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==
@@ -1150,19 +1101,7 @@
"@babel/helper-wrap-function" "^7.22.5"
"@babel/types" "^7.22.5"
-"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331"
- integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==
- dependencies:
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-member-expression-to-functions" "^7.20.7"
- "@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/template" "^7.20.7"
- "@babel/traverse" "^7.20.7"
- "@babel/types" "^7.20.7"
-
-"@babel/helper-replace-supers@^7.22.5":
+"@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc"
integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==
@@ -1174,93 +1113,49 @@
"@babel/traverse" "^7.22.5"
"@babel/types" "^7.22.5"
-"@babel/helper-simple-access@^7.20.2":
- version "7.20.2"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9"
- integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==
- dependencies:
- "@babel/types" "^7.20.2"
-
-"@babel/helper-simple-access@^7.22.5":
+"@babel/helper-simple-access@^7.20.2", "@babel/helper-simple-access@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-skip-transparent-expression-wrappers@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684"
- integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==
- dependencies:
- "@babel/types" "^7.20.0"
-
-"@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
+"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847"
integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-split-export-declaration@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
- integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
- dependencies:
- "@babel/types" "^7.18.6"
-
-"@babel/helper-split-export-declaration@^7.22.5":
+"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08"
integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-string-parser@^7.19.4":
- version "7.19.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
- integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
+"@babel/helper-split-export-declaration@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+ integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+ dependencies:
+ "@babel/types" "^7.22.5"
-"@babel/helper-string-parser@^7.22.5":
+"@babel/helper-string-parser@^7.21.5", "@babel/helper-string-parser@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
-"@babel/helper-validator-identifier@^7.19.1":
- version "7.19.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
- integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
-
-"@babel/helper-validator-identifier@^7.22.5":
+"@babel/helper-validator-identifier@^7.19.1", "@babel/helper-validator-identifier@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
-"@babel/helper-validator-option@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8"
- integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==
-
-"@babel/helper-validator-option@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180"
- integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==
-
-"@babel/helper-validator-option@^7.22.5":
+"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0", "@babel/helper-validator-option@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac"
integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==
-"@babel/helper-wrap-function@^7.18.9":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3"
- integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==
- dependencies:
- "@babel/helper-function-name" "^7.19.0"
- "@babel/template" "^7.18.10"
- "@babel/traverse" "^7.20.5"
- "@babel/types" "^7.20.5"
-
"@babel/helper-wrap-function@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06"
@@ -1271,7 +1166,7 @@
"@babel/traverse" "^7.22.5"
"@babel/types" "^7.22.5"
-"@babel/helpers@^7.21.0", "@babel/helpers@^7.22.5":
+"@babel/helpers@^7.21.5", "@babel/helpers@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820"
integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==
@@ -1280,6 +1175,15 @@
"@babel/traverse" "^7.22.5"
"@babel/types" "^7.22.5"
+"@babel/helpers@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd"
+ integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==
+ dependencies:
+ "@babel/template" "^7.22.5"
+ "@babel/traverse" "^7.22.6"
+ "@babel/types" "^7.22.5"
+
"@babel/highlight@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
@@ -1289,31 +1193,29 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4", "@babel/parser@^7.22.5", "@babel/parser@^7.8.3":
+"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8", "@babel/parser@^7.22.5", "@babel/parser@^7.8.3":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea"
integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==
-"@babel/parser@~7.21.2":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17"
- integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==
+"@babel/parser@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.6.tgz#201f8b47be20c76c7c5743b9c16129760bf9a975"
+ integrity sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==
-"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2"
- integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+"@babel/parser@~7.21.2":
+ version "7.21.9"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.9.tgz#ab18ea3b85b4bc33ba98a8d4c2032c557d23cf14"
+ integrity sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==
-"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e"
integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7":
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1"
integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==
@@ -1331,7 +1233,7 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
"@babel/plugin-transform-optional-chaining" "^7.22.5"
-"@babel/plugin-proposal-async-generator-functions@^7.20.1", "@babel/plugin-proposal-async-generator-functions@^7.20.7":
+"@babel/plugin-proposal-async-generator-functions@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326"
integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==
@@ -1349,15 +1251,6 @@
"@babel/helper-create-class-features-plugin" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-proposal-class-static-block@^7.18.6":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz#92592e9029b13b15be0f7ce6a7aedc2879ca45a7"
- integrity sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.20.7"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-class-static-block" "^7.14.5"
-
"@babel/plugin-proposal-class-static-block@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d"
@@ -1391,7 +1284,7 @@
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-syntax-json-strings" "^7.8.3"
-"@babel/plugin-proposal-logical-assignment-operators@^7.18.9", "@babel/plugin-proposal-logical-assignment-operators@^7.20.7":
+"@babel/plugin-proposal-logical-assignment-operators@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83"
integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==
@@ -1415,7 +1308,7 @@
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-proposal-object-rest-spread@7.20.7", "@babel/plugin-proposal-object-rest-spread@^7.20.2", "@babel/plugin-proposal-object-rest-spread@^7.20.7":
+"@babel/plugin-proposal-object-rest-spread@7.20.7", "@babel/plugin-proposal-object-rest-spread@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a"
integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==
@@ -1434,7 +1327,7 @@
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-"@babel/plugin-proposal-optional-chaining@7.20.7", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7":
+"@babel/plugin-proposal-optional-chaining@7.20.7", "@babel/plugin-proposal-optional-chaining@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz#49f2b372519ab31728cc14115bb0998b15bfda55"
integrity sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==
@@ -1465,16 +1358,6 @@
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
-"@babel/plugin-proposal-private-property-in-object@^7.18.6":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135"
- integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-create-class-features-plugin" "^7.20.5"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-
"@babel/plugin-proposal-private-property-in-object@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc"
@@ -1535,21 +1418,14 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-syntax-flow@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1"
- integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-syntax-import-assertions@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4"
- integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==
+"@babel/plugin-syntax-flow@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859"
+ integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-syntax-import-assertions@^7.22.5":
+"@babel/plugin-syntax-import-assertions@^7.20.0", "@babel/plugin-syntax-import-assertions@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98"
integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==
@@ -1577,19 +1453,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
- integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-syntax-jsx@^7.21.4", "@babel/plugin-syntax-jsx@^7.7.2":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2"
- integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==
+"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.7.2":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918"
+ integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.10.4"
@@ -1647,19 +1516,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-typescript@^7.20.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7"
- integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.19.0"
-
-"@babel/plugin-syntax-typescript@^7.7.2":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8"
- integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==
+"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272"
+ integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
version "7.18.6"
@@ -1669,14 +1531,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.18.6"
"@babel/helper-plugin-utils" "^7.18.6"
-"@babel/plugin-transform-arrow-functions@^7.18.6", "@babel/plugin-transform-arrow-functions@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551"
- integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
-
-"@babel/plugin-transform-arrow-functions@^7.22.5":
+"@babel/plugin-transform-arrow-functions@^7.21.5", "@babel/plugin-transform-arrow-functions@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958"
integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==
@@ -1693,7 +1548,7 @@
"@babel/helper-remap-async-to-generator" "^7.22.5"
"@babel/plugin-syntax-async-generators" "^7.8.4"
-"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@^7.20.7":
+"@babel/plugin-transform-async-to-generator@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354"
integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==
@@ -1711,27 +1566,13 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-remap-async-to-generator" "^7.22.5"
-"@babel/plugin-transform-block-scoped-functions@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8"
- integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-block-scoped-functions@^7.22.5":
+"@babel/plugin-transform-block-scoped-functions@^7.18.6", "@babel/plugin-transform-block-scoped-functions@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024"
integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-block-scoping@^7.20.2":
- version "7.20.15"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz#3e1b2aa9cbbe1eb8d644c823141a9c5c2a22392d"
- integrity sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
-
"@babel/plugin-transform-block-scoping@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02"
@@ -1763,21 +1604,6 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-class-static-block" "^7.14.5"
-"@babel/plugin-transform-classes@^7.20.2":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073"
- integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-compilation-targets" "^7.20.7"
- "@babel/helper-environment-visitor" "^7.18.9"
- "@babel/helper-function-name" "^7.19.0"
- "@babel/helper-optimise-call-expression" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-replace-supers" "^7.20.7"
- "@babel/helper-split-export-declaration" "^7.18.6"
- globals "^11.1.0"
-
"@babel/plugin-transform-classes@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665"
@@ -1808,15 +1634,22 @@
"@babel/helper-split-export-declaration" "^7.22.5"
globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.18.9", "@babel/plugin-transform-computed-properties@^7.20.7":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa"
- integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==
+"@babel/plugin-transform-classes@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363"
+ integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/template" "^7.20.7"
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.22.6"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ globals "^11.1.0"
-"@babel/plugin-transform-computed-properties@^7.22.5":
+"@babel/plugin-transform-computed-properties@^7.21.5", "@babel/plugin-transform-computed-properties@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869"
integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==
@@ -1824,13 +1657,6 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/template" "^7.22.5"
-"@babel/plugin-transform-destructuring@^7.20.2":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454"
- integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
-
"@babel/plugin-transform-destructuring@^7.21.3":
version "7.21.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401"
@@ -1845,15 +1671,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8"
- integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==
- dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-dotall-regex@^7.22.5":
+"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165"
integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==
@@ -1861,14 +1679,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.22.5"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-duplicate-keys@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e"
- integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-duplicate-keys@^7.22.5":
+"@babel/plugin-transform-duplicate-keys@^7.18.9", "@babel/plugin-transform-duplicate-keys@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285"
integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==
@@ -1883,15 +1694,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
-"@babel/plugin-transform-exponentiation-operator@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd"
- integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==
- dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-exponentiation-operator@^7.22.5":
+"@babel/plugin-transform-exponentiation-operator@^7.18.6", "@babel/plugin-transform-exponentiation-operator@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a"
integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==
@@ -1907,45 +1710,22 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
-"@babel/plugin-transform-flow-strip-types@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz#6aeca0adcb81dc627c8986e770bfaa4d9812aff5"
- integrity sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==
- dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-flow" "^7.18.6"
-
-"@babel/plugin-transform-for-of@^7.18.8":
- version "7.18.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1"
- integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-for-of@^7.21.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e"
- integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==
+"@babel/plugin-transform-flow-strip-types@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2"
+ integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-flow" "^7.22.5"
-"@babel/plugin-transform-for-of@^7.22.5":
+"@babel/plugin-transform-for-of@^7.21.5", "@babel/plugin-transform-for-of@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f"
integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-function-name@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0"
- integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==
- dependencies:
- "@babel/helper-compilation-targets" "^7.18.9"
- "@babel/helper-function-name" "^7.18.9"
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-function-name@^7.22.5":
+"@babel/plugin-transform-function-name@^7.18.9", "@babel/plugin-transform-function-name@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143"
integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==
@@ -1962,14 +1742,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-json-strings" "^7.8.3"
-"@babel/plugin-transform-literals@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc"
- integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-literals@^7.22.5":
+"@babel/plugin-transform-literals@^7.18.9", "@babel/plugin-transform-literals@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920"
integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==
@@ -1984,21 +1757,14 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
-"@babel/plugin-transform-member-expression-literals@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e"
- integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-member-expression-literals@^7.22.5":
+"@babel/plugin-transform-member-expression-literals@^7.18.6", "@babel/plugin-transform-member-expression-literals@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def"
integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-modules-amd@^7.19.6", "@babel/plugin-transform-modules-amd@^7.20.11":
+"@babel/plugin-transform-modules-amd@^7.20.11":
version "7.20.11"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a"
integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==
@@ -2014,7 +1780,7 @@
"@babel/helper-module-transforms" "^7.22.5"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.21.2":
+"@babel/plugin-transform-modules-commonjs@^7.13.8":
version "7.21.2"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7"
integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==
@@ -2023,16 +1789,7 @@
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/helper-simple-access" "^7.20.2"
-"@babel/plugin-transform-modules-commonjs@^7.19.6":
- version "7.20.11"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607"
- integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==
- dependencies:
- "@babel/helper-module-transforms" "^7.20.11"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-simple-access" "^7.20.2"
-
-"@babel/plugin-transform-modules-commonjs@^7.22.5":
+"@babel/plugin-transform-modules-commonjs@^7.21.5", "@babel/plugin-transform-modules-commonjs@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa"
integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==
@@ -2041,7 +1798,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-simple-access" "^7.22.5"
-"@babel/plugin-transform-modules-systemjs@^7.19.6", "@babel/plugin-transform-modules-systemjs@^7.20.11":
+"@babel/plugin-transform-modules-systemjs@^7.20.11":
version "7.20.11"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e"
integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==
@@ -2061,15 +1818,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-validator-identifier" "^7.22.5"
-"@babel/plugin-transform-modules-umd@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9"
- integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==
- dependencies:
- "@babel/helper-module-transforms" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-modules-umd@^7.22.5":
+"@babel/plugin-transform-modules-umd@^7.18.6", "@babel/plugin-transform-modules-umd@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98"
integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==
@@ -2077,7 +1826,7 @@
"@babel/helper-module-transforms" "^7.22.5"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.20.5":
+"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5":
version "7.20.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8"
integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==
@@ -2093,14 +1842,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.22.5"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-new-target@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8"
- integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-new-target@^7.22.5":
+"@babel/plugin-transform-new-target@^7.18.6", "@babel/plugin-transform-new-target@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d"
integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==
@@ -2134,15 +1876,7 @@
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
"@babel/plugin-transform-parameters" "^7.22.5"
-"@babel/plugin-transform-object-super@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c"
- integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
- "@babel/helper-replace-supers" "^7.18.6"
-
-"@babel/plugin-transform-object-super@^7.22.5":
+"@babel/plugin-transform-object-super@^7.18.6", "@babel/plugin-transform-object-super@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c"
integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==
@@ -2167,7 +1901,16 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
-"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7":
+"@babel/plugin-transform-optional-chaining@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564"
+ integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-transform-parameters@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f"
integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==
@@ -2206,35 +1949,28 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
-"@babel/plugin-transform-property-literals@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3"
- integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-property-literals@^7.22.5":
+"@babel/plugin-transform-property-literals@^7.18.6", "@babel/plugin-transform-property-literals@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766"
integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-react-display-name@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415"
- integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==
+"@babel/plugin-transform-react-display-name@^7.18.6", "@babel/plugin-transform-react-display-name@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b"
+ integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-react-jsx-development@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5"
- integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==
+"@babel/plugin-transform-react-jsx-development@^7.18.6", "@babel/plugin-transform-react-jsx-development@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87"
+ integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==
dependencies:
- "@babel/plugin-transform-react-jsx" "^7.18.6"
+ "@babel/plugin-transform-react-jsx" "^7.22.5"
-"@babel/plugin-transform-react-jsx@7.20.13", "@babel/plugin-transform-react-jsx@^7.18.6":
+"@babel/plugin-transform-react-jsx@7.20.13":
version "7.20.13"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz#f950f0b0c36377503d29a712f16287cedf886cbb"
integrity sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==
@@ -2245,34 +1981,26 @@
"@babel/plugin-syntax-jsx" "^7.18.6"
"@babel/types" "^7.20.7"
-"@babel/plugin-transform-react-jsx@^7.19.0":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2"
- integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-module-imports" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-jsx" "^7.18.6"
- "@babel/types" "^7.21.0"
-
-"@babel/plugin-transform-react-pure-annotations@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844"
- integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==
+"@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.19.0", "@babel/plugin-transform-react-jsx@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416"
+ integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-module-imports" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-jsx" "^7.22.5"
+ "@babel/types" "^7.22.5"
-"@babel/plugin-transform-regenerator@^7.18.6", "@babel/plugin-transform-regenerator@^7.20.5":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d"
- integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==
+"@babel/plugin-transform-react-pure-annotations@^7.18.6", "@babel/plugin-transform-react-pure-annotations@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0"
+ integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- regenerator-transform "^0.15.1"
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-regenerator@^7.22.5":
+"@babel/plugin-transform-regenerator@^7.21.5", "@babel/plugin-transform-regenerator@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa"
integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==
@@ -2280,14 +2008,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
regenerator-transform "^0.15.1"
-"@babel/plugin-transform-reserved-words@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a"
- integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-reserved-words@^7.22.5":
+"@babel/plugin-transform-reserved-words@^7.18.6", "@babel/plugin-transform-reserved-words@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb"
integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==
@@ -2318,21 +2039,14 @@
babel-plugin-polyfill-regenerator "^0.5.0"
semver "^6.3.0"
-"@babel/plugin-transform-shorthand-properties@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9"
- integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-shorthand-properties@^7.22.5":
+"@babel/plugin-transform-shorthand-properties@^7.18.6", "@babel/plugin-transform-shorthand-properties@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624"
integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-spread@^7.19.0", "@babel/plugin-transform-spread@^7.20.7":
+"@babel/plugin-transform-spread@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e"
integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==
@@ -2348,75 +2062,38 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
-"@babel/plugin-transform-sticky-regex@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc"
- integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-sticky-regex@^7.22.5":
+"@babel/plugin-transform-sticky-regex@^7.18.6", "@babel/plugin-transform-sticky-regex@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa"
integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-template-literals@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e"
- integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-template-literals@^7.22.5":
+"@babel/plugin-transform-template-literals@^7.18.9", "@babel/plugin-transform-template-literals@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff"
integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-typeof-symbol@^7.18.9":
- version "7.18.9"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0"
- integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
-
-"@babel/plugin-transform-typeof-symbol@^7.22.5":
+"@babel/plugin-transform-typeof-symbol@^7.18.9", "@babel/plugin-transform-typeof-symbol@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34"
integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-typescript@^7.18.6":
- version "7.20.13"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz#e3581b356b8694f6ff450211fe6774eaff8d25ab"
- integrity sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==
- dependencies:
- "@babel/helper-create-class-features-plugin" "^7.20.12"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-typescript" "^7.20.0"
-
-"@babel/plugin-transform-typescript@^7.21.3":
- version "7.21.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b"
- integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.18.6"
- "@babel/helper-create-class-features-plugin" "^7.21.0"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/plugin-syntax-typescript" "^7.20.0"
-
-"@babel/plugin-transform-unicode-escapes@^7.18.10":
- version "7.18.10"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246"
- integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==
+"@babel/plugin-transform-typescript@^7.18.6", "@babel/plugin-transform-typescript@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d"
+ integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==
dependencies:
- "@babel/helper-plugin-utils" "^7.18.9"
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-create-class-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-typescript" "^7.22.5"
-"@babel/plugin-transform-unicode-escapes@^7.22.5":
+"@babel/plugin-transform-unicode-escapes@^7.21.5", "@babel/plugin-transform-unicode-escapes@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c"
integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==
@@ -2431,15 +2108,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.22.5"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-unicode-regex@^7.18.6":
- version "7.18.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca"
- integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==
- dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.18.6"
- "@babel/helper-plugin-utils" "^7.18.6"
-
-"@babel/plugin-transform-unicode-regex@^7.22.5":
+"@babel/plugin-transform-unicode-regex@^7.18.6", "@babel/plugin-transform-unicode-regex@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183"
integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==
@@ -2455,38 +2124,26 @@
"@babel/helper-create-regexp-features-plugin" "^7.22.5"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/preset-env@7.20.2":
- version "7.20.2"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506"
- integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==
+"@babel/preset-env@7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.6.tgz#41bade05f2f8782d693b52d707ede7cef9da3b38"
+ integrity sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==
dependencies:
- "@babel/compat-data" "^7.20.1"
- "@babel/helper-compilation-targets" "^7.20.0"
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-validator-option" "^7.18.6"
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9"
- "@babel/plugin-proposal-async-generator-functions" "^7.20.1"
- "@babel/plugin-proposal-class-properties" "^7.18.6"
- "@babel/plugin-proposal-class-static-block" "^7.18.6"
- "@babel/plugin-proposal-dynamic-import" "^7.18.6"
- "@babel/plugin-proposal-export-namespace-from" "^7.18.9"
- "@babel/plugin-proposal-json-strings" "^7.18.6"
- "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9"
- "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6"
- "@babel/plugin-proposal-numeric-separator" "^7.18.6"
- "@babel/plugin-proposal-object-rest-spread" "^7.20.2"
- "@babel/plugin-proposal-optional-catch-binding" "^7.18.6"
- "@babel/plugin-proposal-optional-chaining" "^7.18.9"
- "@babel/plugin-proposal-private-methods" "^7.18.6"
- "@babel/plugin-proposal-private-property-in-object" "^7.18.6"
- "@babel/plugin-proposal-unicode-property-regex" "^7.18.6"
+ "@babel/compat-data" "^7.22.6"
+ "@babel/helper-compilation-targets" "^7.22.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5"
+ "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
"@babel/plugin-syntax-async-generators" "^7.8.4"
"@babel/plugin-syntax-class-properties" "^7.12.13"
"@babel/plugin-syntax-class-static-block" "^7.14.5"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
- "@babel/plugin-syntax-import-assertions" "^7.20.0"
+ "@babel/plugin-syntax-import-assertions" "^7.22.5"
+ "@babel/plugin-syntax-import-attributes" "^7.22.5"
+ "@babel/plugin-syntax-import-meta" "^7.10.4"
"@babel/plugin-syntax-json-strings" "^7.8.3"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
@@ -2496,47 +2153,64 @@
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
"@babel/plugin-syntax-top-level-await" "^7.14.5"
- "@babel/plugin-transform-arrow-functions" "^7.18.6"
- "@babel/plugin-transform-async-to-generator" "^7.18.6"
- "@babel/plugin-transform-block-scoped-functions" "^7.18.6"
- "@babel/plugin-transform-block-scoping" "^7.20.2"
- "@babel/plugin-transform-classes" "^7.20.2"
- "@babel/plugin-transform-computed-properties" "^7.18.9"
- "@babel/plugin-transform-destructuring" "^7.20.2"
- "@babel/plugin-transform-dotall-regex" "^7.18.6"
- "@babel/plugin-transform-duplicate-keys" "^7.18.9"
- "@babel/plugin-transform-exponentiation-operator" "^7.18.6"
- "@babel/plugin-transform-for-of" "^7.18.8"
- "@babel/plugin-transform-function-name" "^7.18.9"
- "@babel/plugin-transform-literals" "^7.18.9"
- "@babel/plugin-transform-member-expression-literals" "^7.18.6"
- "@babel/plugin-transform-modules-amd" "^7.19.6"
- "@babel/plugin-transform-modules-commonjs" "^7.19.6"
- "@babel/plugin-transform-modules-systemjs" "^7.19.6"
- "@babel/plugin-transform-modules-umd" "^7.18.6"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1"
- "@babel/plugin-transform-new-target" "^7.18.6"
- "@babel/plugin-transform-object-super" "^7.18.6"
- "@babel/plugin-transform-parameters" "^7.20.1"
- "@babel/plugin-transform-property-literals" "^7.18.6"
- "@babel/plugin-transform-regenerator" "^7.18.6"
- "@babel/plugin-transform-reserved-words" "^7.18.6"
- "@babel/plugin-transform-shorthand-properties" "^7.18.6"
- "@babel/plugin-transform-spread" "^7.19.0"
- "@babel/plugin-transform-sticky-regex" "^7.18.6"
- "@babel/plugin-transform-template-literals" "^7.18.9"
- "@babel/plugin-transform-typeof-symbol" "^7.18.9"
- "@babel/plugin-transform-unicode-escapes" "^7.18.10"
- "@babel/plugin-transform-unicode-regex" "^7.18.6"
+ "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
+ "@babel/plugin-transform-arrow-functions" "^7.22.5"
+ "@babel/plugin-transform-async-generator-functions" "^7.22.5"
+ "@babel/plugin-transform-async-to-generator" "^7.22.5"
+ "@babel/plugin-transform-block-scoped-functions" "^7.22.5"
+ "@babel/plugin-transform-block-scoping" "^7.22.5"
+ "@babel/plugin-transform-class-properties" "^7.22.5"
+ "@babel/plugin-transform-class-static-block" "^7.22.5"
+ "@babel/plugin-transform-classes" "^7.22.6"
+ "@babel/plugin-transform-computed-properties" "^7.22.5"
+ "@babel/plugin-transform-destructuring" "^7.22.5"
+ "@babel/plugin-transform-dotall-regex" "^7.22.5"
+ "@babel/plugin-transform-duplicate-keys" "^7.22.5"
+ "@babel/plugin-transform-dynamic-import" "^7.22.5"
+ "@babel/plugin-transform-exponentiation-operator" "^7.22.5"
+ "@babel/plugin-transform-export-namespace-from" "^7.22.5"
+ "@babel/plugin-transform-for-of" "^7.22.5"
+ "@babel/plugin-transform-function-name" "^7.22.5"
+ "@babel/plugin-transform-json-strings" "^7.22.5"
+ "@babel/plugin-transform-literals" "^7.22.5"
+ "@babel/plugin-transform-logical-assignment-operators" "^7.22.5"
+ "@babel/plugin-transform-member-expression-literals" "^7.22.5"
+ "@babel/plugin-transform-modules-amd" "^7.22.5"
+ "@babel/plugin-transform-modules-commonjs" "^7.22.5"
+ "@babel/plugin-transform-modules-systemjs" "^7.22.5"
+ "@babel/plugin-transform-modules-umd" "^7.22.5"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
+ "@babel/plugin-transform-new-target" "^7.22.5"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5"
+ "@babel/plugin-transform-numeric-separator" "^7.22.5"
+ "@babel/plugin-transform-object-rest-spread" "^7.22.5"
+ "@babel/plugin-transform-object-super" "^7.22.5"
+ "@babel/plugin-transform-optional-catch-binding" "^7.22.5"
+ "@babel/plugin-transform-optional-chaining" "^7.22.6"
+ "@babel/plugin-transform-parameters" "^7.22.5"
+ "@babel/plugin-transform-private-methods" "^7.22.5"
+ "@babel/plugin-transform-private-property-in-object" "^7.22.5"
+ "@babel/plugin-transform-property-literals" "^7.22.5"
+ "@babel/plugin-transform-regenerator" "^7.22.5"
+ "@babel/plugin-transform-reserved-words" "^7.22.5"
+ "@babel/plugin-transform-shorthand-properties" "^7.22.5"
+ "@babel/plugin-transform-spread" "^7.22.5"
+ "@babel/plugin-transform-sticky-regex" "^7.22.5"
+ "@babel/plugin-transform-template-literals" "^7.22.5"
+ "@babel/plugin-transform-typeof-symbol" "^7.22.5"
+ "@babel/plugin-transform-unicode-escapes" "^7.22.5"
+ "@babel/plugin-transform-unicode-property-regex" "^7.22.5"
+ "@babel/plugin-transform-unicode-regex" "^7.22.5"
+ "@babel/plugin-transform-unicode-sets-regex" "^7.22.5"
"@babel/preset-modules" "^0.1.5"
- "@babel/types" "^7.20.2"
- babel-plugin-polyfill-corejs2 "^0.3.3"
- babel-plugin-polyfill-corejs3 "^0.6.0"
- babel-plugin-polyfill-regenerator "^0.4.1"
- core-js-compat "^3.25.1"
- semver "^6.3.0"
+ "@babel/types" "^7.22.5"
+ "@nicolo-ribaudo/semver-v6" "^6.3.3"
+ babel-plugin-polyfill-corejs2 "^0.4.3"
+ babel-plugin-polyfill-corejs3 "^0.8.1"
+ babel-plugin-polyfill-regenerator "^0.5.0"
+ core-js-compat "^3.31.0"
-"@babel/preset-env@^7.16.8":
+"@babel/preset-env@^7.16.8", "@babel/preset-env@^7.20.2":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e"
integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==
@@ -2622,14 +2296,14 @@
core-js-compat "^3.30.2"
semver "^6.3.0"
-"@babel/preset-env@^7.20.2", "@babel/preset-env@~7.21.0":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58"
- integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==
+"@babel/preset-env@~7.21.0":
+ version "7.21.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb"
+ integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==
dependencies:
- "@babel/compat-data" "^7.21.4"
- "@babel/helper-compilation-targets" "^7.21.4"
- "@babel/helper-plugin-utils" "^7.20.2"
+ "@babel/compat-data" "^7.21.5"
+ "@babel/helper-compilation-targets" "^7.21.5"
+ "@babel/helper-plugin-utils" "^7.21.5"
"@babel/helper-validator-option" "^7.21.0"
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6"
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7"
@@ -2654,6 +2328,7 @@
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
"@babel/plugin-syntax-import-assertions" "^7.20.0"
+ "@babel/plugin-syntax-import-meta" "^7.10.4"
"@babel/plugin-syntax-json-strings" "^7.8.3"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
@@ -2663,22 +2338,22 @@
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
"@babel/plugin-syntax-top-level-await" "^7.14.5"
- "@babel/plugin-transform-arrow-functions" "^7.20.7"
+ "@babel/plugin-transform-arrow-functions" "^7.21.5"
"@babel/plugin-transform-async-to-generator" "^7.20.7"
"@babel/plugin-transform-block-scoped-functions" "^7.18.6"
"@babel/plugin-transform-block-scoping" "^7.21.0"
"@babel/plugin-transform-classes" "^7.21.0"
- "@babel/plugin-transform-computed-properties" "^7.20.7"
+ "@babel/plugin-transform-computed-properties" "^7.21.5"
"@babel/plugin-transform-destructuring" "^7.21.3"
"@babel/plugin-transform-dotall-regex" "^7.18.6"
"@babel/plugin-transform-duplicate-keys" "^7.18.9"
"@babel/plugin-transform-exponentiation-operator" "^7.18.6"
- "@babel/plugin-transform-for-of" "^7.21.0"
+ "@babel/plugin-transform-for-of" "^7.21.5"
"@babel/plugin-transform-function-name" "^7.18.9"
"@babel/plugin-transform-literals" "^7.18.9"
"@babel/plugin-transform-member-expression-literals" "^7.18.6"
"@babel/plugin-transform-modules-amd" "^7.20.11"
- "@babel/plugin-transform-modules-commonjs" "^7.21.2"
+ "@babel/plugin-transform-modules-commonjs" "^7.21.5"
"@babel/plugin-transform-modules-systemjs" "^7.20.11"
"@babel/plugin-transform-modules-umd" "^7.18.6"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5"
@@ -2686,17 +2361,17 @@
"@babel/plugin-transform-object-super" "^7.18.6"
"@babel/plugin-transform-parameters" "^7.21.3"
"@babel/plugin-transform-property-literals" "^7.18.6"
- "@babel/plugin-transform-regenerator" "^7.20.5"
+ "@babel/plugin-transform-regenerator" "^7.21.5"
"@babel/plugin-transform-reserved-words" "^7.18.6"
"@babel/plugin-transform-shorthand-properties" "^7.18.6"
"@babel/plugin-transform-spread" "^7.20.7"
"@babel/plugin-transform-sticky-regex" "^7.18.6"
"@babel/plugin-transform-template-literals" "^7.18.9"
"@babel/plugin-transform-typeof-symbol" "^7.18.9"
- "@babel/plugin-transform-unicode-escapes" "^7.18.10"
+ "@babel/plugin-transform-unicode-escapes" "^7.21.5"
"@babel/plugin-transform-unicode-regex" "^7.18.6"
"@babel/preset-modules" "^0.1.5"
- "@babel/types" "^7.21.4"
+ "@babel/types" "^7.21.5"
babel-plugin-polyfill-corejs2 "^0.3.3"
babel-plugin-polyfill-corejs3 "^0.6.0"
babel-plugin-polyfill-regenerator "^0.4.1"
@@ -2704,13 +2379,13 @@
semver "^6.3.0"
"@babel/preset-flow@^7.13.13", "@babel/preset-flow@^7.18.6":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.21.4.tgz#a5de2a1cafa61f0e0b3af9b30ff0295d38d3608f"
- integrity sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.5.tgz#876f24ab6b38bd79703a93f32020ca2162312784"
+ integrity sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-validator-option" "^7.21.0"
- "@babel/plugin-transform-flow-strip-types" "^7.21.0"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@babel/plugin-transform-flow-strip-types" "^7.22.5"
"@babel/preset-modules@^0.1.5":
version "0.1.5"
@@ -2723,7 +2398,7 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/preset-react@7.18.6", "@babel/preset-react@^7.18.6":
+"@babel/preset-react@7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d"
integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==
@@ -2735,6 +2410,18 @@
"@babel/plugin-transform-react-jsx-development" "^7.18.6"
"@babel/plugin-transform-react-pure-annotations" "^7.18.6"
+"@babel/preset-react@^7.18.6":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6"
+ integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@babel/plugin-transform-react-display-name" "^7.22.5"
+ "@babel/plugin-transform-react-jsx" "^7.22.5"
+ "@babel/plugin-transform-react-jsx-development" "^7.22.5"
+ "@babel/plugin-transform-react-pure-annotations" "^7.22.5"
+
"@babel/preset-typescript@7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399"
@@ -2745,20 +2432,20 @@
"@babel/plugin-transform-typescript" "^7.18.6"
"@babel/preset-typescript@^7.13.0":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529"
- integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8"
+ integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.20.2"
- "@babel/helper-validator-option" "^7.21.0"
- "@babel/plugin-syntax-jsx" "^7.21.4"
- "@babel/plugin-transform-modules-commonjs" "^7.21.2"
- "@babel/plugin-transform-typescript" "^7.21.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-option" "^7.22.5"
+ "@babel/plugin-syntax-jsx" "^7.22.5"
+ "@babel/plugin-transform-modules-commonjs" "^7.22.5"
+ "@babel/plugin-transform-typescript" "^7.22.5"
"@babel/register@^7.13.16":
- version "7.21.0"
- resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.21.0.tgz#c97bf56c2472e063774f31d344c592ebdcefa132"
- integrity sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.5.tgz#e4d8d0f615ea3233a27b5c6ada6750ee59559939"
+ integrity sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==
dependencies:
clone-deep "^4.0.1"
find-cache-dir "^2.0.0"
@@ -2771,21 +2458,21 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-"@babel/runtime@7.20.13", "@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
+"@babel/runtime@7.20.13":
version "7.20.13"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b"
integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==
dependencies:
regenerator-runtime "^0.13.11"
-"@babel/runtime@^7.18.9", "@babel/runtime@^7.20.1", "@babel/runtime@^7.5.5":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.1", "@babel/runtime@^7.20.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec"
integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==
dependencies:
regenerator-runtime "^0.13.11"
-"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.22.5", "@babel/template@^7.3.3":
+"@babel/template@^7.20.7", "@babel/template@^7.22.5", "@babel/template@^7.3.3":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==
@@ -2794,7 +2481,7 @@
"@babel/parser" "^7.22.5"
"@babel/types" "^7.22.5"
-"@babel/traverse@^7.1.6", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.4", "@babel/traverse@^7.22.5", "@babel/traverse@^7.7.2", "@babel/traverse@^7.8.3":
+"@babel/traverse@^7.1.6", "@babel/traverse@^7.21.5", "@babel/traverse@^7.22.5", "@babel/traverse@^7.7.2", "@babel/traverse@^7.8.3":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1"
integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==
@@ -2810,23 +2497,39 @@
debug "^4.1.0"
globals "^11.1.0"
+"@babel/traverse@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.6.tgz#8f2f83a5c588251584914debeee38f35f661a300"
+ integrity sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==
+ dependencies:
+ "@babel/code-frame" "^7.22.5"
+ "@babel/generator" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.5"
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/parser" "^7.22.6"
+ "@babel/types" "^7.22.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
"@babel/traverse@~7.21.2":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36"
- integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==
+ version "7.21.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133"
+ integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==
dependencies:
"@babel/code-frame" "^7.21.4"
- "@babel/generator" "^7.21.4"
- "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/generator" "^7.21.5"
+ "@babel/helper-environment-visitor" "^7.21.5"
"@babel/helper-function-name" "^7.21.0"
"@babel/helper-hoist-variables" "^7.18.6"
"@babel/helper-split-export-declaration" "^7.18.6"
- "@babel/parser" "^7.21.4"
- "@babel/types" "^7.21.4"
+ "@babel/parser" "^7.21.5"
+ "@babel/types" "^7.21.5"
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.22.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.21.5", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe"
integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==
@@ -2836,11 +2539,11 @@
to-fast-properties "^2.0.0"
"@babel/types@~7.21.2":
- version "7.21.4"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4"
- integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==
+ version "7.21.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6"
+ integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==
dependencies:
- "@babel/helper-string-parser" "^7.19.4"
+ "@babel/helper-string-parser" "^7.21.5"
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
@@ -2864,13 +2567,13 @@
resolved "https://registry.yarnpkg.com/@braze/web-sdk-core/-/web-sdk-core-3.5.1.tgz#a239f2bd430266accba9e9a3393b03ac22f9abdf"
integrity sha512-pHnlKaHz8UCrlGkAF6aoBptFUTzeZeL7OpHqKGx7uZC67ZfVvk1L11SJkxOw2CLxUQm9YxigSQXqtpUiImXDng==
-"@changesets/apply-release-plan@^6.1.3":
- version "6.1.3"
- resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-6.1.3.tgz#3bcc0bd57ba00d50d20df7d0141f1a9b2134eaf7"
- integrity sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==
+"@changesets/apply-release-plan@^6.1.4":
+ version "6.1.4"
+ resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-6.1.4.tgz#09293256090737ecd2f683842d6d732034a5e3c8"
+ integrity sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==
dependencies:
"@babel/runtime" "^7.20.1"
- "@changesets/config" "^2.3.0"
+ "@changesets/config" "^2.3.1"
"@changesets/get-version-range-type" "^0.3.2"
"@changesets/git" "^2.0.0"
"@changesets/types" "^5.2.1"
@@ -2881,19 +2584,19 @@
outdent "^0.5.0"
prettier "^2.7.1"
resolve-from "^5.0.0"
- semver "^5.4.1"
+ semver "^7.5.3"
-"@changesets/assemble-release-plan@^5.2.3":
- version "5.2.3"
- resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.3.tgz#5ce6191c6e193d40b566a7b0e01690cfb106f4db"
- integrity sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==
+"@changesets/assemble-release-plan@^5.2.4":
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.4.tgz#d42fd63f4297a2e630e8e0a49f07d4ff5f5ef7bc"
+ integrity sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==
dependencies:
"@babel/runtime" "^7.20.1"
"@changesets/errors" "^0.1.4"
- "@changesets/get-dependents-graph" "^1.3.5"
+ "@changesets/get-dependents-graph" "^1.3.6"
"@changesets/types" "^5.2.1"
"@manypkg/get-packages" "^1.1.3"
- semver "^5.4.1"
+ semver "^7.5.3"
"@changesets/changelog-git@^0.1.14":
version "0.1.14"
@@ -2903,18 +2606,18 @@
"@changesets/types" "^5.2.1"
"@changesets/cli@^2.26.1":
- version "2.26.1"
- resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.26.1.tgz#2d10858d7d32314a524e383111c96d831eb0402f"
- integrity sha512-XnTa+b51vt057fyAudvDKGB0Sh72xutQZNAdXkCqPBKO2zvs2yYZx5hFZj1u9cbtpwM6Sxtcr02/FQJfZOzemQ==
+ version "2.26.2"
+ resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.26.2.tgz#8914dd6ef3ea425a7d5935f6c35a8b7ccde54e45"
+ integrity sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==
dependencies:
"@babel/runtime" "^7.20.1"
- "@changesets/apply-release-plan" "^6.1.3"
- "@changesets/assemble-release-plan" "^5.2.3"
+ "@changesets/apply-release-plan" "^6.1.4"
+ "@changesets/assemble-release-plan" "^5.2.4"
"@changesets/changelog-git" "^0.1.14"
- "@changesets/config" "^2.3.0"
+ "@changesets/config" "^2.3.1"
"@changesets/errors" "^0.1.4"
- "@changesets/get-dependents-graph" "^1.3.5"
- "@changesets/get-release-plan" "^3.0.16"
+ "@changesets/get-dependents-graph" "^1.3.6"
+ "@changesets/get-release-plan" "^3.0.17"
"@changesets/git" "^2.0.0"
"@changesets/logger" "^0.0.5"
"@changesets/pre" "^1.0.14"
@@ -2923,7 +2626,7 @@
"@changesets/write" "^0.2.3"
"@manypkg/get-packages" "^1.1.3"
"@types/is-ci" "^3.0.0"
- "@types/semver" "^6.0.0"
+ "@types/semver" "^7.5.0"
ansi-colors "^4.1.3"
chalk "^2.1.0"
enquirer "^2.3.0"
@@ -2936,18 +2639,18 @@
p-limit "^2.2.0"
preferred-pm "^3.0.0"
resolve-from "^5.0.0"
- semver "^5.4.1"
+ semver "^7.5.3"
spawndamnit "^2.0.0"
term-size "^2.1.0"
tty-table "^4.1.5"
-"@changesets/config@^2.3.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@changesets/config/-/config-2.3.0.tgz#bff074d6492fa772cee139f9a04efa4cd56445bb"
- integrity sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==
+"@changesets/config@^2.3.1":
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/@changesets/config/-/config-2.3.1.tgz#3d4a1dc866c3623375180b30f69fccdf0e3efebf"
+ integrity sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==
dependencies:
"@changesets/errors" "^0.1.4"
- "@changesets/get-dependents-graph" "^1.3.5"
+ "@changesets/get-dependents-graph" "^1.3.6"
"@changesets/logger" "^0.0.5"
"@changesets/types" "^5.2.1"
"@manypkg/get-packages" "^1.1.3"
@@ -2961,25 +2664,25 @@
dependencies:
extendable-error "^0.1.5"
-"@changesets/get-dependents-graph@^1.3.5":
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.5.tgz#f94c6672d2f9a87aa35512eea74550585ba41c21"
- integrity sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==
+"@changesets/get-dependents-graph@^1.3.6":
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.6.tgz#5e19e7b0bfbc7dc38e1986eaaa7016ff377ed888"
+ integrity sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==
dependencies:
"@changesets/types" "^5.2.1"
"@manypkg/get-packages" "^1.1.3"
chalk "^2.1.0"
fs-extra "^7.0.1"
- semver "^5.4.1"
+ semver "^7.5.3"
-"@changesets/get-release-plan@^3.0.16":
- version "3.0.16"
- resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-3.0.16.tgz#5d9cfc4ffda02c496ef0fde407210de8e3a0fb19"
- integrity sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==
+"@changesets/get-release-plan@^3.0.17":
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-3.0.17.tgz#8aabced2795ffeae864696b60ee3031f8a94c5f3"
+ integrity sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==
dependencies:
"@babel/runtime" "^7.20.1"
- "@changesets/assemble-release-plan" "^5.2.3"
- "@changesets/config" "^2.3.0"
+ "@changesets/assemble-release-plan" "^5.2.4"
+ "@changesets/config" "^2.3.1"
"@changesets/pre" "^1.0.14"
"@changesets/read" "^0.5.9"
"@changesets/types" "^5.2.1"
@@ -3085,9 +2788,9 @@
"@jridgewell/trace-mapping" "0.3.9"
"@csstools/selector-specificity@^2.0.2":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz#c9c61d9fe5ca5ac664e1153bb0aa0eba1c6d6308"
- integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016"
+ integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==
"@cypress/request@^2.88.10":
version "2.88.11"
@@ -3135,329 +2838,340 @@
debug "^3.1.0"
lodash.once "^4.1.1"
-"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@^0.5.3", "@discoveryjs/json-ext@^0.5.7":
+"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@^0.5.3":
version "0.5.7"
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
-"@emotion/babel-plugin@11.10.5", "@emotion/babel-plugin@^11.10.5":
- version "11.10.5"
- resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c"
- integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==
+"@emotion/babel-plugin@11.11.0", "@emotion/babel-plugin@^11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c"
+ integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==
dependencies:
"@babel/helper-module-imports" "^7.16.7"
- "@babel/plugin-syntax-jsx" "^7.17.12"
"@babel/runtime" "^7.18.3"
- "@emotion/hash" "^0.9.0"
- "@emotion/memoize" "^0.8.0"
- "@emotion/serialize" "^1.1.1"
+ "@emotion/hash" "^0.9.1"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/serialize" "^1.1.2"
babel-plugin-macros "^3.1.0"
convert-source-map "^1.5.0"
escape-string-regexp "^4.0.0"
find-root "^1.1.0"
source-map "^0.5.7"
- stylis "4.1.3"
+ stylis "4.2.0"
-"@emotion/cache@11.10.5", "@emotion/cache@^11.10.5":
- version "11.10.5"
- resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12"
- integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==
+"@emotion/cache@11.11.0", "@emotion/cache@^11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff"
+ integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==
dependencies:
- "@emotion/memoize" "^0.8.0"
- "@emotion/sheet" "^1.2.1"
- "@emotion/utils" "^1.2.0"
- "@emotion/weak-memoize" "^0.3.0"
- stylis "4.1.3"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/sheet" "^1.2.2"
+ "@emotion/utils" "^1.2.1"
+ "@emotion/weak-memoize" "^0.3.1"
+ stylis "4.2.0"
-"@emotion/hash@^0.9.0":
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7"
- integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==
+"@emotion/hash@^0.9.1":
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43"
+ integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==
-"@emotion/memoize@^0.8.0":
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f"
- integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==
+"@emotion/memoize@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17"
+ integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
-"@emotion/react@11.10.5":
- version "11.10.5"
- resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d"
- integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==
+"@emotion/react@11.11.1":
+ version "11.11.1"
+ resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157"
+ integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==
dependencies:
"@babel/runtime" "^7.18.3"
- "@emotion/babel-plugin" "^11.10.5"
- "@emotion/cache" "^11.10.5"
- "@emotion/serialize" "^1.1.1"
- "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
- "@emotion/utils" "^1.2.0"
- "@emotion/weak-memoize" "^0.3.0"
+ "@emotion/babel-plugin" "^11.11.0"
+ "@emotion/cache" "^11.11.0"
+ "@emotion/serialize" "^1.1.2"
+ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
+ "@emotion/utils" "^1.2.1"
+ "@emotion/weak-memoize" "^0.3.1"
hoist-non-react-statics "^3.3.1"
-"@emotion/serialize@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0"
- integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==
+"@emotion/serialize@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51"
+ integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==
dependencies:
- "@emotion/hash" "^0.9.0"
- "@emotion/memoize" "^0.8.0"
- "@emotion/unitless" "^0.8.0"
- "@emotion/utils" "^1.2.0"
+ "@emotion/hash" "^0.9.1"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/unitless" "^0.8.1"
+ "@emotion/utils" "^1.2.1"
csstype "^3.0.2"
-"@emotion/server@11.10.0":
- version "11.10.0"
- resolved "https://registry.yarnpkg.com/@emotion/server/-/server-11.10.0.tgz#3edc075b672c75426f682d56aadc6404fb1f6648"
- integrity sha512-MTvJ21JPo9aS02GdjFW4nhdwOi2tNNpMmAM/YED0pkxzjDNi5WbiTwXqaCnvLc2Lr8NFtjhT0az1vTJyLIHYcw==
+"@emotion/server@11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/server/-/server-11.11.0.tgz#35537176a2a5ed8aed7801f254828e636ec3bd6e"
+ integrity sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==
dependencies:
- "@emotion/utils" "^1.2.0"
+ "@emotion/utils" "^1.2.1"
html-tokenize "^2.0.0"
multipipe "^1.0.2"
through "^2.3.8"
-"@emotion/sheet@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c"
- integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==
+"@emotion/sheet@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec"
+ integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==
-"@emotion/unitless@^0.8.0":
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db"
- integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==
+"@emotion/unitless@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3"
+ integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==
-"@emotion/use-insertion-effect-with-fallbacks@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df"
- integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==
+"@emotion/use-insertion-effect-with-fallbacks@^1.0.0", "@emotion/use-insertion-effect-with-fallbacks@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963"
+ integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==
-"@emotion/utils@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561"
- integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==
+"@emotion/utils@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4"
+ integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==
-"@emotion/weak-memoize@^0.3.0":
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb"
- integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==
+"@emotion/weak-memoize@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
+ integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
"@esbuild/android-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23"
integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==
-"@esbuild/android-arm64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.15.tgz#893ad71f3920ccb919e1757c387756a9bca2ef42"
- integrity sha512-0kOB6Y7Br3KDVgHeg8PRcvfLkq+AccreK///B4Z6fNZGr/tNHX0z2VywCc7PTeWp+bPvjA5WMvNXltHw5QjAIA==
+"@esbuild/android-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
+ integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==
"@esbuild/android-arm@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2"
integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==
-"@esbuild/android-arm@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.15.tgz#143e0d4e4c08c786ea410b9a7739779a9a1315d8"
- integrity sha512-sRSOVlLawAktpMvDyJIkdLI/c/kdRTOqo8t6ImVxg8yT7LQDUYV5Rp2FKeEosLr6ZCja9UjYAzyRSxGteSJPYg==
+"@esbuild/android-arm@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d"
+ integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==
"@esbuild/android-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e"
integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==
-"@esbuild/android-x64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.15.tgz#d2d12a7676b2589864281b2274355200916540bc"
- integrity sha512-MzDqnNajQZ63YkaUWVl9uuhcWyEyh69HGpMIrf+acR4otMkfLJ4sUCxqwbCyPGicE9dVlrysI3lMcDBjGiBBcQ==
+"@esbuild/android-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1"
+ integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==
"@esbuild/darwin-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220"
integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==
-"@esbuild/darwin-arm64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.15.tgz#2e88e79f1d327a2a7d9d06397e5232eb0a473d61"
- integrity sha512-7siLjBc88Z4+6qkMDxPT2juf2e8SJxmsbNVKFY2ifWCDT72v5YJz9arlvBw5oB4W/e61H1+HDB/jnu8nNg0rLA==
+"@esbuild/darwin-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276"
+ integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==
"@esbuild/darwin-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4"
integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==
-"@esbuild/darwin-x64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.15.tgz#9384e64c0be91388c57be6d3a5eaf1c32a99c91d"
- integrity sha512-NbImBas2rXwYI52BOKTW342Tm3LTeVlaOQ4QPZ7XuWNKiO226DisFk/RyPk3T0CKZkKMuU69yOvlapJEmax7cg==
+"@esbuild/darwin-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb"
+ integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==
"@esbuild/freebsd-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27"
integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==
-"@esbuild/freebsd-arm64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.15.tgz#2ad5a35bc52ebd9ca6b845dbc59ba39647a93c1a"
- integrity sha512-Xk9xMDjBVG6CfgoqlVczHAdJnCs0/oeFOspFap5NkYAmRCT2qTn1vJWA2f419iMtsHSLm+O8B6SLV/HlY5cYKg==
+"@esbuild/freebsd-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2"
+ integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==
"@esbuild/freebsd-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72"
integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==
-"@esbuild/freebsd-x64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.15.tgz#b513a48446f96c75fda5bef470e64d342d4379cd"
- integrity sha512-3TWAnnEOdclvb2pnfsTWtdwthPfOz7qAfcwDLcfZyGJwm1SRZIMOeB5FODVhnM93mFSPsHB9b/PmxNNbSnd0RQ==
+"@esbuild/freebsd-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4"
+ integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==
"@esbuild/linux-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca"
integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==
-"@esbuild/linux-arm64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.15.tgz#9697b168175bfd41fa9cc4a72dd0d48f24715f31"
- integrity sha512-T0MVnYw9KT6b83/SqyznTs/3Jg2ODWrZfNccg11XjDehIved2oQfrX/wVuev9N936BpMRaTR9I1J0tdGgUgpJA==
+"@esbuild/linux-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb"
+ integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==
"@esbuild/linux-arm@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196"
integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==
-"@esbuild/linux-arm@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.15.tgz#5b22062c54f48cd92fab9ffd993732a52db70cd3"
- integrity sha512-MLTgiXWEMAMr8nmS9Gigx43zPRmEfeBfGCwxFQEMgJ5MC53QKajaclW6XDPjwJvhbebv+RzK05TQjvH3/aM4Xw==
+"@esbuild/linux-arm@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a"
+ integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==
"@esbuild/linux-ia32@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54"
integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==
-"@esbuild/linux-ia32@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.15.tgz#eb28a13f9b60b5189fcc9e98e1024f6b657ba54c"
- integrity sha512-wp02sHs015T23zsQtU4Cj57WiteiuASHlD7rXjKUyAGYzlOKDAjqK6bk5dMi2QEl/KVOcsjwL36kD+WW7vJt8Q==
+"@esbuild/linux-ia32@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a"
+ integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==
"@esbuild/linux-loong64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8"
integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==
-"@esbuild/linux-loong64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.15.tgz#32454bdfe144cf74b77895a8ad21a15cb81cfbe5"
- integrity sha512-k7FsUJjGGSxwnBmMh8d7IbObWu+sF/qbwc+xKZkBe/lTAF16RqxRCnNHA7QTd3oS2AfGBAnHlXL67shV5bBThQ==
+"@esbuild/linux-loong64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72"
+ integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==
"@esbuild/linux-mips64el@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726"
integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==
-"@esbuild/linux-mips64el@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.15.tgz#af12bde0d775a318fad90eb13a0455229a63987c"
- integrity sha512-ZLWk6czDdog+Q9kE/Jfbilu24vEe/iW/Sj2d8EVsmiixQ1rM2RKH2n36qfxK4e8tVcaXkvuV3mU5zTZviE+NVQ==
+"@esbuild/linux-mips64el@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289"
+ integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==
"@esbuild/linux-ppc64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8"
integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==
-"@esbuild/linux-ppc64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.15.tgz#34c5ed145b2dfc493d3e652abac8bd3baa3865a5"
- integrity sha512-mY6dPkIRAiFHRsGfOYZC8Q9rmr8vOBZBme0/j15zFUKM99d4ILY4WpOC7i/LqoY+RE7KaMaSfvY8CqjJtuO4xg==
+"@esbuild/linux-ppc64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7"
+ integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==
"@esbuild/linux-riscv64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9"
integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==
-"@esbuild/linux-riscv64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.15.tgz#87bd515e837f2eb004b45f9e6a94dc5b93f22b92"
- integrity sha512-EcyUtxffdDtWjjwIH8sKzpDRLcVtqANooMNASO59y+xmqqRYBBM7xVLQhqF7nksIbm2yHABptoioS9RAbVMWVA==
+"@esbuild/linux-riscv64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09"
+ integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==
"@esbuild/linux-s390x@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87"
integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==
-"@esbuild/linux-s390x@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.15.tgz#20bf7947197f199ddac2ec412029a414ceae3aa3"
- integrity sha512-BuS6Jx/ezxFuHxgsfvz7T4g4YlVrmCmg7UAwboeyNNg0OzNzKsIZXpr3Sb/ZREDXWgt48RO4UQRDBxJN3B9Rbg==
+"@esbuild/linux-s390x@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829"
+ integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==
"@esbuild/linux-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f"
integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==
-"@esbuild/linux-x64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.15.tgz#31b93f9c94c195e852c20cd3d1914a68aa619124"
- integrity sha512-JsdS0EgEViwuKsw5tiJQo9UdQdUJYuB+Mf6HxtJSPN35vez1hlrNb1KajvKWF5Sa35j17+rW1ECEO9iNrIXbNg==
+"@esbuild/linux-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4"
+ integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==
"@esbuild/netbsd-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775"
integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==
-"@esbuild/netbsd-x64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.15.tgz#8da299b3ac6875836ca8cdc1925826498069ac65"
- integrity sha512-R6fKjtUysYGym6uXf6qyNephVUQAGtf3n2RCsOST/neIwPqRWcnc3ogcielOd6pT+J0RDR1RGcy0ZY7d3uHVLA==
+"@esbuild/netbsd-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462"
+ integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==
"@esbuild/openbsd-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35"
integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==
-"@esbuild/openbsd-x64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.15.tgz#04a1ec3d4e919714dba68dcf09eeb1228ad0d20c"
- integrity sha512-mVD4PGc26b8PI60QaPUltYKeSX0wxuy0AltC+WCTFwvKCq2+OgLP4+fFd+hZXzO2xW1HPKcytZBdjqL6FQFa7w==
+"@esbuild/openbsd-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691"
+ integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==
"@esbuild/sunos-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c"
integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==
-"@esbuild/sunos-x64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.15.tgz#6694ebe4e16e5cd7dab6505ff7c28f9c1c695ce5"
- integrity sha512-U6tYPovOkw3459t2CBwGcFYfFRjivcJJc1WC8Q3funIwX8x4fP+R6xL/QuTPNGOblbq/EUDxj9GU+dWKX0oWlQ==
+"@esbuild/sunos-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273"
+ integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==
"@esbuild/win32-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a"
integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==
-"@esbuild/win32-arm64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.15.tgz#1f95b2564193c8d1fee8f8129a0609728171d500"
- integrity sha512-W+Z5F++wgKAleDABemiyXVnzXgvRFs+GVKThSI+mGgleLWluv0D7Diz4oQpgdpNzh4i2nNDzQtWbjJiqutRp6Q==
+"@esbuild/win32-arm64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f"
+ integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==
"@esbuild/win32-ia32@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09"
integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==
-"@esbuild/win32-ia32@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.15.tgz#c362b88b3df21916ed7bcf75c6d09c6bf3ae354a"
- integrity sha512-Muz/+uGgheShKGqSVS1KsHtCyEzcdOn/W/Xbh6H91Etm+wiIfwZaBn1W58MeGtfI8WA961YMHFYTthBdQs4t+w==
+"@esbuild/win32-ia32@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03"
+ integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==
"@esbuild/win32-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091"
integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==
-"@esbuild/win32-x64@0.17.15":
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.15.tgz#c2e737f3a201ebff8e2ac2b8e9f246b397ad19b8"
- integrity sha512-DjDa9ywLUUmjhV2Y9wUTIF+1XsmuFGvZoCmOWkli1XcNAh5t25cc7fgsCx4Zi/Uurep3TTLyDiKATgGEg61pkA==
+"@esbuild/win32-x64@0.17.19":
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
+ integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
+
+"@eslint-community/eslint-utils@^4.2.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.4.0":
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
+ integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
"@eslint/eslintrc@^1.4.1":
version "1.4.1"
@@ -3479,20 +3193,15 @@
resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4"
integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==
-"@guardian/ab-core@4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/ab-core/-/ab-core-4.0.0.tgz#50c1fc076437e594b367f6e8d9469a3d9b97a78e"
- integrity sha512-l6Ot/anisLKyoLZOp8koW7Ia5JFOtmZkB0sfgdWajv5+N0w0UScUVoImEdPlFstM1anSd3FvV8D3UgYkRzAang==
-
-"@guardian/ab-core@^5.0.0":
+"@guardian/ab-core@5.0.0", "@guardian/ab-core@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@guardian/ab-core/-/ab-core-5.0.0.tgz#cce32ff4cdfb6b24c013723bf352dcd61135d34d"
integrity sha512-Td5gtK2sARl+fXj1Qe6RuFqf/zxuZjW1q2Jck09zXPIfMgU+sJoTi549zbNeC1cldCBhPWy/qPQ0r+8klfF7jg==
-"@guardian/atoms-rendering@31.0.0":
- version "31.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/atoms-rendering/-/atoms-rendering-31.0.0.tgz#31e0f727b574e3385ef6688767a507ea18c3a9b6"
- integrity sha512-dWhTI/djARS0qhtvMmpa91Rcyz/O82KHFWNCXsQLOg74Na96p+ibl6mDUOW5M/xBiL5TbF5Ac/ZbWdspWsiwWA==
+"@guardian/atoms-rendering@32.2.0":
+ version "32.2.0"
+ resolved "https://registry.yarnpkg.com/@guardian/atoms-rendering/-/atoms-rendering-32.2.0.tgz#00db2120252060e5e0c5b3b4b45897d18864cec4"
+ integrity sha512-14BFR+rb6iQ4qYcqX/aPt/C3iVYSfKrHZj5ps9EbDeOx8dKejohsLyPiPKaNkPj+M0CTH42r8kcOjatx4Yx1yw==
dependencies:
is-mobile "3.1.1"
@@ -3530,10 +3239,10 @@
read-pkg-up "7.0.1"
yargs "^17.6.2"
-"@guardian/commercial@10.1.0":
- version "10.1.0"
- resolved "https://registry.yarnpkg.com/@guardian/commercial/-/commercial-10.1.0.tgz#1a1fd256bbf6fc6bd9d1271816a119f27ecf879e"
- integrity sha512-natr/bIH+8Jc0dqC3NrjP7OCgE9hm4XSJQ7ThyJqgcPxHmh6uWGOQTiOAgM30yYvQuETQo+rCRf4NNklHtiFcA==
+"@guardian/commercial@10.1.1":
+ version "10.1.1"
+ resolved "https://registry.yarnpkg.com/@guardian/commercial/-/commercial-10.1.1.tgz#0a6820613fd7ecfa91adf438daf33ee397b16d8d"
+ integrity sha512-vq8jPbAnZcc7mhQz0TDIAq0/Qy18SXQ0K5XOc7ZQxUaSDfIrOm9zNLaLggFDqJ4PppSz+AcgN53+2CimU+S55w==
dependencies:
"@changesets/cli" "^2.26.1"
"@guardian/ab-core" "^5.0.0"
@@ -3546,7 +3255,7 @@
fastdom "^1.0.11"
lodash-es "^4.17.21"
ophan-tracker-js "^1.4.0"
- prebid.js guardian/prebid.js#2e3b96d
+ prebid.js guardian/prebid.js
process "^0.11.10"
raven-js "^3.27.2"
tslib "^2.5.3"
@@ -3558,78 +3267,58 @@
resolved "https://registry.yarnpkg.com/@guardian/consent-management-platform/-/consent-management-platform-13.5.0.tgz#61a97c823f6b18f62a6517a3374f6e7bdfca121d"
integrity sha512-9iz04lyonWAbUeZ7B+fNp0KbgAervsWDO3A4CE/3e+d876AQj0I3TwU7W4jpWxI4tthcA6UVk7Y6faaS8l+lFw==
-"@guardian/core-web-vitals@4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/core-web-vitals/-/core-web-vitals-4.0.0.tgz#e09bf40ee896ae92c0223fa57399b1b0b5f9bdb2"
- integrity sha512-LDXnDhsNApO9v8LrXPK1AHMZYoa457tYjqjHnXNSxleHHoyeS3ehB4qohdDMpWv76F8DLUVMXBTZ/8EbQce3sA==
-
-"@guardian/core-web-vitals@^5.0.0":
+"@guardian/core-web-vitals@5.0.0", "@guardian/core-web-vitals@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@guardian/core-web-vitals/-/core-web-vitals-5.0.0.tgz#ab74da6001427f3414a84d15f57bac1a888a140a"
integrity sha512-Mq3v8Y/YJGs7p/8NWmYHFKdVqRThjDJSfpoo1zSb6DgpQ1Ko8RjvOa2Q9P9ABWfKJCaDp0kcGK3dk0AjDSi/Qw==
-"@guardian/discussion-rendering@14.0.0":
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/discussion-rendering/-/discussion-rendering-14.0.0.tgz#2cbfe802a2f81bb8d2ee083a8374fb6bd00dbdcf"
- integrity sha512-O4XlA1ueL2TX1pWD9jNAPIA8bdaGfZeLzDPVJAgpGIjwlXxQj/xSk/dpJ8jC/V/XBztucM7XtughigvN5fY59w==
-
-"@guardian/eslint-config-typescript@5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/eslint-config-typescript/-/eslint-config-typescript-5.0.0.tgz#5bfcc8d9655f5f978474347f7cdefdb08706a805"
- integrity sha512-0v77rdbJ1mb4kEnRn4s0z//aFs1qwnUumqNV60ayBGWs18gmZscmIxgKm4rmoYIr/IJugTkLFZozEWlbwIhAOw==
+"@guardian/eslint-config-typescript@6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@guardian/eslint-config-typescript/-/eslint-config-typescript-6.0.1.tgz#47eac1ec8b61a9f14d041610b2c78cfedef403a4"
+ integrity sha512-ZFJDRF0FMNjqBqyslde35mpBakQc1xNys1ph/PLUhAlZT5NPqS+vMWw+WaHephWvtrQO6wMsZi/axR4/GhNC9Q==
dependencies:
- "@guardian/eslint-config" "3.0.0"
- "@typescript-eslint/eslint-plugin" "5.46.1"
- "@typescript-eslint/parser" "5.46.1"
- eslint-import-resolver-typescript "3.5.2"
- eslint-plugin-import "2.26.0"
+ "@guardian/eslint-config" "4.1.0"
+ "@typescript-eslint/eslint-plugin" "5.59.9"
+ "@typescript-eslint/parser" "5.59.9"
+ eslint-import-resolver-typescript "3.5.5"
+ eslint-plugin-import "2.27.5"
-"@guardian/eslint-config@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/eslint-config/-/eslint-config-3.0.0.tgz#5cdf7f422d7291ea044607ff8a8474f931f4f127"
- integrity sha512-LF15QHOBvX26Vhdz+5RsktRCOdCecWNpVaBqqw41j6SrOk3no/u7radyQrkXM6Zlgkl9j4O/9uMh0sGJtgAA+A==
+"@guardian/eslint-config@4.1.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@guardian/eslint-config/-/eslint-config-4.1.0.tgz#5f838a6d03d3146c79d0f3e40695ff9c826f2f72"
+ integrity sha512-nJxPbdQ02dgXHrQxY95hhDqZ+NGbK1r2w52g6B+tbug7FAqi1bbETW9gZLPArM5kBl/1R1125jEBNB+GC61bAQ==
dependencies:
- eslint-config-prettier "8.5.0"
+ eslint-config-prettier "8.8.0"
eslint-plugin-eslint-comments "3.2.0"
- eslint-plugin-import "2.26.0"
+ eslint-plugin-import "2.27.5"
-"@guardian/eslint-plugin-source-react-components@14.0.0":
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/eslint-plugin-source-react-components/-/eslint-plugin-source-react-components-14.0.0.tgz#d13cddbf9b4ec85743cd047f97d3cc75e70eb930"
- integrity sha512-dhhPD1ml7OqiyBukURGtTMS8sHFWMHOjJfJcrHjhRXw7B6UAl9xEkQv6H94+INDdsWz3GMv2XwQlyMMihuEmSQ==
+"@guardian/eslint-plugin-source-react-components@17.0.0":
+ version "17.0.0"
+ resolved "https://registry.yarnpkg.com/@guardian/eslint-plugin-source-react-components/-/eslint-plugin-source-react-components-17.0.0.tgz#56a2545c62ff3864fd51ea91b1ca5220fcad681d"
+ integrity sha512-E2F47A4Cin8vVt2oRBnc9yUxyXqZHLs2DKvjpfHX35O5uQ3ubdGa4QrOIgUayy+Ar27lEtLv7HhJkdH+Y3FLeA==
dependencies:
"@typescript-eslint/eslint-plugin" "5.46.1"
- "@typescript-eslint/parser" "5.46.1"
+ "@typescript-eslint/parser" "5.59.9"
"@guardian/identity-auth@0.1.2":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@guardian/identity-auth/-/identity-auth-0.1.2.tgz#ce357767c0228d7792158770e94173ad6723b7be"
integrity sha512-vInqAay30pyRS3EHoQwFYW1Fr6t3lD2zvpnnbPOzqqg/5eAoxNFloVkdmnffdB6XguSd9JUmVYS1XLtpZZswTQ==
-"@guardian/libs@14.1.0":
- version "14.1.0"
- resolved "https://registry.yarnpkg.com/@guardian/libs/-/libs-14.1.0.tgz#feac9cc5636639e45ab2a6e2fd4a3f29f7af9a70"
- integrity sha512-V/6ROWh0s8A6tJVFBMP9h9sb4L2SN98zSp84aLhBac4Ir1XJjG3kljAyB4uV1+341Amd+44QJGhB/D7roVsSfQ==
+"@guardian/libs@15.1.0", "@guardian/libs@^15.0.0":
+ version "15.1.0"
+ resolved "https://registry.yarnpkg.com/@guardian/libs/-/libs-15.1.0.tgz#a919fd08cb298cba0b7363d128f0da38e598ec98"
+ integrity sha512-1USL3EuhwhyUANjWeVBZx2mRVCydE0QAzUIOV2ukojp92ZAWyt2RqxV8luTEPgUxbDAtma9MuO6lgTshTk5nYw==
"@guardian/libs@^10.0.0":
version "10.1.1"
resolved "https://registry.yarnpkg.com/@guardian/libs/-/libs-10.1.1.tgz#7048c365a68dda068f707d46c78979f430221963"
integrity sha512-OdWReBHRWhdbErVmS15hihVzlkdU8DkKrjDsUIN0P8QZiF4twuzcU3qsPwto2UfibAwPkWqKkNwH1k8b6xNclA==
-"@guardian/libs@^15.0.0":
- version "15.1.0"
- resolved "https://registry.yarnpkg.com/@guardian/libs/-/libs-15.1.0.tgz#a919fd08cb298cba0b7363d128f0da38e598ec98"
- integrity sha512-1USL3EuhwhyUANjWeVBZx2mRVCydE0QAzUIOV2ukojp92ZAWyt2RqxV8luTEPgUxbDAtma9MuO6lgTshTk5nYw==
-
-"@guardian/prettier@3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/prettier/-/prettier-3.0.0.tgz#7a313372b7e6919298999dc801a23f5b69f008f0"
- integrity sha512-o1g0tYVniUNFxWoCp3DbK33gTebDmvYORN6oeV+lXvqa9YyhslswzGkmV0mSRErXmla0H+pIlnfF0Ve7fb0Mfw==
-
-"@guardian/prettier@^2.0.0":
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/@guardian/prettier/-/prettier-2.1.5.tgz#715fff5b110006408f92a3fe2a803ad0e4c79e06"
- integrity sha512-4fehERf5HHS9Nkaw+4u5EZ1OrFEHL4lYhLUWkpwEx4VmHI+RgcMezfDfosb3TD8cPFCKakrpdQEJUwNP283SJw==
+"@guardian/prettier@4.0.0", "@guardian/prettier@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@guardian/prettier/-/prettier-4.0.0.tgz#1ad1d7d079194937bfd0107789dde7b0fb84fa11"
+ integrity sha512-JvvnDnI04NcmpuD2mF5ZXTWI7tand1pj1s33fh4JxHNAV00QXwTWZBI2/QWS3ck7KjpYjpRaz8CDUcMz35hReg==
"@guardian/shimport@1.0.2":
version "1.0.2"
@@ -3638,39 +3327,32 @@
dependencies:
tslib "^2.0.0"
-"@guardian/source-foundations@11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/source-foundations/-/source-foundations-11.0.0.tgz#4becebdccc209798baa82feedf6ed6de29b21e26"
- integrity sha512-/893dgVhsWV6Tfe23sgk/e8x9B1EoyvcOIjx0ZWE6toU4fjS6IpkBg2eBWYWhZQvWpCX7sj+967wslXCl3/MMg==
- dependencies:
- mini-svg-data-uri "1.4.4"
-
-"@guardian/source-foundations@^12.0.0":
+"@guardian/source-foundations@12.0.0", "@guardian/source-foundations@^12.0.0":
version "12.0.0"
resolved "https://registry.yarnpkg.com/@guardian/source-foundations/-/source-foundations-12.0.0.tgz#3f75d5dd26dae0d3fe13fd93aabe1e837cf0ddbb"
integrity sha512-sq+htAsvPlaZBjfSZ8ISZZdAnFQwuZ7xeCrI/C369HA+MDl3pQ1dFWz3YmqCP/vkXS8Wr3qVlxXNqWGwKKrYrw==
dependencies:
mini-svg-data-uri "1.4.4"
-"@guardian/source-react-components-development-kitchen@11.0.0":
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/@guardian/source-react-components-development-kitchen/-/source-react-components-development-kitchen-11.0.0.tgz#6fe57d6f5fda751e311df70ed0e7735cd8342316"
- integrity sha512-KNC+IZfufZI0L6sBEvsdzYa1HLkuV3stZ8Ty+wSHKjN22nxON2Yzvrkf9gw4LKNCAWuaLVkSPzritfs87zdWuQ==
+"@guardian/source-react-components-development-kitchen@13.0.1":
+ version "13.0.1"
+ resolved "https://registry.yarnpkg.com/@guardian/source-react-components-development-kitchen/-/source-react-components-development-kitchen-13.0.1.tgz#c8072f9369cbb06272d9f9174c2f6637d258c885"
+ integrity sha512-aQ39E0qQ6KCDgJqTnxG7d36HWfmHcLVImbDq/4TnbFGV100CUtPe19VBzMKgGP7/CYYnC22QKDa6cNgVcZysjQ==
-"@guardian/source-react-components@14.0.2":
- version "14.0.2"
- resolved "https://registry.yarnpkg.com/@guardian/source-react-components/-/source-react-components-14.0.2.tgz#00656908aadf8b2d2b01328f5c01753271693fbe"
- integrity sha512-rWAyOwyCwdNhJdjOMZzw5hgDGtxC6xO+0fo6+r2k8ZhAgYAR+7YkSS26QF68SRLU3CN4YsJ2pDZAmJiJrBPAnw==
+"@guardian/source-react-components@15.0.1":
+ version "15.0.1"
+ resolved "https://registry.yarnpkg.com/@guardian/source-react-components/-/source-react-components-15.0.1.tgz#c584f507181fc88761bf702b7a6068b28a54003b"
+ integrity sha512-a4IBy0wmvb7UvnsT41I7VRdxeGaYz7l3LTV8PUE7swmS5UC/6SCQjOmsmXE54UiasdolUGMEt6C5p5oTxTDrdg==
"@guardian/support-dotcom-components@1.0.7", "@guardian/support-dotcom-components@^1.0.7":
version "1.0.7"
resolved "https://registry.yarnpkg.com/@guardian/support-dotcom-components/-/support-dotcom-components-1.0.7.tgz#b3aadcca5f6ee35b2c541121144be237d72bd3e0"
integrity sha512-MhaO+rC+ujXMcaMd1TL5D0t0eEuHWGh3OrFkM8BhPwhMkjela/dCOPeVPvGJDJ0a37o4PeMszqy+dSuiR4BvvQ==
-"@guardian/tsconfig@0.1.6":
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/@guardian/tsconfig/-/tsconfig-0.1.6.tgz#2cc3ecce09e84b6bcaea8a1150c7b590e908d2a9"
- integrity sha512-5GMp2tBMaIxxInmWGDZI9O3v76hbW2CV/3hnWhDDvtXZvgOFs3K41plkAoc+GpPNLZTrtJlAaHHhbZcDDGI9/w==
+"@guardian/tsconfig@0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@guardian/tsconfig/-/tsconfig-0.2.0.tgz#b1dac8831d2ff7ac557229f350d4b2f8c9fc60b5"
+ integrity sha512-RauppalK+cQZDRK6IssVmDSnU/VyqMNuVOxPxhmI03kVRxEdwcmBuRqexHwDbnClVUxW/N9hYLbFNuAb9V/p+A==
"@hapi/hoek@^9.0.0":
version "9.3.0"
@@ -3685,9 +3367,9 @@
"@hapi/hoek" "^9.0.0"
"@humanwhocodes/config-array@^0.11.8":
- version "0.11.8"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
- integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
+ integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
dependencies:
"@humanwhocodes/object-schema" "^1.2.1"
debug "^4.1.1"
@@ -3782,13 +3464,6 @@
"@types/node" "*"
jest-mock "^29.5.0"
-"@jest/expect-utils@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.2.tgz#cd0065dfdd8e8a182aa350cc121db97b5eed7b3f"
- integrity sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==
- dependencies:
- jest-get-type "^29.4.2"
-
"@jest/expect-utils@^29.5.0":
version "29.5.0"
resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036"
@@ -3856,13 +3531,6 @@
strip-ansi "^6.0.0"
v8-to-istanbul "^9.0.1"
-"@jest/schemas@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.2.tgz#cf7cfe97c5649f518452b176c47ed07486270fc1"
- integrity sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==
- dependencies:
- "@sinclair/typebox" "^0.25.16"
-
"@jest/schemas@^29.4.3":
version "29.4.3"
resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788"
@@ -3931,18 +3599,6 @@
"@types/yargs" "^16.0.0"
chalk "^4.0.0"
-"@jest/types@^29.4.2":
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.2.tgz#8f724a414b1246b2bfd56ca5225d9e1f39540d82"
- integrity sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==
- dependencies:
- "@jest/schemas" "^29.4.2"
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^3.0.0"
- "@types/node" "*"
- "@types/yargs" "^17.0.8"
- chalk "^4.0.0"
-
"@jest/types@^29.5.0":
version "29.5.0"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593"
@@ -3955,46 +3611,48 @@
"@types/yargs" "^17.0.8"
chalk "^4.0.0"
-"@jridgewell/gen-mapping@^0.1.0":
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
- integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==
- dependencies:
- "@jridgewell/set-array" "^1.0.0"
- "@jridgewell/sourcemap-codec" "^1.4.10"
-
"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
- integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+ integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
dependencies:
"@jridgewell/set-array" "^1.0.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
-"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3":
+"@jridgewell/resolve-uri@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
-"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
+"@jridgewell/resolve-uri@^3.0.3":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
+ integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
+
+"@jridgewell/set-array@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
-"@jridgewell/source-map@^0.3.2":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
- integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==
+"@jridgewell/source-map@^0.3.3":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda"
+ integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
dependencies:
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
-"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":
+"@jridgewell/sourcemap-codec@1.4.14":
version "1.4.14"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+"@jridgewell/sourcemap-codec@^1.4.10":
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
"@jridgewell/trace-mapping@0.3.9":
version "0.3.9"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
@@ -4003,10 +3661,10 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
-"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
- version "0.3.17"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
- integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
+"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+ version "0.3.18"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
+ integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
dependencies:
"@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14"
@@ -4079,14 +3737,19 @@
glob-to-regexp "^0.3.0"
"@ndelangen/get-tarball@^3.0.7":
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.7.tgz#87c7aef2df4ff4fbdbab6ac9ed32cee142c4b1a3"
- integrity sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ==
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz#727ff4454e65f34707e742a59e5e6b1f525d8964"
+ integrity sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==
dependencies:
gunzip-maybe "^1.4.2"
pump "^3.0.0"
tar-fs "^2.1.1"
+"@nicolo-ribaudo/semver-v6@^6.3.3":
+ version "6.3.3"
+ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29"
+ integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -4154,9 +3817,9 @@
integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==
"@octokit/core@^4.0.5":
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.1.tgz#fee6341ad0ce60c29cc455e056cd5b500410a588"
- integrity sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907"
+ integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==
dependencies:
"@octokit/auth-token" "^3.0.0"
"@octokit/graphql" "^5.0.0"
@@ -4167,9 +3830,9 @@
universal-user-agent "^6.0.0"
"@octokit/endpoint@^7.0.0":
- version "7.0.5"
- resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1"
- integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2"
+ integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==
dependencies:
"@octokit/types" "^9.0.0"
is-plain-object "^5.0.0"
@@ -4184,10 +3847,10 @@
"@octokit/types" "^9.0.0"
universal-user-agent "^6.0.0"
-"@octokit/openapi-types@^17.2.0":
- version "17.2.0"
- resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.2.0.tgz#f1800b5f9652b8e1b85cc6dfb1e0dc888810bdb5"
- integrity sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ==
+"@octokit/openapi-types@^18.0.0":
+ version "18.0.0"
+ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69"
+ integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==
"@octokit/request-error@^3.0.0":
version "3.0.3"
@@ -4199,9 +3862,9 @@
once "^1.4.0"
"@octokit/request@^6.0.0":
- version "6.2.5"
- resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.5.tgz#7beef1065042998f7455973ef3f818e7b84d6ec2"
- integrity sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==
+ version "6.2.8"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb"
+ integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==
dependencies:
"@octokit/endpoint" "^7.0.0"
"@octokit/request-error" "^3.0.0"
@@ -4211,11 +3874,11 @@
universal-user-agent "^6.0.0"
"@octokit/types@^9.0.0":
- version "9.2.3"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.3.tgz#d0af522f394d74b585cefb7efd6197ca44d183a9"
- integrity sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA==
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5"
+ integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==
dependencies:
- "@octokit/openapi-types" "^17.2.0"
+ "@octokit/openapi-types" "^18.0.0"
"@opencensus/core@0.0.9":
version "0.0.9"
@@ -4379,21 +4042,21 @@
integrity sha512-ZC9OqaTVPjnndcSfbQaU0NcquC0J4KZFx7hEDznukXNsLIK4WSLiEK1QS+tGxAkIKZilHmVc/vv9q3lMvlQDaQ==
"@percy/sdk-utils@^1.3.1":
- version "1.18.0"
- resolved "https://registry.yarnpkg.com/@percy/sdk-utils/-/sdk-utils-1.18.0.tgz#3c0c7faaf2668eb679546554418e96a53c81db4a"
- integrity sha512-c+Avhw5rNa+xyAFIpuQ4jxksw7/5DWyPGaNncTMY4Dbc1fVxT6nu6V1Mytc9A1zxl0+ficQHTZeSugM4aL81hQ==
+ version "1.26.1"
+ resolved "https://registry.yarnpkg.com/@percy/sdk-utils/-/sdk-utils-1.26.1.tgz#09c792bdb45e0be144fe15405c684f5f0e1e1966"
+ integrity sha512-DrPaC/EfBjw6rMvMa3bkZhiQxJIIXqWhEwo0jnzlsR74FNeKRiCQwpx9/H1exN4LFYos7pwLd3e4ga8nPK/hqA==
"@pkgr/utils@^2.3.1":
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03"
- integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3"
+ integrity sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==
dependencies:
cross-spawn "^7.0.3"
+ fast-glob "^3.2.12"
is-glob "^4.0.3"
- open "^8.4.0"
+ open "^9.1.0"
picocolors "^1.0.0"
- tiny-glob "^0.2.9"
- tslib "^2.4.0"
+ tslib "^2.5.0"
"@pm2/agent@~2.0.0":
version "2.0.1"
@@ -4468,6 +4131,16 @@
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
+"@sentry-internal/tracing@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551"
+ integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A==
+ dependencies:
+ "@sentry/core" "7.57.0"
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
+ tslib "^2.4.1 || ^1.9.3"
+
"@sentry/browser@7.37.2":
version "7.37.2"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.37.2.tgz#355dd28ad12677d63e0b12c5209d12b3f98ac3a4"
@@ -4488,6 +4161,15 @@
"@sentry/utils" "7.37.2"
tslib "^1.9.3"
+"@sentry/core@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb"
+ integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw==
+ dependencies:
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
+ tslib "^2.4.1 || ^1.9.3"
+
"@sentry/integrations@7.37.2":
version "7.37.2"
resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.37.2.tgz#2ea6b228c8df24f201802eea1306035b0fc7e571"
@@ -4499,17 +4181,18 @@
tslib "^1.9.3"
"@sentry/node@^7.36.0":
- version "7.37.2"
- resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.37.2.tgz#7ce3b09c93112afca0eef0fd65ec87ea1cd1b7d2"
- integrity sha512-aeJQ4oU3vF9zks8S/fvoLPVVhofmTjyMhZZIpSQWtfFqWxrXQsrqNlNUZZdXoqAUPNjA4QAzzOoXHhpUsa3Nxw==
- dependencies:
- "@sentry/core" "7.37.2"
- "@sentry/types" "7.37.2"
- "@sentry/utils" "7.37.2"
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.57.0.tgz#31052f5988ed4496d7f3ff925240cf9b02d09941"
+ integrity sha512-63mjyUVM6sfJFVQ5TGVRVGUsoEfESl5ABzIW1W0s9gUiQPaG8SOdaQJglb2VNrkMYxnRHgD8Q9LUh/qcmUyPGw==
+ dependencies:
+ "@sentry-internal/tracing" "7.57.0"
+ "@sentry/core" "7.57.0"
+ "@sentry/types" "7.57.0"
+ "@sentry/utils" "7.57.0"
cookie "^0.4.1"
https-proxy-agent "^5.0.0"
lru_map "^0.3.3"
- tslib "^1.9.3"
+ tslib "^2.4.1 || ^1.9.3"
"@sentry/replay@7.37.2":
version "7.37.2"
@@ -4525,6 +4208,11 @@
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.37.2.tgz#99fd76230d7c1d3c6901ed4c0bea35be7d6fe26d"
integrity sha512-SxKQOCX94ZaQM4C2ysNjHdJsjYapu/NYZCz1cnPyCdDvYfhwiVge1uq6ZHiQ/ARfxAAOmc3R4Mh3VvEz7WUOdw==
+"@sentry/types@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce"
+ integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w==
+
"@sentry/utils@7.37.2":
version "7.37.2"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.37.2.tgz#14dea644454e3df247fb113fc834f509c1f0e48c"
@@ -4533,6 +4221,14 @@
"@sentry/types" "7.37.2"
tslib "^1.9.3"
+"@sentry/utils@7.57.0":
+ version "7.57.0"
+ resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8"
+ integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg==
+ dependencies:
+ "@sentry/types" "7.57.0"
+ tslib "^2.4.1 || ^1.9.3"
+
"@sideway/address@^4.1.3":
version "4.1.4"
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0"
@@ -4551,9 +4247,9 @@
integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
"@sinclair/typebox@^0.25.16":
- version "0.25.21"
- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.21.tgz#763b05a4b472c93a8db29b2c3e359d55b29ce272"
- integrity sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==
+ version "0.25.24"
+ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718"
+ integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==
"@sindresorhus/is@^4.0.0":
version "4.6.0"
@@ -4568,73 +4264,27 @@
type-detect "4.0.8"
"@sinonjs/fake-timers@^10.0.2":
- version "10.2.0"
- resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz#b3e322a34c5f26e3184e7f6115695f299c1b1194"
- integrity sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==
+ version "10.3.0"
+ resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66"
+ integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==
dependencies:
"@sinonjs/commons" "^3.0.0"
"@smithy/protocol-http@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-1.0.1.tgz#62fd73d73db285fd8e9a2287ed2904ac66e0d43f"
- integrity sha512-9OrEn0WfOVtBNYJUjUAn9AOiJ4lzERCJJ/JeZs8E6yajTGxBaFRxUnNBHiNqoDJVg076hY36UmEnPx7xXrvUSg==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-1.1.0.tgz#caf22e01cb825d7490a4915e03d6fa64954ff535"
+ integrity sha512-H5y/kZOqfJSqRkwtcAoVbqONmhdXwSgYNJ1Glk5Ry8qlhVVy5qUzD9EklaCH8/XLnoCsLO/F/Giee8MIvaBRkg==
dependencies:
- "@smithy/types" "^1.0.0"
+ "@smithy/types" "^1.1.0"
tslib "^2.5.0"
-"@smithy/types@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.0.0.tgz#87ab6131fe5e19cbd4d383ffb94d2b806d027d38"
- integrity sha512-kc1m5wPBHQCTixwuaOh9vnak/iJm21DrSf9UK6yDE5S3mQQ4u11pqAUiKWnlrZnYkeLfAI9UEHj9OaMT1v5Umg==
+"@smithy/types@^1.0.0", "@smithy/types@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.1.0.tgz#f30a23202c97634cca5c1ac955a9bf149c955226"
+ integrity sha512-KzmvisMmuwD2jZXuC9e65JrgsZM97y5NpDU7g347oB+Q+xQLU6hQZ5zFNNbEfwwOJHoOvEVTna+dk1h/lW7alw==
dependencies:
tslib "^2.5.0"
-"@snyk/dep-graph@^2.3.0":
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/@snyk/dep-graph/-/dep-graph-2.5.0.tgz#32708d29501738a6d32529770818ae5aa75d14ef"
- integrity sha512-wFKHAhsD1VBfESiuN2nHHeulEYAAod1Z4E/2t+ztsiJ5DCeD0pSXtJizdp2PhMZ0cFFce8ln3NO8xBhl+C4H+Q==
- dependencies:
- event-loop-spinner "^2.1.0"
- lodash.clone "^4.5.0"
- lodash.constant "^3.0.0"
- lodash.filter "^4.6.0"
- lodash.foreach "^4.5.0"
- lodash.isempty "^4.4.0"
- lodash.isequal "^4.5.0"
- lodash.isfunction "^3.0.9"
- lodash.isundefined "^3.0.1"
- lodash.map "^4.6.0"
- lodash.reduce "^4.6.0"
- lodash.size "^4.2.0"
- lodash.transform "^4.6.0"
- lodash.union "^4.6.0"
- lodash.values "^4.3.0"
- object-hash "^3.0.0"
- packageurl-js "^1.0.0"
- semver "^7.0.0"
- tslib "^2"
-
-"@snyk/graphlib@2.1.9-patch.3":
- version "2.1.9-patch.3"
- resolved "https://registry.yarnpkg.com/@snyk/graphlib/-/graphlib-2.1.9-patch.3.tgz#b8edb2335af1978db7f3cb1f28f5d562960acf23"
- integrity sha512-bBY9b9ulfLj0v2Eer0yFYa3syVeIxVKl2EpxSrsVeT4mjA0CltZyHsF0JjoaGXP27nItTdJS5uVsj1NA+3aE+Q==
- dependencies:
- lodash.clone "^4.5.0"
- lodash.constant "^3.0.0"
- lodash.filter "^4.6.0"
- lodash.foreach "^4.5.0"
- lodash.has "^4.5.2"
- lodash.isempty "^4.4.0"
- lodash.isfunction "^3.0.9"
- lodash.isundefined "^3.0.1"
- lodash.keys "^4.2.0"
- lodash.map "^4.6.0"
- lodash.reduce "^4.6.0"
- lodash.size "^4.2.0"
- lodash.transform "^4.6.0"
- lodash.union "^4.6.0"
- lodash.values "^4.3.0"
-
"@storybook/addon-actions@7.0.2":
version "7.0.2"
resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.0.2.tgz#720d764ec77e395a92be50f0cd0a1baa75a58518"
@@ -4994,7 +4644,7 @@
"@storybook/client-logger" "7.0.2"
"@storybook/preview-api" "7.0.2"
-"@storybook/client-logger@7.0.10", "@storybook/client-logger@^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
+"@storybook/client-logger@7.0.10":
version "7.0.10"
resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.0.10.tgz#941f6cf54638a422732b40ec31b2414872cdf4a8"
integrity sha512-hb8tO+w28ErzjEw69ERMtZT81Xyg835FQjH6Y42ejoGcBA9Z0W6RZmx4RgkcIUOlYXkU6lSnNVne9gXodV4/Hw==
@@ -5162,9 +4812,9 @@
ts-dedent "^2.0.0"
"@storybook/csf@^0.1.0":
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.0.tgz#62315bf9704f3aa4e0d4d909b9033833774ddfbe"
- integrity sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.1.tgz#abccc8c3e49aed0a6a7e87beb0d1c262b1921c06"
+ integrity sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==
dependencies:
type-fest "^2.19.0"
@@ -5191,17 +4841,6 @@
resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed"
integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==
-"@storybook/instrumenter@^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-7.0.2.tgz#a94031d3678d7a7829e6ebe0d07e2b986f96593a"
- integrity sha512-zr9/fuaYtGVUtcL8XgjA4Iq5jtzdcqQyOSH4XLXtz6JtSad3lkRagbJo2Vzbw7dO/4vzjfTMxEzvWjUuPxLOhA==
- dependencies:
- "@storybook/channels" "7.0.2"
- "@storybook/client-logger" "7.0.2"
- "@storybook/core-events" "7.0.2"
- "@storybook/global" "^5.0.0"
- "@storybook/preview-api" "7.0.2"
-
"@storybook/manager-api@7.0.2":
version "7.0.2"
resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.0.2.tgz#2b1c509be94b644cfec9dd817f62394f2788a287"
@@ -5229,9 +4868,9 @@
integrity sha512-jsFsFKG0rPNYfuRm/WSXGMBy8vnALyFWU330ObDmfU0JID3SeLlVqAOZT1GlwI6vupYpWodsN6qPZKRmC8onRw==
"@storybook/mdx2-csf@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.0.0.tgz#ce4b2e44c9082bf382db835eef611b0097b7d771"
- integrity sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5"
+ integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==
"@storybook/node-logger@7.0.2":
version "7.0.2"
@@ -5383,15 +5022,13 @@
nanoid "^3.3.1"
read-pkg-up "^7.0.1"
-"@storybook/testing-library@0.0.14-next.2":
- version "0.0.14-next.2"
- resolved "https://registry.yarnpkg.com/@storybook/testing-library/-/testing-library-0.0.14-next.2.tgz#458e6c7623118e24826ba73b80db0a887f3f57e8"
- integrity sha512-i/SLSGm0o978ELok/SB4Qg1sZ3zr+KuuCkzyFqcCD0r/yf+bG35aQGkFqqxfSAdDxuQom0NO02FE+qys5Eapdg==
+"@storybook/testing-library@0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@storybook/testing-library/-/testing-library-0.2.0.tgz#09202b90ea5bd67b503dbb1a0b1f3ab3eb005d04"
+ integrity sha512-Ff6jNnrsosmDshgCf0Eb5Cz7IA34p/1Ps5N3Kp3598kfXpBSccSkQQvVFUXC3kIHw/isIXWPqntZuKqnWUz7Gw==
dependencies:
- "@storybook/client-logger" "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0"
- "@storybook/instrumenter" "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0"
- "@testing-library/dom" "^8.3.0"
- "@testing-library/user-event" "^13.2.1"
+ "@testing-library/dom" "^9.0.0"
+ "@testing-library/user-event" "^14.0.0"
ts-dedent "^2.2.0"
"@storybook/theming@7.0.10":
@@ -5517,7 +5154,7 @@
dependencies:
defer-to-connect "^2.0.0"
-"@testing-library/dom@9.2.0", "@testing-library/dom@^9.0.0":
+"@testing-library/dom@9.2.0":
version "9.2.0"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.2.0.tgz#0e1f45e956f2a16f471559c06edd8827c4832f04"
integrity sha512-xTEnpUKiV/bMyEsE5bT4oYA0x0Z/colMtxzUY8bKyPXBNLn/e0V4ZjBZkEhms0xE4pv9QsPfSRu9AWS4y5wGvA==
@@ -5531,18 +5168,18 @@
lz-string "^1.5.0"
pretty-format "^27.0.2"
-"@testing-library/dom@^8.3.0":
- version "8.20.0"
- resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.0.tgz#914aa862cef0f5e89b98cc48e3445c4c921010f6"
- integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==
+"@testing-library/dom@^9.0.0":
+ version "9.3.1"
+ resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.1.tgz#8094f560e9389fb973fe957af41bf766937a9ee9"
+ integrity sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/runtime" "^7.12.5"
"@types/aria-query" "^5.0.1"
- aria-query "^5.0.0"
+ aria-query "5.1.3"
chalk "^4.1.0"
dom-accessibility-api "^0.5.9"
- lz-string "^1.4.4"
+ lz-string "^1.5.0"
pretty-format "^27.0.2"
"@testing-library/jest-dom@5.16.5":
@@ -5569,18 +5206,11 @@
"@testing-library/dom" "^9.0.0"
"@types/react-dom" "^18.0.0"
-"@testing-library/user-event@14.4.3":
+"@testing-library/user-event@14.4.3", "@testing-library/user-event@^14.0.0":
version "14.4.3"
resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591"
integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==
-"@testing-library/user-event@^13.2.1":
- version "13.5.0"
- resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-13.5.0.tgz#69d77007f1e124d55314a2b73fd204b333b13295"
- integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==
- dependencies:
- "@babel/runtime" "^7.12.5"
-
"@textlint/ast-node-types@^12.6.1":
version "12.6.1"
resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-12.6.1.tgz#35ecefe74e701d7f632c083d4fda89cab1b89012"
@@ -5632,9 +5262,9 @@
integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
"@tsconfig/node16@^1.0.2":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
- integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
+ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
"@types/amphtml-validator@1.0.1":
version "1.0.1"
@@ -5648,18 +5278,7 @@
resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc"
integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==
-"@types/babel__core@^7.0.0":
- version "7.20.0"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891"
- integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==
- dependencies:
- "@babel/parser" "^7.20.7"
- "@babel/types" "^7.20.7"
- "@types/babel__generator" "*"
- "@types/babel__template" "*"
- "@types/babel__traverse" "*"
-
-"@types/babel__core@^7.1.14":
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
version "7.20.1"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b"
integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==
@@ -5686,11 +5305,11 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.18.3"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d"
- integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==
+ version "7.20.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf"
+ integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==
dependencies:
- "@babel/types" "^7.3.0"
+ "@babel/types" "^7.20.7"
"@types/body-parser@*", "@types/body-parser@1.19.2":
version "1.19.2"
@@ -5740,9 +5359,9 @@
"@types/express" "*"
"@types/connect-history-api-fallback@^1.3.5":
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae"
- integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41"
+ integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==
dependencies:
"@types/express-serve-static-core" "*"
"@types/node" "*"
@@ -5760,16 +5379,16 @@
integrity sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==
"@types/debug@^4.0.0":
- version "4.1.7"
- resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
- integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
+ version "4.1.8"
+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317"
+ integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==
dependencies:
"@types/ms" "*"
"@types/detect-port@^1.3.0":
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.2.tgz#8c06a975e472803b931ee73740aeebd0a2eb27ae"
- integrity sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.3.tgz#124c5d4c283f48a21f80826bcf39433b3e64aa81"
+ integrity sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==
"@types/doctrine@^0.0.3":
version "0.0.3"
@@ -5788,11 +5407,6 @@
resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.2.tgz#75d277b030bc11b3be38c807e10071f45ebc78d9"
integrity sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==
-"@types/emscripten@^1.38.0":
- version "1.39.6"
- resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.6.tgz#698b90fe60d44acf93c31064218fbea93fbfd85a"
- integrity sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==
-
"@types/escodegen@^0.0.6":
version "0.0.6"
resolved "https://registry.yarnpkg.com/@types/escodegen/-/escodegen-0.0.6.tgz#5230a9ce796e042cda6f086dbf19f22ea330659c"
@@ -5814,17 +5428,27 @@
"@types/estree" "*"
"@types/json-schema" "*"
-"@types/estree@*":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2"
- integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==
+"@types/estree@*", "@types/estree@^1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
+ integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
"@types/estree@^0.0.51":
version "0.0.51"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40"
integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==
-"@types/express-serve-static-core@*", "@types/express-serve-static-core@4.17.33", "@types/express-serve-static-core@^4.17.33":
+"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33":
+ version "4.17.35"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f"
+ integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==
+ dependencies:
+ "@types/node" "*"
+ "@types/qs" "*"
+ "@types/range-parser" "*"
+ "@types/send" "*"
+
+"@types/express-serve-static-core@4.17.33":
version "4.17.33"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543"
integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==
@@ -5860,10 +5484,10 @@
resolved "https://registry.yarnpkg.com/@types/gapi/-/gapi-0.0.44.tgz#f097f7a0f59d63a59098a08a62a560ca168426fb"
integrity sha512-hsgJMfZ/pMwI15UlAYHMNwj8DRoigo1odhbPwEXdp19ZQwQAXbcRrpzaDsfc+9XM6RtGpvl4Ja7uW8A+KPCa7w==
-"@types/glob@*":
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.0.1.tgz#6e3041640148b7764adf21ce5c7138ad454725b0"
- integrity sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==
+"@types/glob@*", "@types/glob@^8.0.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc"
+ integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==
dependencies:
"@types/minimatch" "^5.1.2"
"@types/node" "*"
@@ -5876,14 +5500,6 @@
"@types/minimatch" "*"
"@types/node" "*"
-"@types/glob@^8.0.0":
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc"
- integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==
- dependencies:
- "@types/minimatch" "^5.1.2"
- "@types/node" "*"
-
"@types/google.analytics@0.0.42":
version "0.0.42"
resolved "https://registry.yarnpkg.com/@types/google.analytics/-/google.analytics-0.0.42.tgz#efe6ef9251a22ec8208dbb09f221a48a1863d720"
@@ -5923,10 +5539,15 @@
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
+"@types/http-errors@*":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65"
+ integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==
+
"@types/http-proxy@^1.17.8":
- version "1.17.9"
- resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a"
- integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==
+ version "1.17.11"
+ resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293"
+ integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==
dependencies:
"@types/node" "*"
@@ -5957,9 +5578,9 @@
"@types/istanbul-lib-report" "*"
"@types/jest@*":
- version "29.4.0"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.0.tgz#a8444ad1704493e84dbf07bb05990b275b3b9206"
- integrity sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==
+ version "29.5.2"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b"
+ integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==
dependencies:
expect "^29.0.0"
pretty-format "^29.0.0"
@@ -5969,10 +5590,19 @@
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c"
integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==
dependencies:
- jest-matcher-utils "^27.0.0"
- pretty-format "^27.0.0"
+ jest-matcher-utils "^27.0.0"
+ pretty-format "^27.0.0"
+
+"@types/jsdom@21.1.1":
+ version "21.1.1"
+ resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.1.tgz#e59e26352071267b507bf04d51841a1d7d3e8617"
+ integrity sha512-cZFuoVLtzKP3gmq9eNosUL1R50U+USkbLtUQ1bYVgl/lKp0FZM7Cq4aIHAL8oIvQ17uSHi7jXPtfDOdjPwBE7A==
+ dependencies:
+ "@types/node" "*"
+ "@types/tough-cookie" "*"
+ parse5 "^7.0.0"
-"@types/jsdom@20.0.1", "@types/jsdom@^20.0.0":
+"@types/jsdom@^20.0.0":
version "20.0.1"
resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808"
integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==
@@ -5982,9 +5612,9 @@
parse5 "^7.0.0"
"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
- version "7.0.11"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
- integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+ version "7.0.12"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
+ integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
"@types/json5@^0.0.29":
version "0.0.29"
@@ -6012,22 +5642,27 @@
dependencies:
"@types/lodash" "*"
-"@types/lodash@*", "@types/lodash@4.14.191", "@types/lodash@^4.14.136", "@types/lodash@^4.14.167":
+"@types/lodash@*", "@types/lodash@^4.14.136", "@types/lodash@^4.14.167":
+ version "4.14.195"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.195.tgz#bafc975b252eb6cea78882ce8a7b6bf22a6de632"
+ integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==
+
+"@types/lodash@4.14.191":
version "4.14.191"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa"
integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==
"@types/mdast@^3.0.0":
- version "3.0.10"
- resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af"
- integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0"
+ integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==
dependencies:
"@types/unist" "*"
"@types/mdx@^2.0.0":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.4.tgz#d1cad61ccc803b3c248c3d9990a2a6880bef537f"
- integrity sha512-qCYrNdpKwN6YO6FVnx+ulfqifKlE3lQGsNhvDaW9Oxzyob/cRLBJWow8GHBBD4NxQ7BVvtsATgLsX0vZAWmtrg==
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.5.tgz#9a85a8f70c7c4d9e695a21d5ae5c93645eda64b1"
+ integrity sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==
"@types/mime-types@^2.1.0":
version "2.1.1"
@@ -6039,6 +5674,11 @@
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
+"@types/mime@^1":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
+ integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
+
"@types/minimatch@*", "@types/minimatch@^5.1.2":
version "5.1.2"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
@@ -6054,7 +5694,7 @@
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
-"@types/node-fetch@2.6.2", "@types/node-fetch@^2.5.7":
+"@types/node-fetch@2.6.2":
version "2.6.2"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da"
integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==
@@ -6062,6 +5702,14 @@
"@types/node" "*"
form-data "^3.0.0"
+"@types/node-fetch@^2.5.7":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660"
+ integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==
+ dependencies:
+ "@types/node" "*"
+ form-data "^3.0.0"
+
"@types/node@*", "@types/node@18.16.18":
version "18.16.18"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.18.tgz#85da09bafb66d4bc14f7c899185336d0c1736390"
@@ -6072,11 +5720,6 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240"
integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==
-"@types/node@^13.7.0":
- version "13.13.52"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7"
- integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==
-
"@types/node@^14.14.31":
version "14.18.36"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.36.tgz#c414052cb9d43fab67d679d5f3c641be911f5835"
@@ -6102,6 +5745,13 @@
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+"@types/parse5@7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-7.0.0.tgz#8b412a0a4461c84d6280a372bfa8c57a418a06bd"
+ integrity sha512-f2SeAxumolBmhuR62vNGTsSAvdz/Oj0k682xNrcKJ4dmRnTPODB74j6CPoNPzBPTHsu7Y7W7u93Mgp8Ovo8vWw==
+ dependencies:
+ parse5 "*"
+
"@types/parse5@^6.0.0":
version "6.0.3"
resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb"
@@ -6132,13 +5782,20 @@
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
-"@types/react-dom@18.2.0", "@types/react-dom@^18.0.0":
+"@types/react-dom@18.2.0":
version "18.2.0"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.0.tgz#374f28074bb117f56f58c4f3f71753bebb545156"
integrity sha512-8yQrvS6sMpSwIovhPOwfyNf2Wz6v/B62LFSVYQ85+Rq3tLsBIG7rP5geMxaijTUxSkrO6RzN/IRuIAADYQsleA==
dependencies:
"@types/react" "*"
+"@types/react-dom@^18.0.0":
+ version "18.2.6"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.6.tgz#ad621fa71a8db29af7c31b41b2ea3d8a6f4144d1"
+ integrity sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==
+ dependencies:
+ "@types/react" "*"
+
"@types/react-google-recaptcha@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@types/react-google-recaptcha/-/react-google-recaptcha-2.1.5.tgz#af157dc2e4bde3355f9b815a64f90e85cfa9df8b"
@@ -6153,10 +5810,10 @@
dependencies:
"@types/react" "*"
-"@types/react@*":
- version "18.0.28"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065"
- integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==
+"@types/react@*", "@types/react@>=16":
+ version "18.2.14"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127"
+ integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -6171,15 +5828,6 @@
"@types/scheduler" "*"
csstype "^3.0.2"
-"@types/react@>=16":
- version "18.0.33"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.33.tgz#a1575160cb4376787c2f5fe0312302f824baa61e"
- integrity sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA==
- dependencies:
- "@types/prop-types" "*"
- "@types/scheduler" "*"
- csstype "^3.0.2"
-
"@types/relateurl@0.2.29":
version "0.2.29"
resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.29.tgz#68ccecec3d4ffdafb9c577fe764f912afc050fe6"
@@ -6213,27 +5861,35 @@
"@types/glob" "*"
"@types/node" "*"
-"@types/sanitize-html@2.8.0":
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.8.0.tgz#c53d3114d832734fc299568a3458a49f9edc1eef"
- integrity sha512-Uih6caOm3DsBYnVGOYn0A9NoTNe1c4aPStmHC/YA2JrpP9kx//jzaRcIklFvSpvVQEcpl/ZCr4DgISSf/YxTvg==
+"@types/sanitize-html@2.9.0":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.9.0.tgz#5b609f7592de22ef80a0930c39670329753dca1b"
+ integrity sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg==
dependencies:
htmlparser2 "^8.0.0"
-"@types/scheduler@*", "@types/scheduler@0.16.2":
+"@types/scheduler@*":
+ version "0.16.3"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5"
+ integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
+
+"@types/scheduler@0.16.2":
version "0.16.2"
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
-"@types/semver@^6.0.0":
- version "6.2.3"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.3.tgz#5798ecf1bec94eaa64db39ee52808ec0693315aa"
- integrity sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==
+"@types/semver@^7.3.12", "@types/semver@^7.3.4", "@types/semver@^7.5.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
+ integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
-"@types/semver@^7.1.0", "@types/semver@^7.3.12", "@types/semver@^7.3.4":
- version "7.3.13"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
- integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
+"@types/send@*":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301"
+ integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==
+ dependencies:
+ "@types/mime" "^1"
+ "@types/node" "*"
"@types/serve-index@^1.9.1":
version "1.9.1"
@@ -6242,7 +5898,16 @@
dependencies:
"@types/express" "*"
-"@types/serve-static@*", "@types/serve-static@1.15.0", "@types/serve-static@^1.13.10":
+"@types/serve-static@*", "@types/serve-static@^1.13.10":
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a"
+ integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==
+ dependencies:
+ "@types/http-errors" "*"
+ "@types/mime" "*"
+ "@types/node" "*"
+
+"@types/serve-static@1.15.0":
version "1.15.0"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155"
integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==
@@ -6272,23 +5937,25 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
-"@types/testing-library__jest-dom@5.14.5", "@types/testing-library__jest-dom@^5.9.1":
+"@types/testing-library__jest-dom@5.14.5":
version "5.14.5"
resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f"
integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==
dependencies:
"@types/jest" "*"
+"@types/testing-library__jest-dom@^5.9.1":
+ version "5.14.6"
+ resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.6.tgz#4887f6e1af11215428ab02777873bcede98a53b0"
+ integrity sha512-FkHXCb+ikSoUP4Y4rOslzTdX5sqYwMxfefKh1GmZ8ce1GOkEHntSp6b5cGadmNfp5e4BMEWOMx+WSKd5/MqlDA==
+ dependencies:
+ "@types/jest" "*"
+
"@types/tough-cookie@*", "@types/tough-cookie@4.0.2":
version "4.0.2"
resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397"
integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==
-"@types/treeify@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@types/treeify/-/treeify-1.0.0.tgz#f04743cb91fc38254e8585d692bd92503782011c"
- integrity sha512-ONpcZAEYlbPx4EtJwfTyCDQJGUpKf4sEcuySdCVjK5Fj/3vHp5HII1fqa1/+qrsLnpYELCQTfVW/awsGJePoIg==
-
"@types/trusted-types@*", "@types/trusted-types@2.0.3":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311"
@@ -6318,23 +5985,23 @@
tapable "^2.2.0"
webpack "^5"
-"@types/webpack-env@1.18.0", "@types/webpack-env@^1.17.0":
+"@types/webpack-env@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.0.tgz#ed6ecaa8e5ed5dfe8b2b3d00181702c9925f13fb"
integrity sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==
-"@types/webpack-node-externals@2.5.3":
- version "2.5.3"
- resolved "https://registry.yarnpkg.com/@types/webpack-node-externals/-/webpack-node-externals-2.5.3.tgz#921783aadda1fe686db0a70e20e4b9548b5a3cef"
- integrity sha512-A9JxaR8QXoYT95egET4AmCFuChyTlP8d18ZAnmSHuIMsFdS7QlCQQ8pmN/+FHgLIkm+ViE/VngltT5avLACY9A==
+"@types/webpack-node-externals@3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#4b85b93cde99a16779c4b1faebaa23c3ef46ec0b"
+ integrity sha512-Z3ELJiH0aZjxkoymT2nrGSmCF/CYjiqC0bpv4/DWy9h7e6gP4B2qmKZFHJFermeF0SYURbSw0puddQl9dMMV0w==
dependencies:
"@types/node" "*"
webpack "^5"
"@types/ws@^8.5.1":
- version "8.5.4"
- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5"
- integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==
+ version "8.5.5"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb"
+ integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==
dependencies:
"@types/node" "*"
@@ -6351,9 +6018,9 @@
"@types/yargs-parser" "*"
"@types/yargs@^17.0.8":
- version "17.0.22"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a"
- integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==
+ version "17.0.24"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902"
+ integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==
dependencies:
"@types/yargs-parser" "*"
@@ -6413,22 +6080,28 @@
semver "^7.3.7"
tsutils "^3.21.0"
-"@typescript-eslint/experimental-utils@^5.5.0":
- version "5.52.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.52.0.tgz#cc79b91ea62f43bb5e9bec2d94a7df513220e9df"
- integrity sha512-kd8CRr04mNE3hw4et6+0T0NI5vli2H6dJCGzjX1r12s/FXUehLVadmvo2Nl3DN80YqAh1cVC6zYZAkpmGiVJ5g==
+"@typescript-eslint/eslint-plugin@5.59.9":
+ version "5.59.9"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz#2604cfaf2b306e120044f901e20c8ed926debf15"
+ integrity sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==
dependencies:
- "@typescript-eslint/utils" "5.52.0"
+ "@eslint-community/regexpp" "^4.4.0"
+ "@typescript-eslint/scope-manager" "5.59.9"
+ "@typescript-eslint/type-utils" "5.59.9"
+ "@typescript-eslint/utils" "5.59.9"
+ debug "^4.3.4"
+ grapheme-splitter "^1.0.4"
+ ignore "^5.2.0"
+ natural-compare-lite "^1.4.0"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
-"@typescript-eslint/parser@5.46.1":
- version "5.46.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.46.1.tgz#1fc8e7102c1141eb64276c3b89d70da8c0ba5699"
- integrity sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==
+"@typescript-eslint/experimental-utils@^5.5.0":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.60.1.tgz#d783bb63b9183541019a945eda6a9d96b096d985"
+ integrity sha512-TXUdLxv2t8181nh5yLXl/Gr/zKj1ZofQ7m+ZdmG2+El0TYOHCvlZfc35D4nturemC3RUnf3KmLuFp3bVBjkG5w==
dependencies:
- "@typescript-eslint/scope-manager" "5.46.1"
- "@typescript-eslint/types" "5.46.1"
- "@typescript-eslint/typescript-estree" "5.46.1"
- debug "^4.3.4"
+ "@typescript-eslint/utils" "5.60.1"
"@typescript-eslint/parser@5.59.7":
version "5.59.7"
@@ -6440,6 +6113,16 @@
"@typescript-eslint/typescript-estree" "5.59.7"
debug "^4.3.4"
+"@typescript-eslint/parser@5.59.9":
+ version "5.59.9"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.9.tgz#a85c47ccdd7e285697463da15200f9a8561dd5fa"
+ integrity sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "5.59.9"
+ "@typescript-eslint/types" "5.59.9"
+ "@typescript-eslint/typescript-estree" "5.59.9"
+ debug "^4.3.4"
+
"@typescript-eslint/scope-manager@5.46.1":
version "5.46.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz#70af8425c79bbc1178b5a63fb51102ddf48e104a"
@@ -6464,6 +6147,22 @@
"@typescript-eslint/types" "5.59.7"
"@typescript-eslint/visitor-keys" "5.59.7"
+"@typescript-eslint/scope-manager@5.59.9":
+ version "5.59.9"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4"
+ integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==
+ dependencies:
+ "@typescript-eslint/types" "5.59.9"
+ "@typescript-eslint/visitor-keys" "5.59.9"
+
+"@typescript-eslint/scope-manager@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb"
+ integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==
+ dependencies:
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/visitor-keys" "5.60.1"
+
"@typescript-eslint/type-utils@5.46.1":
version "5.46.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz#195033e4b30b51b870dfcf2828e88d57b04a11cc"
@@ -6484,6 +6183,16 @@
debug "^4.3.4"
tsutils "^3.21.0"
+"@typescript-eslint/type-utils@5.59.9":
+ version "5.59.9"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz#53bfaae2e901e6ac637ab0536d1754dfef4dafc2"
+ integrity sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "5.59.9"
+ "@typescript-eslint/utils" "5.59.9"
+ debug "^4.3.4"
+ tsutils "^3.21.0"
+
"@typescript-eslint/types@5.46.1":
version "5.46.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.46.1.tgz#4e9db2107b9a88441c4d5ecacde3bb7a5ebbd47e"
@@ -6499,6 +6208,16 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.7.tgz#6f4857203fceee91d0034ccc30512d2939000742"
integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==
+"@typescript-eslint/types@5.59.9":
+ version "5.59.9"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52"
+ integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==
+
+"@typescript-eslint/types@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561"
+ integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==
+
"@typescript-eslint/typescript-estree@5.46.1":
version "5.46.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz#5358088f98a8f9939355e0996f9c8f41c25eced2"
@@ -6538,6 +6257,32 @@
semver "^7.3.7"
tsutils "^3.21.0"
+"@typescript-eslint/typescript-estree@5.59.9":
+ version "5.59.9"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b"
+ integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==
+ dependencies:
+ "@typescript-eslint/types" "5.59.9"
+ "@typescript-eslint/visitor-keys" "5.59.9"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/typescript-estree@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834"
+ integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==
+ dependencies:
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/visitor-keys" "5.60.1"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ semver "^7.3.7"
+ tsutils "^3.21.0"
+
"@typescript-eslint/utils@5.46.1":
version "5.46.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.46.1.tgz#7da3c934d9fd0eb4002a6bb3429f33298b469b4a"
@@ -6566,6 +6311,34 @@
eslint-utils "^3.0.0"
semver "^7.3.7"
+"@typescript-eslint/utils@5.59.9":
+ version "5.59.9"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.9.tgz#adee890107b5ffe02cd46fdaa6c2125fb3c6c7c4"
+ integrity sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@types/json-schema" "^7.0.9"
+ "@types/semver" "^7.3.12"
+ "@typescript-eslint/scope-manager" "5.59.9"
+ "@typescript-eslint/types" "5.59.9"
+ "@typescript-eslint/typescript-estree" "5.59.9"
+ eslint-scope "^5.1.1"
+ semver "^7.3.7"
+
+"@typescript-eslint/utils@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80"
+ integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@types/json-schema" "^7.0.9"
+ "@types/semver" "^7.3.12"
+ "@typescript-eslint/scope-manager" "5.60.1"
+ "@typescript-eslint/types" "5.60.1"
+ "@typescript-eslint/typescript-estree" "5.60.1"
+ eslint-scope "^5.1.1"
+ semver "^7.3.7"
+
"@typescript-eslint/visitor-keys@5.46.1":
version "5.46.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz#126cc6fe3c0f83608b2b125c5d9daced61394242"
@@ -6590,6 +6363,22 @@
"@typescript-eslint/types" "5.59.7"
eslint-visitor-keys "^3.3.0"
+"@typescript-eslint/visitor-keys@5.59.9":
+ version "5.59.9"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d"
+ integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==
+ dependencies:
+ "@typescript-eslint/types" "5.59.9"
+ eslint-visitor-keys "^3.3.0"
+
+"@typescript-eslint/visitor-keys@5.60.1":
+ version "5.60.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434"
+ integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==
+ dependencies:
+ "@typescript-eslint/types" "5.60.1"
+ eslint-visitor-keys "^3.3.0"
+
"@webassemblyjs/ast@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
@@ -6598,21 +6387,44 @@
"@webassemblyjs/helper-numbers" "1.11.1"
"@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
+ integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
+ dependencies:
+ "@webassemblyjs/helper-numbers" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+
"@webassemblyjs/floating-point-hex-parser@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f"
integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==
+"@webassemblyjs/floating-point-hex-parser@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
+ integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
+
"@webassemblyjs/helper-api-error@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16"
integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==
+"@webassemblyjs/helper-api-error@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
+ integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
+
"@webassemblyjs/helper-buffer@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5"
integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==
+"@webassemblyjs/helper-buffer@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093"
+ integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
+
"@webassemblyjs/helper-numbers@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae"
@@ -6622,11 +6434,25 @@
"@webassemblyjs/helper-api-error" "1.11.1"
"@xtuc/long" "4.2.2"
+"@webassemblyjs/helper-numbers@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
+ integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
+ dependencies:
+ "@webassemblyjs/floating-point-hex-parser" "1.11.6"
+ "@webassemblyjs/helper-api-error" "1.11.6"
+ "@xtuc/long" "4.2.2"
+
"@webassemblyjs/helper-wasm-bytecode@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1"
integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==
+"@webassemblyjs/helper-wasm-bytecode@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
+ integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
+
"@webassemblyjs/helper-wasm-section@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a"
@@ -6637,6 +6463,16 @@
"@webassemblyjs/helper-wasm-bytecode" "1.11.1"
"@webassemblyjs/wasm-gen" "1.11.1"
+"@webassemblyjs/helper-wasm-section@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577"
+ integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-buffer" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/wasm-gen" "1.11.6"
+
"@webassemblyjs/ieee754@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614"
@@ -6644,6 +6480,13 @@
dependencies:
"@xtuc/ieee754" "^1.2.0"
+"@webassemblyjs/ieee754@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
+ integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
"@webassemblyjs/leb128@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5"
@@ -6651,11 +6494,23 @@
dependencies:
"@xtuc/long" "4.2.2"
+"@webassemblyjs/leb128@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
+ integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
"@webassemblyjs/utf8@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff"
integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==
+"@webassemblyjs/utf8@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
+ integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
+
"@webassemblyjs/wasm-edit@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6"
@@ -6670,6 +6525,20 @@
"@webassemblyjs/wasm-parser" "1.11.1"
"@webassemblyjs/wast-printer" "1.11.1"
+"@webassemblyjs/wasm-edit@^1.11.5":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab"
+ integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-buffer" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/helper-wasm-section" "1.11.6"
+ "@webassemblyjs/wasm-gen" "1.11.6"
+ "@webassemblyjs/wasm-opt" "1.11.6"
+ "@webassemblyjs/wasm-parser" "1.11.6"
+ "@webassemblyjs/wast-printer" "1.11.6"
+
"@webassemblyjs/wasm-gen@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76"
@@ -6681,6 +6550,17 @@
"@webassemblyjs/leb128" "1.11.1"
"@webassemblyjs/utf8" "1.11.1"
+"@webassemblyjs/wasm-gen@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268"
+ integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/ieee754" "1.11.6"
+ "@webassemblyjs/leb128" "1.11.6"
+ "@webassemblyjs/utf8" "1.11.6"
+
"@webassemblyjs/wasm-opt@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2"
@@ -6691,6 +6571,16 @@
"@webassemblyjs/wasm-gen" "1.11.1"
"@webassemblyjs/wasm-parser" "1.11.1"
+"@webassemblyjs/wasm-opt@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2"
+ integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-buffer" "1.11.6"
+ "@webassemblyjs/wasm-gen" "1.11.6"
+ "@webassemblyjs/wasm-parser" "1.11.6"
+
"@webassemblyjs/wasm-parser@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199"
@@ -6703,6 +6593,18 @@
"@webassemblyjs/leb128" "1.11.1"
"@webassemblyjs/utf8" "1.11.1"
+"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1"
+ integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@webassemblyjs/helper-api-error" "1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
+ "@webassemblyjs/ieee754" "1.11.6"
+ "@webassemblyjs/leb128" "1.11.6"
+ "@webassemblyjs/utf8" "1.11.6"
+
"@webassemblyjs/wast-printer@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0"
@@ -6711,20 +6613,28 @@
"@webassemblyjs/ast" "1.11.1"
"@xtuc/long" "4.2.2"
+"@webassemblyjs/wast-printer@1.11.6":
+ version "1.11.6"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20"
+ integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
+ dependencies:
+ "@webassemblyjs/ast" "1.11.6"
+ "@xtuc/long" "4.2.2"
+
"@webpack-cli/configtest@^2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f"
- integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646"
+ integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==
"@webpack-cli/info@^2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0"
- integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd"
+ integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==
"@webpack-cli/serve@^2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8"
- integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
+ integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
@@ -6736,43 +6646,6 @@
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
-"@yarnpkg/core@^2.4.0":
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-2.4.0.tgz#b5d8cc7ee2ddb022816c7afa3f83c3ee3d317c80"
- integrity sha512-FYjcPNTfDfMKLFafQPt49EY28jnYC82Z2S7oMwLPUh144BL8v8YXzb4aCnFyi5nFC5h2kcrJfZh7+Pm/qvCqGw==
- dependencies:
- "@arcanis/slice-ansi" "^1.0.2"
- "@types/semver" "^7.1.0"
- "@types/treeify" "^1.0.0"
- "@yarnpkg/fslib" "^2.4.0"
- "@yarnpkg/json-proxy" "^2.1.0"
- "@yarnpkg/libzip" "^2.2.1"
- "@yarnpkg/parsers" "^2.3.0"
- "@yarnpkg/pnp" "^2.3.2"
- "@yarnpkg/shell" "^2.4.1"
- binjumper "^0.1.4"
- camelcase "^5.3.1"
- chalk "^3.0.0"
- ci-info "^2.0.0"
- clipanion "^2.6.2"
- cross-spawn "7.0.3"
- diff "^4.0.1"
- globby "^11.0.1"
- got "^11.7.0"
- json-file-plus "^3.3.1"
- lodash "^4.17.15"
- micromatch "^4.0.2"
- mkdirp "^0.5.1"
- p-limit "^2.2.0"
- pluralize "^7.0.0"
- pretty-bytes "^5.1.0"
- semver "^7.1.2"
- stream-to-promise "^2.2.0"
- tar-stream "^2.0.1"
- treeify "^1.1.0"
- tslib "^1.13.0"
- tunnel "^0.0.6"
-
"@yarnpkg/esbuild-plugin-pnp@^3.0.0-rc.10":
version "3.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz#4e40e7d2eb28825c9a35ab9d04c363931d7c0e67"
@@ -6780,66 +6653,11 @@
dependencies:
tslib "^2.4.0"
-"@yarnpkg/fslib@^2.4.0", "@yarnpkg/fslib@^2.5.0":
- version "2.10.1"
- resolved "https://registry.yarnpkg.com/@yarnpkg/fslib/-/fslib-2.10.1.tgz#3ed7e450f1316e535740653c2e8eff2d851c45cb"
- integrity sha512-pVMLtOYu87N5y5G2lyPNYTY2JbTco99v7nGFI34Blx01Ct9LmoKVOc91vnLOYIMMljKr1c8xs1O2UamRdMG5Pg==
- dependencies:
- "@yarnpkg/libzip" "^2.2.4"
- tslib "^1.13.0"
-
-"@yarnpkg/json-proxy@^2.1.0":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@yarnpkg/json-proxy/-/json-proxy-2.1.1.tgz#47866706061e9bdb15b0d199f6f08dde655bf569"
- integrity sha512-meUiCAgCYpXTH1qJfqfz+dX013ohW9p2dKfwIzUYAFutH+lsz1eHPBIk72cuCV84adh9gX6j66ekBKH/bIhCQw==
- dependencies:
- "@yarnpkg/fslib" "^2.5.0"
- tslib "^1.13.0"
-
-"@yarnpkg/libzip@^2.2.1", "@yarnpkg/libzip@^2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@yarnpkg/libzip/-/libzip-2.2.4.tgz#438744efe3b7ae0514f5db1ead130c1df1e685f6"
- integrity sha512-QP0vUP+w0d7Jlo7jqTnlRChSnIB/dOF7nJFLD/gsPvFIHsVWLQQuAiolOcXQUD2hezLD1mQd2qb0yOKqPYRcfQ==
- dependencies:
- "@types/emscripten" "^1.38.0"
- tslib "^1.13.0"
-
-"@yarnpkg/lockfile@1.1.0", "@yarnpkg/lockfile@^1.1.0":
+"@yarnpkg/lockfile@1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
-"@yarnpkg/parsers@^2.3.0":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-2.5.1.tgz#0e7c510977a410747fc6d3727c1a2a189e6cd6eb"
- integrity sha512-KtYN6Ez3x753vPF9rETxNTPnPjeaHY11Exlpqb4eTII7WRlnGiZ5rvvQBau4R20Ik5KBv+vS3EJEcHyCunwzzw==
- dependencies:
- js-yaml "^3.10.0"
- tslib "^1.13.0"
-
-"@yarnpkg/pnp@^2.3.2":
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/@yarnpkg/pnp/-/pnp-2.3.2.tgz#9a052a06bf09c9f0b7c31e0867a7e725cb6401ed"
- integrity sha512-JdwHu1WBCISqJEhIwx6Hbpe8MYsYbkGMxoxolkDiAeJ9IGEe08mQcbX1YmUDV1ozSWlm9JZE90nMylcDsXRFpA==
- dependencies:
- "@types/node" "^13.7.0"
- "@yarnpkg/fslib" "^2.4.0"
- tslib "^1.13.0"
-
-"@yarnpkg/shell@^2.4.1":
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/@yarnpkg/shell/-/shell-2.4.1.tgz#abc557f8924987c9c382703e897433a82780265d"
- integrity sha512-oNNJkH8ZI5uwu0dMkJf737yMSY1WXn9gp55DqSA5wAOhKvV5DJTXFETxkVgBQhO6Bow9tMGSpvowTMD/oAW/9g==
- dependencies:
- "@yarnpkg/fslib" "^2.4.0"
- "@yarnpkg/parsers" "^2.3.0"
- clipanion "^2.6.2"
- cross-spawn "7.0.3"
- fast-glob "^3.2.2"
- micromatch "^4.0.2"
- stream-buffers "^3.0.2"
- tslib "^1.13.0"
-
abab@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
@@ -6866,10 +6684,10 @@ acorn-globals@^7.0.0:
acorn "^8.1.0"
acorn-walk "^8.0.2"
-acorn-import-assertions@^1.7.6:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
- integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==
+acorn-import-assertions@^1.7.6, acorn-import-assertions@^1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
+ integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
acorn-jsx@^5.3.1, acorn-jsx@^5.3.2:
version "5.3.2"
@@ -6891,10 +6709,10 @@ acorn@^7.4.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-acorn@^8.0.4, acorn@^8.1.0, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1:
- version "8.8.2"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
- integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+acorn@^8.0.4, acorn@^8.1.0, acorn@^8.4.1, acorn@^8.7.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2:
+ version "8.9.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
+ integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
address@^1.0.1:
version "1.2.2"
@@ -6933,14 +6751,14 @@ ajv-keywords@^3.5.2:
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
-ajv-keywords@^5.0.0:
+ajv-keywords@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
dependencies:
fast-deep-equal "^3.1.3"
-ajv@8.12.0, ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.2, ajv@^8.8.0:
+ajv@8.12.0, ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.2, ajv@^8.9.0:
version "8.12.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
@@ -7064,11 +6882,6 @@ ansicolors@~0.3.2:
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==
-any-promise@^1.1.0, any-promise@~1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
- integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
-
anymatch@^3.0.3, anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@@ -7122,13 +6935,20 @@ argparse@^2.0.1:
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-aria-query@^5.0.0, aria-query@^5.1.3:
+aria-query@5.1.3:
version "5.1.3"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==
dependencies:
deep-equal "^2.0.5"
+aria-query@^5.0.0, aria-query@^5.1.3:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
+ integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
+ dependencies:
+ dequal "^2.0.3"
+
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
@@ -7144,6 +6964,14 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
+array-buffer-byte-length@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
+ integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
+ dependencies:
+ call-bind "^1.0.2"
+ is-array-buffer "^3.0.1"
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -7154,7 +6982,7 @@ array-flatten@^2.1.2:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
-array-includes@^3.1.4, array-includes@^3.1.5, array-includes@^3.1.6:
+array-includes@^3.1.4, array-includes@^3.1.6:
version "3.1.6"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f"
integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==
@@ -7187,7 +7015,7 @@ array-unique@^0.3.2:
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
-array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.5:
+array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
@@ -7228,7 +7056,7 @@ arrify@^2.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
-asap@~2.0.3, asap@~2.0.6:
+asap@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
@@ -7369,9 +7197,9 @@ aws-cdk@2.68.0:
fsevents "2.3.2"
aws-sdk@^2.1339.0:
- version "2.1344.0"
- resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1344.0.tgz#61b901cb8a7f011d407b320860ed2117eb5afe5a"
- integrity sha512-dOYkxyw5wSeX+UqGhVE4wXbLmw1z4t65jAYz4PdqXASbhB1YS5gFgTYnUg20psbzPnYV83KvUToWw5Sbc8tWcQ==
+ version "2.1407.0"
+ resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1407.0.tgz#8854a87192ea0bd984f44e751cd137d219180ca5"
+ integrity sha512-J02Cjciw+5p9zR7923rfH+UGDEmbg72YRAZISEahzuWPf/DwMAyIrC5B1cMMq3KrV+KVsRtEY5LujVCFKwB8Yw==
dependencies:
buffer "4.9.2"
events "1.1.1"
@@ -7382,7 +7210,7 @@ aws-sdk@^2.1339.0:
url "0.10.3"
util "^0.12.4"
uuid "8.0.0"
- xml2js "0.4.19"
+ xml2js "0.5.0"
aws-sign2@~0.7.0:
version "0.7.0"
@@ -7395,9 +7223,9 @@ aws4@^1.8.0:
integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==
axe-core@^4.6.2:
- version "4.6.3"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece"
- integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0"
+ integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==
axios@^0.21.0:
version "0.21.4"
@@ -7415,11 +7243,11 @@ axios@^0.27.2:
form-data "^4.0.0"
axobject-query@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1"
- integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a"
+ integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==
dependencies:
- deep-equal "^2.0.5"
+ dequal "^2.0.3"
babel-core@7.0.0-bridge.0, babel-core@^7.0.0-bridge.0:
version "7.0.0-bridge.0"
@@ -7492,17 +7320,6 @@ babel-plugin-macros@^3.1.0:
cosmiconfig "^7.0.0"
resolve "^1.19.0"
-babel-plugin-module-resolver@5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz#2b7fc176bd55da25f516abf96015617b4f70fc73"
- integrity sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==
- dependencies:
- find-babel-config "^2.0.0"
- glob "^8.0.3"
- pkg-up "^3.1.0"
- reselect "^4.1.7"
- resolve "^1.22.1"
-
babel-plugin-named-exports-order@^0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz#ae14909521cf9606094a2048239d69847540cb09"
@@ -7698,13 +7515,13 @@ bin-check@^4.1.0:
executable "^4.1.0"
bin-version-check@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-5.0.0.tgz#958de30174d3fcedadbfc52f89f37bca62594877"
- integrity sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-5.1.0.tgz#788e80e036a87313f8be7908bc20e5abe43f0837"
+ integrity sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==
dependencies:
bin-version "^6.0.0"
- semver "^7.3.5"
- semver-truncate "^2.0.0"
+ semver "^7.5.3"
+ semver-truncate "^3.0.0"
bin-version@^6.0.0:
version "6.0.0"
@@ -7719,11 +7536,6 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-binjumper@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/binjumper/-/binjumper-0.1.4.tgz#4acc0566832714bd6508af6d666bd9e5e21fc7f8"
- integrity sha512-Gdxhj+U295tIM6cO4bJO1jsvSjBVHNpj2o/OwW7pqDEtaqF6KdOxjtbo93jMMKAkP7+u09+bV8DhSqjIv4qR3w==
-
bl@^4.0.3, bl@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
@@ -7777,9 +7589,9 @@ body-parser@1.20.1:
unpipe "1.0.0"
bonjour-service@^1.0.11:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.0.tgz#424170268d68af26ff83a5c640b95def01803a13"
- integrity sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135"
+ integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==
dependencies:
array-flatten "^2.1.2"
dns-equal "^1.0.0"
@@ -7879,7 +7691,7 @@ browserify-zlib@^0.1.4:
dependencies:
pako "~0.2.0"
-browserslist@4.21.9:
+browserslist@4.21.9, browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.5, browserslist@^4.21.9:
version "4.21.9"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635"
integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
@@ -7889,16 +7701,6 @@ browserslist@4.21.9:
node-releases "^2.0.12"
update-browserslist-db "^1.0.11"
-browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.5:
- version "4.21.5"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7"
- integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
- dependencies:
- caniuse-lite "^1.0.30001449"
- electron-to-chromium "^1.4.284"
- node-releases "^2.0.8"
- update-browserslist-db "^1.0.10"
-
bser@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@@ -7938,6 +7740,13 @@ buffer@^5.5.0, buffer@^5.6.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
+bundle-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
+ integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==
+ dependencies:
+ run-applescript "^5.0.0"
+
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -7949,9 +7758,9 @@ bytes@3.1.2:
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
c8@^7.6.0:
- version "7.12.0"
- resolved "https://registry.yarnpkg.com/c8/-/c8-7.12.0.tgz#402db1c1af4af5249153535d1c84ad70c5c96b14"
- integrity sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/c8/-/c8-7.14.0.tgz#f368184c73b125a80565e9ab2396ff0be4d732f3"
+ integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==
dependencies:
"@bcoe/v8-coverage" "^0.2.3"
"@istanbuljs/schema" "^0.1.3"
@@ -7987,9 +7796,9 @@ cacheable-lookup@^5.0.3:
integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
cacheable-request@^7.0.2:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
- integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
+ integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
dependencies:
clone-response "^1.0.2"
get-stream "^5.1.0"
@@ -8049,7 +7858,7 @@ camelcase@^6.2.0, camelcase@^6.3.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001503:
+caniuse-lite@^1.0.30001503:
version "1.0.30001509"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14"
integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==
@@ -8192,34 +8001,25 @@ chownr@^2.0.0:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
-chromatic@^6.17.4:
- version "6.17.4"
- resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-6.17.4.tgz#6a946d51c631d871c165fe28fa2b3b0bcdf32e24"
- integrity sha512-vnlvsv2lkp8BVtTn1OumJzqkDk2qB3pcGxEDIfZtVboKtzIPjnIlGa+c1fVKQe8NvHDU8R39k8klqgKHIXUVJw==
- dependencies:
- "@discoveryjs/json-ext" "^0.5.7"
- "@types/webpack-env" "^1.17.0"
- snyk-nodejs-lockfile-parser "^1.49.0"
+chromatic@^6.19.9:
+ version "6.19.9"
+ resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-6.19.9.tgz#b73548ad31154f3ac5e1291268ee44e4778e3057"
+ integrity sha512-UHrPbPoLnJwd063cRSO0U865VhcATykpMiHsAnNFz5EFRsBvM9wefqyS2Z6W8Ti9J7Fjrf4MV4PA+Q5k2lhFfQ==
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
-ci-info@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
- integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
-
ci-info@^3.1.0, ci-info@^3.2.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
cjs-module-lexer@^1.0.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
- integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
+ integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
class-utils@^0.3.5:
version "0.3.6"
@@ -8277,9 +8077,9 @@ cli-progress@^3.12.0:
string-width "^4.2.3"
cli-spinners@^2.5.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a"
- integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
+ integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
cli-table3@^0.6.1, cli-table3@~0.6.1:
version "0.6.3"
@@ -8318,11 +8118,6 @@ cli-width@^3.0.0:
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
-clipanion@^2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/clipanion/-/clipanion-2.6.2.tgz#820e7440812052442455b248f927b187ed732f71"
- integrity sha512-0tOHJNMF9+4R3qcbBL+4IxLErpaYSYvzs10aXuECDbZdJOuJHdagJMAqvLdeaUQTI/o2uSCDRpet6ywDiKOAYw==
-
cliui@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
@@ -8377,9 +8172,9 @@ co@^4.6.0:
integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
codemaker@^1.77.0:
- version "1.78.1"
- resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.78.1.tgz#bd9fa1015327c7cc1438b7d682411f7002b8d04a"
- integrity sha512-BNyqClGzOqL+OtRb6BsYzBJo1/vZYpy2izfXlEMXhhZFvux0RWg6XB3cFnCXyTmzawJus97GWlBtcrMajeqvVQ==
+ version "1.84.0"
+ resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.84.0.tgz#da95dc297fc4be657baa49fdc3127ce1f057c6f3"
+ integrity sha512-sOUH3y2q2DEO+gDiBCCoGgkDs8aMY0LTMH0FmHbKpqReZwWDAmWJ0Voc4Thp4Mn380bPku9/ncqyY1a3MZnfEQ==
dependencies:
camelcase "^6.3.0"
decamelize "^5.0.1"
@@ -8624,17 +8419,10 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
-core-js-compat@^3.25.1:
- version "3.28.0"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.28.0.tgz#c08456d854608a7264530a2afa281fadf20ecee6"
- integrity sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==
- dependencies:
- browserslist "^4.21.5"
-
-core-js-compat@^3.30.1, core-js-compat@^3.30.2:
- version "3.30.2"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b"
- integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==
+core-js-compat@^3.25.1, core-js-compat@^3.30.1, core-js-compat@^3.30.2, core-js-compat@^3.31.0:
+ version "3.31.0"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1"
+ integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==
dependencies:
browserslist "^4.21.5"
@@ -8653,15 +8441,10 @@ core-js@^2.4.0:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
-core-js@^3.0.0:
- version "3.28.0"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.28.0.tgz#ed8b9e99c273879fdfff0edfc77ee709a5800e4a"
- integrity sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw==
-
-core-js@^3.13.0:
- version "3.30.2"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc"
- integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==
+core-js@^3.0.0, core-js@^3.13.0:
+ version "3.31.0"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344"
+ integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==
core-util-is@1.0.2:
version "1.0.2"
@@ -8726,15 +8509,6 @@ cron@1.8.2:
dependencies:
moment-timezone "^0.5.x"
-cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
cross-spawn@^5.0.1, cross-spawn@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@@ -8755,6 +8529,15 @@ cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
crypto-js@4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
@@ -8775,7 +8558,7 @@ css-functions-list@^3.1.0:
resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b"
integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==
-css-loader@6.7.3, css-loader@^6.7.1:
+css-loader@6.7.3:
version "6.7.3"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd"
integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==
@@ -8789,6 +8572,20 @@ css-loader@6.7.3, css-loader@^6.7.1:
postcss-value-parser "^4.2.0"
semver "^7.3.8"
+css-loader@^6.7.1:
+ version "6.8.1"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88"
+ integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==
+ dependencies:
+ icss-utils "^5.1.0"
+ postcss "^8.4.21"
+ postcss-modules-extract-imports "^3.0.0"
+ postcss-modules-local-by-default "^4.0.3"
+ postcss-modules-scope "^3.0.0"
+ postcss-modules-values "^4.0.0"
+ postcss-value-parser "^4.2.0"
+ semver "^7.3.8"
+
css-select@^4.1.3:
version "4.3.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
@@ -8832,11 +8629,23 @@ cssstyle@^2.3.0:
dependencies:
cssom "~0.3.6"
-csstype@3.1.1, csstype@^3.0.2:
+cssstyle@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a"
+ integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==
+ dependencies:
+ rrweb-cssom "^0.6.0"
+
+csstype@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
+csstype@^3.0.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
+ integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+
csv-generate@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff"
@@ -8963,15 +8772,24 @@ data-urls@^3.0.2:
whatwg-mimetype "^3.0.0"
whatwg-url "^11.0.0"
+data-urls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4"
+ integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==
+ dependencies:
+ abab "^2.0.6"
+ whatwg-mimetype "^3.0.0"
+ whatwg-url "^12.0.0"
+
date-format@^4.0.10, date-format@^4.0.14:
version "4.0.14"
resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400"
integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==
dayjs@^1.10.4:
- version "1.11.7"
- resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2"
- integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
+ version "1.11.8"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.8.tgz#4282f139c8c19dd6d0c7bd571e30c2d0ba7698ea"
+ integrity sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==
dayjs@~1.8.24, dayjs@~1.8.25:
version "1.8.36"
@@ -9017,7 +8835,7 @@ decamelize@^5.0.1:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9"
integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==
-decimal.js@^10.4.2:
+decimal.js@^10.4.2, decimal.js@^10.4.3:
version "10.4.3"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
@@ -9047,15 +8865,16 @@ dedent@^0.7.0:
integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
deep-equal@^2.0.5:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6"
- integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739"
+ integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==
dependencies:
+ array-buffer-byte-length "^1.0.0"
call-bind "^1.0.2"
- es-get-iterator "^1.1.2"
- get-intrinsic "^1.1.3"
+ es-get-iterator "^1.1.3"
+ get-intrinsic "^1.2.0"
is-arguments "^1.1.1"
- is-array-buffer "^3.0.1"
+ is-array-buffer "^3.0.2"
is-date-object "^1.0.5"
is-regex "^1.1.4"
is-shared-array-buffer "^1.0.2"
@@ -9063,7 +8882,7 @@ deep-equal@^2.0.5:
object-is "^1.1.5"
object-keys "^1.1.1"
object.assign "^4.1.4"
- regexp.prototype.flags "^1.4.3"
+ regexp.prototype.flags "^1.5.0"
side-channel "^1.0.4"
which-boxed-primitive "^1.0.2"
which-collection "^1.0.1"
@@ -9075,11 +8894,11 @@ deep-is@^0.1.3, deep-is@~0.1.3:
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
deepmerge@^4.0, deepmerge@^4.2.2:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b"
- integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+ integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-default-browser-id@3.0.0:
+default-browser-id@3.0.0, default-browser-id@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c"
integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==
@@ -9087,6 +8906,16 @@ default-browser-id@3.0.0:
bplist-parser "^0.2.0"
untildify "^4.0.0"
+default-browser@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da"
+ integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==
+ dependencies:
+ bundle-name "^3.0.0"
+ default-browser-id "^3.0.0"
+ execa "^7.1.1"
+ titleize "^3.0.0"
+
default-gateway@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71"
@@ -9111,7 +8940,12 @@ define-lazy-prop@^2.0.0:
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-define-properties@^1.1.3, define-properties@^1.1.4:
+define-lazy-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
+ integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
+
+define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
@@ -9147,14 +8981,14 @@ defu@^6.1.2:
integrity sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==
degenerator@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.2.tgz#6a61fcc42a702d6e50ff6023fe17bff435f68235"
- integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.4.tgz#07ccf95bc11044a37a6efc2f66029fb636e31f24"
+ integrity sha512-Z66uPeBfHZAHVmue3HPfyKu2Q0rC2cRxbTOsvmU/po5fvvcx27W4mIu9n0PUlQih4oUYvcG1BsbtVv8x7KDOSw==
dependencies:
ast-types "^0.13.2"
escodegen "^1.8.1"
esprima "^4.0.0"
- vm2 "^3.9.8"
+ vm2 "^3.9.17"
del@^6.0.0:
version "6.1.1"
@@ -9195,7 +9029,7 @@ deprecation@^2.0.0:
resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
-dequal@^2.0.0, dequal@^2.0.2:
+dequal@^2.0.0, dequal@^2.0.2, dequal@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
@@ -9247,11 +9081,6 @@ diff-sequences@^27.5.1:
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
-diff-sequences@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.2.tgz#711fe6bd8a5869fe2539cee4a5152425ff671fda"
- integrity sha512-R6P0Y6PrsH3n4hUXxL3nns0rbRk6Q33js3ygJBeEpbzLzgcNuJ61+u0RXasFpTKISw99TxUzFnumSnRLsjhLaw==
-
diff-sequences@^29.4.3:
version "29.4.3"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2"
@@ -9292,9 +9121,9 @@ dns-equal@^1.0.0:
integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==
dns-packet@^5.2.2:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
- integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d"
+ integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==
dependencies:
"@leichtgewicht/ip-codec" "^2.0.1"
@@ -9373,7 +9202,7 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1:
dependencies:
domelementtype "^2.2.0"
-domhandler@^5.0.1, domhandler@^5.0.2:
+domhandler@^5.0.2, domhandler@^5.0.3:
version "5.0.3"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
@@ -9395,13 +9224,13 @@ domutils@^2.5.2, domutils@^2.8.0:
domhandler "^4.2.0"
domutils@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c"
- integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+ integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
dependencies:
dom-serializer "^2.0.0"
domelementtype "^2.3.0"
- domhandler "^5.0.1"
+ domhandler "^5.0.3"
dot-case@^3.0.4:
version "3.0.4"
@@ -9417,9 +9246,9 @@ dotenv-expand@^10.0.0:
integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==
dotenv@^16.0.0:
- version "16.0.3"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
- integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
+ version "16.3.1"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e"
+ integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==
dset@3.1.2:
version "3.1.2"
@@ -9478,15 +9307,10 @@ ejs@^3.1.8:
dependencies:
jake "^10.8.5"
-electron-to-chromium@^1.4.284:
- version "1.4.295"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz#911d5df67542bf7554336142eb302c5ec90bba66"
- integrity sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==
-
electron-to-chromium@^1.4.431:
- version "1.4.442"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz#455f4c5bd6ae73afb634dcffee6f356c26c8e294"
- integrity sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==
+ version "1.4.445"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz#058d2c5f3a2981ab1a37440f5a5e42d15672aa6d"
+ integrity sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA==
emitter-listener@^1.1.1:
version "1.1.2"
@@ -9532,13 +9356,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies:
once "^1.4.0"
-end-of-stream@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07"
- integrity sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==
- dependencies:
- once "~1.3.0"
-
endent@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/endent/-/endent-2.1.0.tgz#5aaba698fb569e5e18e69e1ff7a28ff35373cd88"
@@ -9548,10 +9365,10 @@ endent@^2.0.1:
fast-json-parse "^1.0.3"
objectorarray "^1.0.5"
-enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0:
- version "5.12.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634"
- integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==
+enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0, enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0:
+ version "5.15.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
+ integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
@@ -9574,14 +9391,14 @@ entities@^3.0.1:
integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
entities@^4.2.0, entities@^4.3.0, entities@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
- integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
envinfo@^7.7.3:
- version "7.8.1"
- resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
- integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
+ version "7.10.0"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13"
+ integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==
error-ex@^1.3.1:
version "1.3.2"
@@ -9598,17 +9415,17 @@ error-stack-parser@^2.0.6:
stackframe "^1.3.4"
es-abstract@^1.19.0, es-abstract@^1.20.4:
- version "1.21.1"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6"
- integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==
+ version "1.21.2"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff"
+ integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==
dependencies:
+ array-buffer-byte-length "^1.0.0"
available-typed-arrays "^1.0.5"
call-bind "^1.0.2"
es-set-tostringtag "^2.0.1"
es-to-primitive "^1.2.1"
- function-bind "^1.1.1"
function.prototype.name "^1.1.5"
- get-intrinsic "^1.1.3"
+ get-intrinsic "^1.2.0"
get-symbol-description "^1.0.0"
globalthis "^1.0.3"
gopd "^1.0.1"
@@ -9616,8 +9433,8 @@ es-abstract@^1.19.0, es-abstract@^1.20.4:
has-property-descriptors "^1.0.0"
has-proto "^1.0.1"
has-symbols "^1.0.3"
- internal-slot "^1.0.4"
- is-array-buffer "^3.0.1"
+ internal-slot "^1.0.5"
+ is-array-buffer "^3.0.2"
is-callable "^1.2.7"
is-negative-zero "^2.0.2"
is-regex "^1.1.4"
@@ -9625,18 +9442,19 @@ es-abstract@^1.19.0, es-abstract@^1.20.4:
is-string "^1.0.7"
is-typed-array "^1.1.10"
is-weakref "^1.0.2"
- object-inspect "^1.12.2"
+ object-inspect "^1.12.3"
object-keys "^1.1.1"
object.assign "^4.1.4"
regexp.prototype.flags "^1.4.3"
safe-regex-test "^1.0.0"
+ string.prototype.trim "^1.2.7"
string.prototype.trimend "^1.0.6"
string.prototype.trimstart "^1.0.6"
typed-array-length "^1.0.4"
unbox-primitive "^1.0.2"
which-typed-array "^1.1.9"
-es-get-iterator@^1.1.2:
+es-get-iterator@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6"
integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==
@@ -9656,6 +9474,11 @@ es-module-lexer@^0.9.0:
resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
+es-module-lexer@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f"
+ integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==
+
es-set-tostringtag@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
@@ -9739,32 +9562,32 @@ esbuild@^0.16.17:
"@esbuild/win32-x64" "0.16.17"
esbuild@^0.17.0:
- version "0.17.15"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.15.tgz#209ebc87cb671ffb79574db93494b10ffaf43cbc"
- integrity sha512-LBUV2VsUIc/iD9ME75qhT4aJj0r75abCVS0jakhFzOtR7TQsqQA5w0tZ+KTKnwl3kXE0MhskNdHDh/I5aCR1Zw==
+ version "0.17.19"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
+ integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
optionalDependencies:
- "@esbuild/android-arm" "0.17.15"
- "@esbuild/android-arm64" "0.17.15"
- "@esbuild/android-x64" "0.17.15"
- "@esbuild/darwin-arm64" "0.17.15"
- "@esbuild/darwin-x64" "0.17.15"
- "@esbuild/freebsd-arm64" "0.17.15"
- "@esbuild/freebsd-x64" "0.17.15"
- "@esbuild/linux-arm" "0.17.15"
- "@esbuild/linux-arm64" "0.17.15"
- "@esbuild/linux-ia32" "0.17.15"
- "@esbuild/linux-loong64" "0.17.15"
- "@esbuild/linux-mips64el" "0.17.15"
- "@esbuild/linux-ppc64" "0.17.15"
- "@esbuild/linux-riscv64" "0.17.15"
- "@esbuild/linux-s390x" "0.17.15"
- "@esbuild/linux-x64" "0.17.15"
- "@esbuild/netbsd-x64" "0.17.15"
- "@esbuild/openbsd-x64" "0.17.15"
- "@esbuild/sunos-x64" "0.17.15"
- "@esbuild/win32-arm64" "0.17.15"
- "@esbuild/win32-ia32" "0.17.15"
- "@esbuild/win32-x64" "0.17.15"
+ "@esbuild/android-arm" "0.17.19"
+ "@esbuild/android-arm64" "0.17.19"
+ "@esbuild/android-x64" "0.17.19"
+ "@esbuild/darwin-arm64" "0.17.19"
+ "@esbuild/darwin-x64" "0.17.19"
+ "@esbuild/freebsd-arm64" "0.17.19"
+ "@esbuild/freebsd-x64" "0.17.19"
+ "@esbuild/linux-arm" "0.17.19"
+ "@esbuild/linux-arm64" "0.17.19"
+ "@esbuild/linux-ia32" "0.17.19"
+ "@esbuild/linux-loong64" "0.17.19"
+ "@esbuild/linux-mips64el" "0.17.19"
+ "@esbuild/linux-ppc64" "0.17.19"
+ "@esbuild/linux-riscv64" "0.17.19"
+ "@esbuild/linux-s390x" "0.17.19"
+ "@esbuild/linux-x64" "0.17.19"
+ "@esbuild/netbsd-x64" "0.17.19"
+ "@esbuild/openbsd-x64" "0.17.19"
+ "@esbuild/sunos-x64" "0.17.19"
+ "@esbuild/win32-arm64" "0.17.19"
+ "@esbuild/win32-ia32" "0.17.19"
+ "@esbuild/win32-x64" "0.17.19"
escalade@^3.1.1:
version "3.1.1"
@@ -9837,25 +9660,17 @@ eslint-config-airbnb-typescript@17.0.0:
dependencies:
eslint-config-airbnb-base "^15.0.0"
-eslint-config-prettier@8.5.0:
- version "8.5.0"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1"
- integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==
-
eslint-config-prettier@8.6.0:
version "8.6.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz#dec1d29ab728f4fa63061774e1672ac4e363d207"
integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==
-eslint-import-resolver-babel-module@5.3.2:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-5.3.2.tgz#67ed1cd2689d97e9566a8dbc2c6483671a6bde33"
- integrity sha512-K7D8n0O6p/JJncPote8yiuB7chJfu26Yn/Q3gzT53cNzJNS0NUCkI0iuimj4/vWVRHVQvPnYWeq07V8RvKjz/A==
- dependencies:
- pkg-up "^3.1.0"
- resolve "^1.20.0"
+eslint-config-prettier@8.8.0:
+ version "8.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348"
+ integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==
-eslint-import-resolver-node@^0.3.6:
+eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7:
version "0.3.7"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7"
integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==
@@ -9864,18 +9679,19 @@ eslint-import-resolver-node@^0.3.6:
is-core-module "^2.11.0"
resolve "^1.22.1"
-eslint-import-resolver-typescript@3.5.2:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz#9431acded7d898fd94591a08ea9eec3514c7de91"
- integrity sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==
+eslint-import-resolver-typescript@3.5.5:
+ version "3.5.5"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d"
+ integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==
dependencies:
debug "^4.3.4"
- enhanced-resolve "^5.10.0"
- get-tsconfig "^4.2.0"
- globby "^13.1.2"
- is-core-module "^2.10.0"
+ enhanced-resolve "^5.12.0"
+ eslint-module-utils "^2.7.4"
+ get-tsconfig "^4.5.0"
+ globby "^13.1.3"
+ is-core-module "^2.11.0"
is-glob "^4.0.3"
- synckit "^0.8.4"
+ synckit "^0.8.5"
eslint-module-utils@^2.7.3:
version "2.7.4"
@@ -9884,6 +9700,13 @@ eslint-module-utils@^2.7.3:
dependencies:
debug "^3.2.7"
+eslint-module-utils@^2.7.4:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49"
+ integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==
+ dependencies:
+ debug "^3.2.7"
+
eslint-plugin-custom-elements@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/eslint-plugin-custom-elements/-/eslint-plugin-custom-elements-0.0.8.tgz#31ff231a4ab1912c5b5ecd58483eabefe9057522"
@@ -9923,6 +9746,27 @@ eslint-plugin-import@2.26.0:
resolve "^1.22.0"
tsconfig-paths "^3.14.1"
+eslint-plugin-import@2.27.5:
+ version "2.27.5"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65"
+ integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ array.prototype.flatmap "^1.3.1"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.7"
+ eslint-module-utils "^2.7.4"
+ has "^1.0.3"
+ is-core-module "^2.11.0"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.values "^1.1.6"
+ resolve "^1.22.1"
+ semver "^6.3.0"
+ tsconfig-paths "^3.14.1"
+
eslint-plugin-jsx-a11y@6.7.1:
version "6.7.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976"
@@ -10088,9 +9932,9 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
esquery@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
- integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
+ integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
dependencies:
estraverse "^5.1.0"
@@ -10130,13 +9974,6 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
-event-loop-spinner@^2.0.0, event-loop-spinner@^2.1.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/event-loop-spinner/-/event-loop-spinner-2.2.0.tgz#5b9bdf1759a5d9600576260ae770446a1a16c9b0"
- integrity sha512-KB44sV4Mv7uLIkJHJ5qhiZe5um6th2g57nHQL/uqnPHKP2IswoTRWUteEXTJQL4gW++1zqWUni+H2hGkP51c9w==
- dependencies:
- tslib "^2.1.0"
-
event-stream@=3.3.4:
version "3.3.4"
resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
@@ -10228,7 +10065,7 @@ execa@^0.7.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
-execa@^7.0.0:
+execa@^7.0.0, execa@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43"
integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==
@@ -10268,18 +10105,7 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-expect@^29.0.0:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.2.tgz#2ae34eb88de797c64a1541ad0f1e2ea8a7a7b492"
- integrity sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ==
- dependencies:
- "@jest/expect-utils" "^29.4.2"
- jest-get-type "^29.4.2"
- jest-matcher-utils "^29.4.2"
- jest-message-util "^29.4.2"
- jest-util "^29.4.2"
-
-expect@^29.5.0:
+expect@^29.0.0, expect@^29.5.0:
version "29.5.0"
resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7"
integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==
@@ -10443,7 +10269,7 @@ fast-glob@^2.2.6:
merge2 "^1.2.3"
micromatch "^3.1.10"
-fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.2, fast-glob@^3.2.5, fast-glob@^3.2.9:
+fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9:
version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
@@ -10557,9 +10383,9 @@ fetch-mock@9.11.0:
whatwg-url "^6.5.0"
fetch-retry@^5.0.2:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.3.tgz#edfa3641892995f9afee94f25b168827aa97fe3d"
- integrity sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==
+ version "5.0.6"
+ resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.6.tgz#17d0bc90423405b7a88b74355bf364acd2a7fa56"
+ integrity sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==
figures@3.2.x, figures@^3.0.0, figures@^3.2.0:
version "3.2.0"
@@ -10576,12 +10402,12 @@ file-entry-cache@^6.0.1:
flat-cache "^3.0.4"
file-system-cache@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.0.2.tgz#6b51d58c5786302146fa883529e0d7f88896e948"
- integrity sha512-lp4BHO4CWqvRyx88Tt3quZic9ZMf4cJyquYq7UI8sH42Bm2ArlBBjKQAalZOo+UfaBassb7X123Lik5qZ/tSAA==
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.4.1.tgz#4e02ea62b9cdea9874909685131f7fe852fc5ff6"
+ integrity sha512-mzEiUdjzqhxwppIJVSBq8C9evWM1j0v/lCg7gFMDiQDQPlQSm8kRfXSPFScT1p/Fxy0N2LSIps6g28e8itumlg==
dependencies:
- fs-extra "^11.1.0"
- ramda "^0.28.0"
+ fs-extra "11.1.1"
+ ramda "0.29.0"
file-type@^17.1.6:
version "17.1.6"
@@ -10597,7 +10423,7 @@ file-uri-to-path@2:
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba"
integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==
-filelist@^1.0.1:
+filelist@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
@@ -10648,14 +10474,6 @@ finalhandler@1.2.0:
statuses "2.0.1"
unpipe "~1.0.0"
-find-babel-config@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.0.0.tgz#a8216f825415a839d0f23f4d18338a1cc966f701"
- integrity sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==
- dependencies:
- json5 "^2.1.1"
- path-exists "^4.0.0"
-
find-cache-dir@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
@@ -10738,9 +10556,9 @@ flatted@^3.1.0, flatted@^3.2.5:
integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
flow-parser@0.*:
- version "0.203.1"
- resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.203.1.tgz#04180e57e6b8b658212bd4371017d11bf917b257"
- integrity sha512-Nw2M8MPP/Zb+yhvmPDEjzkCXLtgyWGKXZjAYOVftm+wIf3xd4FKa7nRI9v67rODs0WzxMbPc8IPs/7o/dyxo/Q==
+ version "0.210.1"
+ resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.210.1.tgz#6e04775dc2ebd5bde6a37de38532836678a5ac3e"
+ integrity sha512-M0SdOwD0wZHhk6K/AOaPReBnw2vB7p9KUFUFZHJRsU3ZMl/+WVrMpmb8AfEM6GXZ5mEssCx9vHugxxJg1ieoew==
follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9:
version "1.15.2"
@@ -10849,19 +10667,19 @@ fs-constants@^1.0.0:
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
-fs-extra@^10.0.0, fs-extra@^10.1.0:
- version "10.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
- integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+fs-extra@11.1.1, fs-extra@^11.1.0:
+ version "11.1.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d"
+ integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-extra@^11.1.0:
- version "11.1.1"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d"
- integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==
+fs-extra@^10.0.0, fs-extra@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
@@ -10902,10 +10720,10 @@ fs-minipass@^2.0.0:
dependencies:
minipass "^3.0.0"
-fs-monkey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
- integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
+fs-monkey@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747"
+ integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==
fs.realpath@^1.0.0:
version "1.0.0"
@@ -10947,7 +10765,7 @@ function.prototype.name@^1.1.5:
es-abstract "^1.19.0"
functions-have-names "^1.2.2"
-functions-have-names@^1.2.2:
+functions-have-names@^1.2.2, functions-have-names@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
@@ -10978,12 +10796,13 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5:
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f"
- integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+ integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
+ has-proto "^1.0.1"
has-symbols "^1.0.3"
get-npm-tarball-url@^2.0.3:
@@ -11026,10 +10845,12 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
-get-tsconfig@^4.2.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5"
- integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==
+get-tsconfig@^4.5.0:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e"
+ integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==
+ dependencies:
+ resolve-pkg-maps "^1.0.0"
get-uri@3:
version "3.0.2"
@@ -11133,9 +10954,9 @@ glob-parent@^6.0.2:
is-glob "^4.0.3"
glob-promise@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-6.0.2.tgz#7c7f2a223e3aaa8f7bd7ff5f24d0ab2352724b31"
- integrity sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ==
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-6.0.3.tgz#e6b3ab02d350b3f4b3e15b57e4485986e41ba2fe"
+ integrity sha512-m+kxywR5j/2Z2V9zvHKfwwL5Gp7gIFEBX+deTB9w2lJB+wSuw9kcS43VfvTAMk8TXL5JCl/cCjsR+tgNVspGyA==
dependencies:
"@types/glob" "^8.0.0"
@@ -11161,7 +10982,7 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^8.0.3, glob@^8.1.0:
+glob@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
@@ -11214,11 +11035,6 @@ globalthis@^1.0.3:
dependencies:
define-properties "^1.1.3"
-globalyzer@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465"
- integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==
-
globby@^11.0.0, globby@^11.0.1, globby@^11.0.2, globby@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
@@ -11231,10 +11047,10 @@ globby@^11.0.0, globby@^11.0.1, globby@^11.0.2, globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
-globby@^13.1.2:
- version "13.1.3"
- resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff"
- integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==
+globby@^13.1.3:
+ version "13.2.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.1.tgz#986d44187ba6a9fc4aa9b16caf0ab9a04db94ae9"
+ integrity sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg==
dependencies:
dir-glob "^3.0.1"
fast-glob "^3.2.11"
@@ -11261,11 +11077,6 @@ globjoin@^0.1.4:
resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==
-globrex@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
- integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
-
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -11273,7 +11084,7 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
-got@^11.7.0, got@^11.8.5:
+got@^11.8.5:
version "11.8.6"
resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
@@ -11290,12 +11101,7 @@ got@^11.7.0, got@^11.8.5:
p-cancelable "^2.0.0"
responselike "^2.0.0"
-graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
- version "4.2.10"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
- integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
-
-graceful-fs@^4.1.5:
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
@@ -11436,9 +11242,9 @@ has@^1.0.3:
function-bind "^1.1.1"
hast-util-from-parse5@^7.0.0:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.1.tgz#1887b4dd4e19f29d9c48c2e1c8bfeaac13a1f3a0"
- integrity sha512-R6PoNcUs89ZxLJmMWsVbwSWuz95/9OriyQZ3e2ybwqGsRXzhA6gv49rgGmQvLbZuSNDv9fCg7vV7gXUsvtUFaA==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0"
+ integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==
dependencies:
"@types/hast" "^2.0.0"
"@types/unist" "^2.0.0"
@@ -11593,9 +11399,9 @@ html-encoding-sniffer@^3.0.0:
whatwg-encoding "^2.0.0"
html-entities@^2.1.0, html-entities@^2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46"
- integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061"
+ integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==
html-escaper@^2.0.0:
version "2.0.2"
@@ -11629,9 +11435,9 @@ html-minifier-terser@^6.0.2:
terser "^5.10.0"
html-tags@^3.1.0, html-tags@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961"
- integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
+ integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
html-tokenize@^2.0.0:
version "2.0.1"
@@ -11650,9 +11456,9 @@ html-void-elements@^2.0.0:
integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==
html-webpack-plugin@^5.5.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50"
- integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==
+ version "5.5.3"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e"
+ integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==
dependencies:
"@types/html-minifier-terser" "^6.0.0"
html-minifier-terser "^6.0.2"
@@ -11660,7 +11466,7 @@ html-webpack-plugin@^5.5.0:
pretty-error "^4.0.0"
tapable "^2.0.0"
-htmlparser2@8.0.1, htmlparser2@^8.0.0:
+htmlparser2@8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010"
integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==
@@ -11690,6 +11496,16 @@ htmlparser2@^7.2.0:
domutils "^2.8.0"
entities "^3.0.1"
+htmlparser2@^8.0.0:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+ integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+ entities "^4.4.0"
+
http-cache-semantics@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
@@ -11963,7 +11779,7 @@ inquirer@8.2.5:
through "^2.3.6"
wrap-ansi "^7.0.0"
-internal-slot@^1.0.3, internal-slot@^1.0.4:
+internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
@@ -11998,9 +11814,9 @@ ipaddr.js@1.9.1:
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
ipaddr.js@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
- integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f"
+ integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==
is-absolute-url@^3.0.0:
version "3.0.3"
@@ -12042,13 +11858,13 @@ is-arguments@^1.0.4, is-arguments@^1.1.1:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
-is-array-buffer@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a"
- integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==
+is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
+ integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
dependencies:
call-bind "^1.0.2"
- get-intrinsic "^1.1.3"
+ get-intrinsic "^1.2.0"
is-typed-array "^1.1.10"
is-arrayish@^0.2.1:
@@ -12088,7 +11904,7 @@ is-buffer@^2.0.0:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
-is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.7:
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
@@ -12100,10 +11916,10 @@ is-ci@^3.0.0, is-ci@^3.0.1:
dependencies:
ci-info "^3.2.0"
-is-core-module@^2.10.0, is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
- integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
+is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0:
+ version "2.12.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
+ integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
dependencies:
has "^1.0.3"
@@ -12161,6 +11977,11 @@ is-docker@^2.0.0, is-docker@^2.1.1:
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+is-docker@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
+ integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
+
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -12224,6 +12045,13 @@ is-hexadecimal@^1.0.0:
resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
+is-inside-container@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
+ integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
+ dependencies:
+ is-docker "^3.0.0"
+
is-installed-globally@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
@@ -12447,11 +12275,6 @@ is-wsl@^2.1.1, is-wsl@^2.2.0:
dependencies:
is-docker "^2.0.0"
-is@^3.2.1:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79"
- integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==
-
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -12540,14 +12363,14 @@ istanbul-reports@^3.1.3, istanbul-reports@^3.1.4:
istanbul-lib-report "^3.0.0"
jake@^10.8.5:
- version "10.8.5"
- resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46"
- integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==
+ version "10.8.7"
+ resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
+ integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==
dependencies:
async "^3.2.3"
chalk "^4.0.2"
- filelist "^1.0.1"
- minimatch "^3.0.4"
+ filelist "^1.0.4"
+ minimatch "^3.1.2"
jest-changed-files@^29.5.0:
version "29.5.0"
@@ -12639,16 +12462,6 @@ jest-diff@^27.5.1:
jest-get-type "^27.5.1"
pretty-format "^27.5.1"
-jest-diff@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.2.tgz#b88502d5dc02d97f6512d73c37da8b36f49b4871"
- integrity sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g==
- dependencies:
- chalk "^4.0.0"
- diff-sequences "^29.4.2"
- jest-get-type "^29.4.2"
- pretty-format "^29.4.2"
-
jest-diff@^29.5.0:
version "29.5.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63"
@@ -12708,11 +12521,6 @@ jest-get-type@^27.5.1:
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
-jest-get-type@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.2.tgz#7cb63f154bca8d8f57364d01614477d466fa43fe"
- integrity sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg==
-
jest-get-type@^29.4.3:
version "29.4.3"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5"
@@ -12755,16 +12563,6 @@ jest-matcher-utils@^27.0.0:
jest-get-type "^27.5.1"
pretty-format "^27.5.1"
-jest-matcher-utils@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.2.tgz#08d0bf5abf242e3834bec92c7ef5071732839e85"
- integrity sha512-EZaAQy2je6Uqkrm6frnxBIdaWtSYFoR8SVb2sNLAtldswlR/29JAgx+hy67llT3+hXBaLB0zAm5UfeqerioZyg==
- dependencies:
- chalk "^4.0.0"
- jest-diff "^29.4.2"
- jest-get-type "^29.4.2"
- pretty-format "^29.4.2"
-
jest-matcher-utils@^29.5.0:
version "29.5.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5"
@@ -12775,21 +12573,6 @@ jest-matcher-utils@^29.5.0:
jest-get-type "^29.4.3"
pretty-format "^29.5.0"
-jest-message-util@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.2.tgz#309a2924eae6ca67cf7f25781a2af1902deee717"
- integrity sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@jest/types" "^29.4.2"
- "@types/stack-utils" "^2.0.0"
- chalk "^4.0.0"
- graceful-fs "^4.2.9"
- micromatch "^4.0.4"
- pretty-format "^29.4.2"
- slash "^3.0.0"
- stack-utils "^2.0.3"
-
jest-message-util@^29.5.0:
version "29.5.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e"
@@ -12936,18 +12719,6 @@ jest-teamcity-reporter@0.9.0:
resolved "https://registry.yarnpkg.com/jest-teamcity-reporter/-/jest-teamcity-reporter-0.9.0.tgz#a9f337a928a14e7e84163817456b930ecf7cbce8"
integrity sha512-q6W+ZaJSCIXmxC9wsY67zNn+vwG/EgKJygYJYH860jih5zS6mc2ZFc4v78gh6rgzgM9/siUtQm7SnRunYuWmVw==
-jest-util@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.2.tgz#3db8580b295df453a97de4a1b42dd2578dabd2c2"
- integrity sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g==
- dependencies:
- "@jest/types" "^29.4.2"
- "@types/node" "*"
- chalk "^4.0.0"
- ci-info "^3.2.0"
- graceful-fs "^4.2.9"
- picomatch "^2.2.3"
-
jest-util@^29.5.0:
version "29.5.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f"
@@ -13021,9 +12792,9 @@ jmespath@0.16.0:
integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==
joi@^17.7.0:
- version "17.7.1"
- resolved "https://registry.yarnpkg.com/joi/-/joi-17.7.1.tgz#854fc85c7fa3cfc47c91124d30bffdbb58e06cec"
- integrity sha512-teoLhIvWE298R6AeJywcjR4sX2hHjB3/xJX4qPjg+gTg+c0mzUDsziYlqPmLomq9gVsfaMcgPaGc7VxtD/9StA==
+ version "17.9.2"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690"
+ integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==
dependencies:
"@hapi/hoek" "^9.0.0"
"@hapi/topo" "^5.0.0"
@@ -13047,16 +12818,16 @@ js-git@^0.7.8:
pako "^0.2.5"
js-sdsl@^4.1.4:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711"
- integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.1.tgz#9e3c7b566d8d9a7e1fe8fc26d00b5ab0f8918ab3"
+ integrity sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-js-yaml@^3.10.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1:
+js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.1, js-yaml@^3.6.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
@@ -13101,7 +12872,36 @@ jscodeshift@^0.14.0:
temp "^0.8.4"
write-file-atomic "^2.3.0"
-jsdom@20.0.3, jsdom@^20.0.0:
+jsdom@22.1.0:
+ version "22.1.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8"
+ integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==
+ dependencies:
+ abab "^2.0.6"
+ cssstyle "^3.0.0"
+ data-urls "^4.0.0"
+ decimal.js "^10.4.3"
+ domexception "^4.0.0"
+ form-data "^4.0.0"
+ html-encoding-sniffer "^3.0.0"
+ http-proxy-agent "^5.0.0"
+ https-proxy-agent "^5.0.1"
+ is-potential-custom-element-name "^1.0.1"
+ nwsapi "^2.2.4"
+ parse5 "^7.1.2"
+ rrweb-cssom "^0.6.0"
+ saxes "^6.0.0"
+ symbol-tree "^3.2.4"
+ tough-cookie "^4.1.2"
+ w3c-xmlserializer "^4.0.0"
+ webidl-conversions "^7.0.0"
+ whatwg-encoding "^2.0.0"
+ whatwg-mimetype "^3.0.0"
+ whatwg-url "^12.0.1"
+ ws "^8.13.0"
+ xml-name-validator "^4.0.0"
+
+jsdom@^20.0.0:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db"
integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==
@@ -13148,17 +12948,6 @@ json-buffer@3.0.1:
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-json-file-plus@^3.3.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/json-file-plus/-/json-file-plus-3.3.1.tgz#f4363806b82819ff8803d83d539d6a9edd2a5258"
- integrity sha512-wo0q1UuiV5NsDPQDup1Km8IwEeqe+olr8tkWxeJq9Bjtcp7DZ0l+yrg28fSC3DEtrE311mhTZ54QGS6oiqnZEA==
- dependencies:
- is "^3.2.1"
- node.extend "^2.0.0"
- object.assign "^4.1.0"
- promiseback "^2.0.2"
- safer-buffer "^2.0.2"
-
json-parse-better-errors@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
@@ -13194,14 +12983,14 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
-json5@^1.0.1:
+json5@^1.0.1, json5@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
dependencies:
minimist "^1.2.0"
-json5@^2.1.1, json5@^2.1.2, json5@^2.2.0, json5@^2.2.2:
+json5@^2.1.2, json5@^2.2.0, json5@^2.2.2:
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
@@ -13243,12 +13032,14 @@ jsprim@^2.0.2:
verror "1.10.0"
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea"
- integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz#b896535fed5b867650acce5a9bd4135ffc7b3bf9"
+ integrity sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==
dependencies:
- array-includes "^3.1.5"
- object.assign "^4.1.3"
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ object.assign "^4.1.4"
+ object.values "^1.1.6"
junk@^3.1.0:
version "3.1.0"
@@ -13536,86 +13327,31 @@ lodash.camelcase@^4.3.0:
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
-lodash.clone@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6"
- integrity sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==
-
-lodash.clonedeep@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
- integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
-
-lodash.constant@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash.constant/-/lodash.constant-3.0.0.tgz#bfe05cce7e515b3128925d6362138420bd624910"
- integrity sha512-X5XMrB+SdI1mFa81162NSTo/YNd23SLdLOLzcXTwS4inDZ5YCL8X67UFzZJAH4CqIa6R8cr56CShfA5K5MFiYQ==
-
lodash.debounce@4.0.8, lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
-lodash.filter@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace"
- integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==
-
-lodash.flatmap@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz#ef8cbf408f6e48268663345305c6acc0b778702e"
- integrity sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==
-
-lodash.foreach@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
- integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==
-
lodash.get@4.4.2, lodash.get@^4.0:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==
-lodash.has@^4.0, lodash.has@^4.5.2:
+lodash.has@^4.0:
version "4.5.2"
resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
integrity sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==
-lodash.isempty@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
- integrity sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==
-
lodash.isequal@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
-lodash.isfunction@^3.0.9:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051"
- integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==
-
-lodash.isundefined@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48"
- integrity sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==
-
lodash.kebabcase@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==
-lodash.keys@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205"
- integrity sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==
-
-lodash.map@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
- integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==
-
lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
@@ -13626,16 +13362,6 @@ lodash.once@^4.1.1:
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
-lodash.reduce@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
- integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==
-
-lodash.size@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.size/-/lodash.size-4.2.0.tgz#71fe75ed3eabdb2bcb73a1b0b4f51c392ee27b86"
- integrity sha512-wbu3SF1XC5ijqm0piNxw59yCbuUf2kaShumYBLWUrcCvwh6C8odz6SY/wGVzCWTQTFL/1Ygbvqg2eLtspUVVAQ==
-
lodash.sortby@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
@@ -13646,36 +13372,16 @@ lodash.startcase@^4.4.0:
resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8"
integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==
-lodash.topairs@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.topairs/-/lodash.topairs-4.3.0.tgz#3b6deaa37d60fb116713c46c5f17ea190ec48d64"
- integrity sha512-qrRMbykBSEGdOgQLJJqVSdPWMD7Q+GJJ5jMRfQYb+LTLsw3tYVIabnCzRqTJb2WTo17PG5gNzXuFaZgYH/9SAQ==
-
-lodash.transform@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0"
- integrity sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==
-
lodash.truncate@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==
-lodash.union@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
- integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==
-
lodash.upperfirst@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce"
integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==
-lodash.values@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347"
- integrity sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==
-
lodash@4.17.21, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
@@ -13766,11 +13472,6 @@ lru_map@^0.3.3:
resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
-lz-string@^1.4.4:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
- integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==
-
lz-string@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
@@ -13843,9 +13544,9 @@ markdown-table@^2.0.0:
repeat-string "^1.0.0"
markdown-to-jsx@^7.1.8:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.2.0.tgz#e7b46b65955f6a04d48a753acd55874a14bdda4b"
- integrity sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==
+ version "7.2.1"
+ resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz#87061fd3176ad926ef3d99493e5c57f6335e0c51"
+ integrity sha512-9HrdzBAo0+sFz9ZYAGT5fB8ilzTW+q6lPocRxrIesMO+aB40V9MgFfbfMXxlGjf22OpRy+IXlvVaQenicdpgbg==
mathml-tag-names@^2.1.3:
version "2.1.3"
@@ -13897,9 +13598,9 @@ mdast-util-from-markdown@^0.8.0:
unist-util-stringify-position "^2.0.0"
mdast-util-from-markdown@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz#0214124154f26154a2b3f9d401155509be45e894"
- integrity sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0"
+ integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==
dependencies:
"@types/mdast" "^3.0.0"
"@types/unist" "^2.0.0"
@@ -14000,9 +13701,9 @@ mdast-util-to-string@^2.0.0:
integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==
mdast-util-to-string@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.1.tgz#db859050d79d48cf9896d294de06f3ede7474d16"
- integrity sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789"
+ integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==
dependencies:
"@types/mdast" "^3.0.0"
@@ -14012,11 +13713,11 @@ media-typer@0.3.0:
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
memfs@^3.4.1, memfs@^3.4.3:
- version "3.4.13"
- resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345"
- integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6"
+ integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==
dependencies:
- fs-monkey "^1.0.3"
+ fs-monkey "^1.0.4"
memoizerific@^1.11.3:
version "1.11.3"
@@ -14086,9 +13787,9 @@ methods@~1.1.2:
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
micromark-core-commonmark@^1.0.1:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad"
- integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8"
+ integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==
dependencies:
decode-named-character-reference "^1.0.0"
micromark-factory-destination "^1.0.0"
@@ -14167,18 +13868,18 @@ micromark-extension-gfm@^0.3.0:
micromark-extension-gfm-task-list-item "~0.3.0"
micromark-factory-destination@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e"
- integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f"
+ integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==
dependencies:
micromark-util-character "^1.0.0"
micromark-util-symbol "^1.0.0"
micromark-util-types "^1.0.0"
micromark-factory-label@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137"
- integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68"
+ integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==
dependencies:
micromark-util-character "^1.0.0"
micromark-util-symbol "^1.0.0"
@@ -14186,28 +13887,27 @@ micromark-factory-label@^1.0.0:
uvu "^0.5.0"
micromark-factory-space@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633"
- integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf"
+ integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==
dependencies:
micromark-util-character "^1.0.0"
micromark-util-types "^1.0.0"
micromark-factory-title@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f"
- integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1"
+ integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==
dependencies:
micromark-factory-space "^1.0.0"
micromark-util-character "^1.0.0"
micromark-util-symbol "^1.0.0"
micromark-util-types "^1.0.0"
- uvu "^0.5.0"
micromark-factory-whitespace@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c"
- integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705"
+ integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==
dependencies:
micromark-factory-space "^1.0.0"
micromark-util-character "^1.0.0"
@@ -14215,48 +13915,48 @@ micromark-factory-whitespace@^1.0.0:
micromark-util-types "^1.0.0"
micromark-util-character@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86"
- integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc"
+ integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==
dependencies:
micromark-util-symbol "^1.0.0"
micromark-util-types "^1.0.0"
micromark-util-chunked@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06"
- integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b"
+ integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==
dependencies:
micromark-util-symbol "^1.0.0"
micromark-util-classify-character@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20"
- integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d"
+ integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==
dependencies:
micromark-util-character "^1.0.0"
micromark-util-symbol "^1.0.0"
micromark-util-types "^1.0.0"
micromark-util-combine-extensions@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5"
- integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84"
+ integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==
dependencies:
micromark-util-chunked "^1.0.0"
micromark-util-types "^1.0.0"
micromark-util-decode-numeric-character-reference@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946"
- integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6"
+ integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==
dependencies:
micromark-util-symbol "^1.0.0"
micromark-util-decode-string@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02"
- integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c"
+ integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==
dependencies:
decode-named-character-reference "^1.0.0"
micromark-util-character "^1.0.0"
@@ -14264,42 +13964,42 @@ micromark-util-decode-string@^1.0.0:
micromark-util-symbol "^1.0.0"
micromark-util-encode@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383"
- integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5"
+ integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==
micromark-util-html-tag-name@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz#eb227118befd51f48858e879b7a419fc0df20497"
- integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588"
+ integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==
micromark-util-normalize-identifier@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828"
- integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7"
+ integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==
dependencies:
micromark-util-symbol "^1.0.0"
micromark-util-resolve-all@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88"
- integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188"
+ integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==
dependencies:
micromark-util-types "^1.0.0"
micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz#f12e07a85106b902645e0364feb07cf253a85aee"
- integrity sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d"
+ integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==
dependencies:
micromark-util-character "^1.0.0"
micromark-util-encode "^1.0.0"
micromark-util-symbol "^1.0.0"
micromark-util-subtokenize@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105"
- integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1"
+ integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==
dependencies:
micromark-util-chunked "^1.0.0"
micromark-util-symbol "^1.0.0"
@@ -14307,14 +14007,14 @@ micromark-util-subtokenize@^1.0.0:
uvu "^0.5.0"
micromark-util-symbol@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e"
- integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142"
+ integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==
micromark-util-types@^1.0.0, micromark-util-types@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20"
- integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283"
+ integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==
micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3:
version "2.11.4"
@@ -14325,9 +14025,9 @@ micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3:
parse-entities "^2.0.0"
micromark@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.1.0.tgz#eeba0fe0ac1c9aaef675157b52c166f125e89f62"
- integrity sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9"
+ integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==
dependencies:
"@types/debug" "^4.0.0"
debug "^4.0.0"
@@ -14466,10 +14166,10 @@ minipass@^3.0.0:
dependencies:
yallist "^4.0.0"
-minipass@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.3.tgz#00bfbaf1e16e35e804f4aa31a7c1f6b8d9f0ee72"
- integrity sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==
+minipass@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+ integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
minizlib@^2.1.1:
version "2.1.2"
@@ -14502,7 +14202,7 @@ mkdirp@1.0.4, mkdirp@^1.0.3:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-mkdirp@^0.5.1, mkdirp@^0.5.4:
+mkdirp@^0.5.4:
version "0.5.6"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
@@ -14520,13 +14220,13 @@ module-details-from-path@^1.0.3:
integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==
moment-timezone@^0.5.x:
- version "0.5.40"
- resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.40.tgz#c148f5149fd91dd3e29bf481abc8830ecba16b89"
- integrity sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==
+ version "0.5.43"
+ resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790"
+ integrity sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==
dependencies:
- moment ">= 2.9.0"
+ moment "^2.29.4"
-"moment@>= 2.9.0":
+moment@^2.29.4:
version "2.29.4"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
@@ -14582,10 +14282,10 @@ mute-stream@0.0.8, mute-stream@~0.0.4:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
-nanoid@^3.3.1, nanoid@^3.3.4:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
- integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+nanoid@^3.3.1, nanoid@^3.3.6:
+ version "3.3.6"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
+ integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
nanomatch@^1.2.9:
version "1.2.13"
@@ -14674,9 +14374,9 @@ node-dir@^0.1.10, node-dir@^0.1.17:
minimatch "^3.0.2"
node-fetch-native@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.0.2.tgz#de3651399fda89a1a7c0bf6e7c4e9c239e8d0697"
- integrity sha512-KIkvH1jl6b3O7es/0ShyCgWLcfXxlBrLBbP3rOr23WArC66IMcU4DeZEeYEOwnopYhawLTn7/y+YtmASe8DFVQ==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.2.0.tgz#13ec6df98f33168958dbfb6945f10aedf42e7ea8"
+ integrity sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==
node-fetch@2.6.7:
version "2.6.7"
@@ -14686,9 +14386,9 @@ node-fetch@2.6.7:
whatwg-url "^5.0.0"
node-fetch@^2.6.1, node-fetch@^2.6.7:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
- integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
+ integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
dependencies:
whatwg-url "^5.0.0"
@@ -14707,19 +14407,6 @@ node-releases@^2.0.12:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039"
integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
-node-releases@^2.0.8:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f"
- integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==
-
-node.extend@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-2.0.2.tgz#b4404525494acc99740f3703c496b7d5182cc6cc"
- integrity sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==
- dependencies:
- has "^1.0.3"
- is "^3.2.1"
-
nodemon@2.0.20:
version "2.0.20"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701"
@@ -14834,10 +14521,10 @@ nth-check@^2.0.1:
dependencies:
boolbase "^1.0.0"
-nwsapi@^2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0"
- integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==
+nwsapi@^2.2.2, nwsapi@^2.2.4:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.5.tgz#a52744c61b3889dd44b0a158687add39b8d935e2"
+ integrity sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==
object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
@@ -14853,12 +14540,7 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
-object-hash@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
- integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
-
-object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0:
+object-inspect@^1.12.3, object-inspect@^1.9.0:
version "1.12.3"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
@@ -14893,7 +14575,7 @@ object-visit@^1.0.0:
dependencies:
isobject "^3.0.0"
-object.assign@^4.1.0, object.assign@^4.1.2, object.assign@^4.1.3, object.assign@^4.1.4:
+object.assign@^4.1.2, object.assign@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
@@ -14974,13 +14656,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
-once@~1.3.0:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
- integrity sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==
- dependencies:
- wrappy "1"
-
onetime@^5.1.0, onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
@@ -15004,14 +14679,24 @@ open@^7.0.3:
is-wsl "^2.1.1"
open@^8.0.9, open@^8.4.0:
- version "8.4.1"
- resolved "https://registry.yarnpkg.com/open/-/open-8.4.1.tgz#2ab3754c07f5d1f99a7a8d6a82737c95e3101cff"
- integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
+ integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
dependencies:
define-lazy-prop "^2.0.0"
is-docker "^2.1.1"
is-wsl "^2.2.0"
+open@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6"
+ integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==
+ dependencies:
+ default-browser "^4.0.0"
+ define-lazy-prop "^3.0.0"
+ is-inside-container "^1.0.0"
+ is-wsl "^2.2.0"
+
opener@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
@@ -15035,16 +14720,16 @@ optionator@^0.8.1:
word-wrap "~1.2.3"
optionator@^0.9.1:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
- integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
+ integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
dependencies:
+ "@aashutoshrathi/word-wrap" "^1.2.3"
deep-is "^0.1.3"
fast-levenshtein "^2.0.6"
levn "^0.4.1"
prelude-ls "^1.2.1"
type-check "^0.4.0"
- word-wrap "^1.2.3"
ora@^5.4.1:
version "5.4.1"
@@ -15212,11 +14897,6 @@ pac-resolver@^5.0.0:
ip "^1.1.5"
netmask "^2.0.2"
-packageurl-js@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/packageurl-js/-/packageurl-js-1.0.0.tgz#188ed35688d44a0684476e7af5b6c6835c3c5533"
- integrity sha512-06kNFU+yB2pjDf5JyXouQeKfwSScGP8hrZK6VgB+W4SlVy4y5yB4vl+AVmh3R0GBNd+fBt0dEiSx3HKmuchuJQ==
-
pako@^0.2.5, pako@~0.2.0:
version "0.2.9"
resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
@@ -15286,7 +14966,7 @@ parse-url@^8.1.0:
dependencies:
parse-path "^7.0.0"
-parse5@7.1.2, parse5@^7.0.0, parse5@^7.1.1:
+parse5@*, parse5@7.1.2, parse5@^7.0.0, parse5@^7.1.1, parse5@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
@@ -15334,7 +15014,7 @@ path-dirname@^1.0.0:
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==
-path-equal@^1.1.2:
+path-equal@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/path-equal/-/path-equal-1.2.5.tgz#9fcbdd5e5daee448e96f43f3bac06c666b5e982a"
integrity sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==
@@ -15402,9 +15082,9 @@ path-type@^4.0.0:
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
pathe@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.0.tgz#e2e13f6c62b31a3289af4ba19886c230f295ec03"
- integrity sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a"
+ integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==
pause-stream@0.0.11:
version "0.0.11"
@@ -15485,9 +15165,9 @@ pify@^4.0.1:
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
pirates@^4.0.4, pirates@^4.0.5:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
- integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
pkg-dir@^3.0.0:
version "3.0.0"
@@ -15510,23 +15190,11 @@ pkg-dir@^5.0.0:
dependencies:
find-up "^5.0.0"
-pkg-up@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
- integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
- dependencies:
- find-up "^3.0.0"
-
platform@1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.3.tgz#646c77011899870b6a0903e75e997e8e51da7461"
integrity sha512-VJK1SRmXBpjwsB4YOHYSturx48rLKMzHgCqDH2ZDa6ZbMS/N5huoNqyQdK5Fj/xayu3fqbXckn5SeCS1EbMDZg==
-pluralize@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
- integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
-
pm2-axon-rpc@~0.7.0, pm2-axon-rpc@~0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz#2daec5383a63135b3f18babb70266dacdcbc429a"
@@ -15629,10 +15297,10 @@ postcss-modules-extract-imports@^3.0.0:
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
-postcss-modules-local-by-default@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
- integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
+postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524"
+ integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==
dependencies:
icss-utils "^5.0.0"
postcss-selector-parser "^6.0.2"
@@ -15663,9 +15331,9 @@ postcss-safe-parser@^6.0.0:
integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==
postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
- version "6.0.11"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc"
- integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==
+ version "6.0.13"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
+ integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
dependencies:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
@@ -15683,12 +15351,12 @@ postcss@^7.0.26:
picocolors "^0.2.1"
source-map "^0.6.1"
-postcss@^8.3.11, postcss@^8.4.19:
- version "8.4.21"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4"
- integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==
+postcss@^8.3.11, postcss@^8.4.19, postcss@^8.4.21:
+ version "8.4.24"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df"
+ integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
dependencies:
- nanoid "^3.3.4"
+ nanoid "^3.3.6"
picocolors "^1.0.0"
source-map-js "^1.0.2"
@@ -15704,7 +15372,7 @@ preact@10.15.1:
resolved "https://registry.yarnpkg.com/preact/-/preact-10.15.1.tgz#a1de60c9fc0c79a522d969c65dcaddc5d994eede"
integrity sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==
-prebid.js@guardian/prebid.js#2e3b96d:
+prebid.js@guardian/prebid.js:
version "7.26.0"
resolved "https://codeload.github.com/guardian/prebid.js/tar.gz/2e3b96dc57dfe14ed8c418674ee7a0a150ece7cb"
dependencies:
@@ -15746,7 +15414,7 @@ prelude-ls@~1.1.2:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
-prettier@^2.7.1:
+prettier@^2.7.1, prettier@^2.8.8:
version "2.8.8"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
@@ -15761,7 +15429,7 @@ pretty-bytes@6.1.0:
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.0.tgz#1d1cc9aae1939012c74180b679da6684616bf804"
integrity sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==
-pretty-bytes@^5.1.0, pretty-bytes@^5.6.0:
+pretty-bytes@^5.6.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
@@ -15783,16 +15451,7 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1:
ansi-styles "^5.0.0"
react-is "^17.0.1"
-pretty-format@^29.0.0, pretty-format@^29.4.2:
- version "29.4.2"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.2.tgz#64bf5ccc0d718c03027d94ac957bdd32b3fb2401"
- integrity sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg==
- dependencies:
- "@jest/schemas" "^29.4.2"
- ansi-styles "^5.0.0"
- react-is "^18.0.0"
-
-pretty-format@^29.5.0:
+pretty-format@^29.0.0, pretty-format@^29.5.0:
version "29.5.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a"
integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==
@@ -15826,13 +15485,6 @@ progress@^2.0.1:
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-promise-deferred@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/promise-deferred/-/promise-deferred-2.0.3.tgz#b99c9588820798501862a593d49cece51d06fd7f"
- integrity sha512-n10XaoznCzLfyPFOlEE8iurezHpxrYzyjgq/1eW9Wk1gJwur/N7BdBmjJYJpqMeMcXK4wEbzo2EvZQcqjYcKUQ==
- dependencies:
- promise "^7.3.1"
-
promise@8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e"
@@ -15840,21 +15492,6 @@ promise@8.1.0:
dependencies:
asap "~2.0.6"
-promise@^7.3.1:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
- integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
- dependencies:
- asap "~2.0.3"
-
-promiseback@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/promiseback/-/promiseback-2.0.3.tgz#bd468d86930e8cd44bfc3292de9a6fbafb6378e6"
- integrity sha512-VZXdCwS0ppVNTIRfNsCvVwJAaP2b+pxQF7lM8DMWfmpNWyTxB6O5YNbzs+8z0ki/KIBHKHk308NTIl4kJUem3w==
- dependencies:
- is-callable "^1.1.5"
- promise-deferred "^2.0.3"
-
promptly@^2:
version "2.2.0"
resolved "https://registry.yarnpkg.com/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74"
@@ -15999,13 +15636,20 @@ pure-rand@^6.0.0:
resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306"
integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==
-qs@6.11.0, qs@^6.10.0:
+qs@6.11.0:
version "6.11.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
dependencies:
side-channel "^1.0.4"
+qs@^6.10.0:
+ version "6.11.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
+ integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
+ dependencies:
+ side-channel "^1.0.4"
+
qs@~6.10.3:
version "6.10.5"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4"
@@ -16051,14 +15695,14 @@ quick-lru@^5.1.1:
integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
rambda@^7.1.0:
- version "7.4.0"
- resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.4.0.tgz#61ec9de31d3dd6affe804de3bae04a5b818781e5"
- integrity sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.5.0.tgz#1865044c59bc0b16f63026c6e5a97e4b1bbe98fe"
+ integrity sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==
-ramda@^0.28.0:
- version "0.28.0"
- resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97"
- integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==
+ramda@0.29.0:
+ version "0.29.0"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.0.tgz#fbbb67a740a754c8a4cbb41e2a6e0eb8507f55fb"
+ integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==
randombytes@^2.1.0:
version "2.1.0"
@@ -16077,7 +15721,7 @@ raven-js@^3.27.2:
resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.27.2.tgz#6c33df952026cd73820aa999122b7b7737a66775"
integrity sha512-mFWQcXnhRFEQe5HeFroPaEghlnqy7F5E2J3Fsab189ondqUzcjwSVi7el7F36cr6PvQYXoZ1P2F5CSF2/azeMQ==
-raw-body@2.5.1, raw-body@^2.2.0:
+raw-body@2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
@@ -16087,6 +15731,16 @@ raw-body@2.5.1, raw-body@^2.2.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
+raw-body@^2.2.0:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
react-async-script@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/react-async-script/-/react-async-script-1.2.0.tgz#ab9412a26f0b83f5e2e00de1d2befc9400834b21"
@@ -16147,9 +15801,9 @@ react-google-recaptcha@2.1.0:
react-async-script "^1.1.1"
react-inspector@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-6.0.1.tgz#1a37f0165d9df81ee804d63259eaaeabe841287d"
- integrity sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-6.0.2.tgz#aa3028803550cb6dbd7344816d5c80bf39d07e9d"
+ integrity sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==
react-is@18.1.0:
version "18.1.0"
@@ -16239,9 +15893,9 @@ readable-stream@1.1.x:
string_decoder "~0.10.x"
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@~2.3.6:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+ integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
@@ -16252,9 +15906,9 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable
util-deprecate "~1.0.1"
readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
@@ -16295,9 +15949,9 @@ recast@^0.21.0:
tslib "^2.0.1"
recast@^0.23.1:
- version "0.23.1"
- resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.1.tgz#ee415a5561d2f99f02318ea8db81ad3a2267a6ff"
- integrity sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g==
+ version "0.23.2"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.2.tgz#d3dda3e8f0a3366860d7508c00e34a338ac52b41"
+ integrity sha512-Qv6cPfVZyMOtPszK6PgW70pUgm7gPlFitAPf0Q69rlOA0zLw2XdDcNmPbVGYicFGT9O8I7TZ/0ryJD+6COvIPw==
dependencies:
assert "^2.0.0"
ast-types "^0.16.1"
@@ -16371,33 +16025,21 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
-regexp.prototype.flags@^1.4.3:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
- integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
+regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
+ integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
dependencies:
call-bind "^1.0.2"
- define-properties "^1.1.3"
- functions-have-names "^1.2.2"
+ define-properties "^1.2.0"
+ functions-have-names "^1.2.3"
regexpp@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
-regexpu-core@^5.2.1:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.0.tgz#4d0d044b76fedbad6238703ae84bfdedee2cf074"
- integrity sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==
- dependencies:
- "@babel/regjsgen" "^0.8.0"
- regenerate "^1.4.2"
- regenerate-unicode-properties "^10.1.0"
- regjsparser "^0.9.1"
- unicode-match-property-ecmascript "^2.0.0"
- unicode-match-property-value-ecmascript "^2.1.0"
-
-regexpu-core@^5.3.1:
+regexpu-core@^5.2.1, regexpu-core@^5.3.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b"
integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==
@@ -16594,11 +16236,6 @@ requires-port@^1.0.0:
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
-reselect@^4.1.7:
- version "4.1.7"
- resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42"
- integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==
-
resolve-alpn@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
@@ -16621,6 +16258,11 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-pkg-maps@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
+ integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+
resolve-url@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -16632,11 +16274,11 @@ resolve.exports@^2.0.0:
integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1:
- version "1.22.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
- integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
+ version "1.22.2"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
+ integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
dependencies:
- is-core-module "^2.9.0"
+ is-core-module "^2.11.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
@@ -16713,6 +16355,18 @@ rimraf@~2.6.2:
dependencies:
glob "^7.1.3"
+rrweb-cssom@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1"
+ integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==
+
+run-applescript@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c"
+ integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==
+ dependencies:
+ execa "^5.0.0"
+
run-async@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@@ -16731,9 +16385,9 @@ run-series@^1.1.8:
integrity sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==
rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0:
- version "7.8.0"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4"
- integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==
+ version "7.8.1"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
+ integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
dependencies:
tslib "^2.1.0"
@@ -16776,19 +16430,19 @@ safe-regex@^1.1.0:
ret "~0.1.10"
safe-stable-stringify@^2.2.0:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz#ec7b037768098bf65310d1d64370de0dc02353aa"
- integrity sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886"
+ integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-sanitize-html@2.9.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.9.0.tgz#f4829557b0175df9059d90fe972d5e6facb8565c"
- integrity sha512-KY1hpSbqFNcpoLf+nP7iStbP5JfQZ2Nd19ZEE7qFsQqRdp+sO5yX/e5+HoG9puFAcSTEpzQuihfKUltDcLlQjg==
+sanitize-html@2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.11.0.tgz#9a6434ee8fcaeddc740d8ae7cd5dd71d3981f8f6"
+ integrity sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==
dependencies:
deepmerge "^4.2.2"
escape-string-regexp "^4.0.0"
@@ -16830,24 +16484,24 @@ schema-utils@^2.6.5:
ajv "^6.12.4"
ajv-keywords "^3.5.2"
-schema-utils@^3.0, schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
- integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==
+schema-utils@^3.0, schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1, schema-utils@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
+ integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
dependencies:
"@types/json-schema" "^7.0.8"
ajv "^6.12.5"
ajv-keywords "^3.5.2"
schema-utils@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7"
- integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b"
+ integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==
dependencies:
"@types/json-schema" "^7.0.9"
- ajv "^8.8.0"
+ ajv "^8.9.0"
ajv-formats "^2.1.1"
- ajv-keywords "^5.0.0"
+ ajv-keywords "^5.1.0"
screenfull@5.2.0:
version "5.2.0"
@@ -16871,14 +16525,14 @@ semver-regex@^4.0.5:
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-4.0.5.tgz#fbfa36c7ba70461311f5debcb3928821eb4f9180"
integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==
-semver-truncate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-2.0.0.tgz#cce4c0af36dbd97e898b821be870d17fbfb67f56"
- integrity sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==
+semver-truncate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-3.0.0.tgz#0e3b4825d4a4225d8ae6e7c72231182b42edba40"
+ integrity sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==
dependencies:
- semver "^6.0.0"
+ semver "^7.3.5"
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -16888,10 +16542,10 @@ semver@6.3.0, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-semver@^7.0.0, semver@^7.1.2, semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8:
- version "7.3.8"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
- integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
+semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3:
+ version "7.5.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e"
+ integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==
dependencies:
lru-cache "^6.0.0"
@@ -16924,7 +16578,7 @@ send@0.18.0:
range-parser "~1.2.1"
statuses "2.0.1"
-serialize-javascript@^6.0.0, serialize-javascript@^6.0.1:
+serialize-javascript@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c"
integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
@@ -17021,12 +16675,7 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-shell-quote@^1.6.1:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba"
- integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==
-
-shell-quote@^1.7.3:
+shell-quote@^1.6.1, shell-quote@^1.7.3:
version "1.8.1"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
@@ -17177,38 +16826,6 @@ snapdragon@^0.8.1:
source-map-resolve "^0.5.0"
use "^3.1.0"
-snyk-config@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/snyk-config/-/snyk-config-5.1.0.tgz#d725739ede0732a7db13be4e120c90b39e496ab7"
- integrity sha512-wqVMxUGqjjHX+MJrz0WHa/pJTDWU17aRv6cnI/6i7cq93J3TkkJZ8sjgvwCgP8cWX5wTHIlRuMV+IAd59K4X/g==
- dependencies:
- async "^3.2.0"
- debug "^4.1.1"
- lodash.merge "^4.6.2"
- minimist "^1.2.5"
-
-snyk-nodejs-lockfile-parser@^1.49.0:
- version "1.51.0"
- resolved "https://registry.yarnpkg.com/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.51.0.tgz#73f1a364e9e921fb35d0239e1b4b156c48a35700"
- integrity sha512-uepLn2WELhgAVoYZ7QOt3nFwBVZvJAUfdDyebhb2Wqn5ftTthELzUp5/kCqxOXWoXBSg2KQIjI42U7SRq8gxLg==
- dependencies:
- "@snyk/dep-graph" "^2.3.0"
- "@snyk/graphlib" "2.1.9-patch.3"
- "@yarnpkg/core" "^2.4.0"
- "@yarnpkg/lockfile" "^1.1.0"
- event-loop-spinner "^2.0.0"
- js-yaml "^4.1.0"
- lodash.clonedeep "^4.5.0"
- lodash.flatmap "^4.5.0"
- lodash.isempty "^4.4.0"
- lodash.topairs "^4.3.0"
- micromatch "^4.0.5"
- p-map "^4.0.0"
- semver "^7.3.5"
- snyk-config "^5.0.0"
- tslib "^1.9.3"
- uuid "^8.3.0"
-
snyk@1.1103.0:
version "1.1103.0"
resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.1103.0.tgz#d9ebda2d3695e4e6e9be65e85a7a66c5a7189280"
@@ -17340,9 +16957,9 @@ spawndamnit@^2.0.0:
signal-exit "^3.0.2"
spdx-correct@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
- integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
+ integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
dependencies:
spdx-expression-parse "^3.0.0"
spdx-license-ids "^3.0.0"
@@ -17361,9 +16978,9 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
- version "3.0.12"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779"
- integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5"
+ integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==
spdy-transport@^3.0.0:
version "3.0.0"
@@ -17492,11 +17109,6 @@ storybook@7.0.2:
dependencies:
"@storybook/cli" "7.0.2"
-stream-buffers@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521"
- integrity sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==
-
stream-combiner@~0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
@@ -17509,22 +17121,6 @@ stream-shift@^1.0.0:
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
-stream-to-array@~2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353"
- integrity sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==
- dependencies:
- any-promise "^1.1.0"
-
-stream-to-promise@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/stream-to-promise/-/stream-to-promise-2.2.0.tgz#b1edb2e1c8cb11289d1b503c08d3f2aef51e650f"
- integrity sha512-HAGUASw8NT0k8JvIVutB2Y/9iBk7gpgEyAudXwNJmZERdMITGdajOa4VJfD/kNiA3TppQpTP4J+CtcHwdzKBAw==
- dependencies:
- any-promise "~1.3.0"
- end-of-stream "~1.1.0"
- stream-to-array "~2.3.0"
-
stream-transform@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3"
@@ -17533,9 +17129,9 @@ stream-transform@^2.1.3:
mixme "^0.5.1"
streamroller@^3.1.1:
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.4.tgz#844a18e795d39c1089a8216e66a1cf1151271df0"
- integrity sha512-Ha1Ccw2/N5C/IF8Do6zgNe8F3jQo8MPBnMBGvX0QjNv/I97BcNRzK6/mzOpZHHK7DjMLTI3c7Xw7Y1KvdChkvw==
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff"
+ integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==
dependencies:
date-format "^4.0.14"
debug "^4.3.4"
@@ -17547,9 +17143,9 @@ strictdom@^1.0.1:
integrity sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==
string-argv@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
- integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
+ integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
string-length@^4.0.1:
version "4.0.2"
@@ -17600,6 +17196,15 @@ string.prototype.padend@^3.0.0:
define-properties "^1.1.4"
es-abstract "^1.20.4"
+string.prototype.trim@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533"
+ integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.4"
+ es-abstract "^1.20.4"
+
string.prototype.trimend@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
@@ -17653,9 +17258,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
ansi-regex "^5.0.1"
strip-ansi@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2"
- integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
dependencies:
ansi-regex "^6.0.1"
@@ -17715,9 +17320,9 @@ strtok3@^7.0.0-alpha.9:
peek-readable "^5.0.0"
style-loader@^3.3.1:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.2.tgz#eaebca714d9e462c19aa1e3599057bc363924899"
- integrity sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff"
+ integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==
style-search@^0.1.0:
version "0.1.0"
@@ -17795,10 +17400,10 @@ stylelint@14.16.1:
v8-compile-cache "^2.3.0"
write-file-atomic "^4.0.2"
-stylis@4.1.3:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7"
- integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==
+stylis@4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
+ integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
supports-color@^5.3.0, supports-color@^5.5.0:
version "5.5.0"
@@ -17864,7 +17469,7 @@ synchronous-promise@^2.0.15:
resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.17.tgz#38901319632f946c982152586f2caf8ddc25c032"
integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==
-synckit@^0.8.4:
+synckit@^0.8.5:
version "0.8.5"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
@@ -17873,9 +17478,9 @@ synckit@^0.8.4:
tslib "^2.5.0"
systeminformation@^5.7:
- version "5.17.9"
- resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.17.9.tgz#8a47bc84f076982734d7b7a0c71371d23bbbfd52"
- integrity sha512-inxwRLI/4qpx4o85R54/zdhNagdBGBgs0la7Vl3qBorRVKRDk0nNsDTCGzG4lOITsw1gl7LRWeG4Zsp1pC8nfg==
+ version "5.18.6"
+ resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.18.6.tgz#5f223eb8d1d4ad14418aa2a5cc2e7ea6c2ba8849"
+ integrity sha512-pLXv6kjJZ1xUcVs9SrCqbQ9y0x1rgRWxBUc8/KxpOp9IRxFGFfzVK5efsxBn/KdYog4C9rPcKk+kHNIL2SB/8Q==
table@^6.8.1:
version "6.8.1"
@@ -17903,7 +17508,7 @@ tar-fs@^2.1.1:
pump "^3.0.0"
tar-stream "^2.1.4"
-tar-stream@^2.0.1, tar-stream@^2.1.4:
+tar-stream@^2.1.4:
version "2.2.0"
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
@@ -17915,13 +17520,13 @@ tar-stream@^2.0.1, tar-stream@^2.1.4:
readable-stream "^3.1.1"
tar@^6.1.13:
- version "6.1.13"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b"
- integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==
+ version "6.1.15"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69"
+ integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
- minipass "^4.0.0"
+ minipass "^5.0.0"
minizlib "^2.1.1"
mkdirp "^1.0.3"
yallist "^4.0.0"
@@ -17961,45 +17566,24 @@ term-size@^2.1.0:
resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==
-terser-webpack-plugin@^5.1.3:
- version "5.3.6"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c"
- integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==
- dependencies:
- "@jridgewell/trace-mapping" "^0.3.14"
- jest-worker "^27.4.5"
- schema-utils "^3.1.1"
- serialize-javascript "^6.0.0"
- terser "^5.14.1"
-
-terser-webpack-plugin@^5.3.1:
- version "5.3.7"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7"
- integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==
+terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.7:
+ version "5.3.9"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1"
+ integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
dependencies:
"@jridgewell/trace-mapping" "^0.3.17"
jest-worker "^27.4.5"
schema-utils "^3.1.1"
serialize-javascript "^6.0.1"
- terser "^5.16.5"
-
-terser@^5.10.0, terser@^5.14.1:
- version "5.16.3"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.3.tgz#3266017a9b682edfe019b8ecddd2abaae7b39c6b"
- integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==
- dependencies:
- "@jridgewell/source-map" "^0.3.2"
- acorn "^8.5.0"
- commander "^2.20.0"
- source-map-support "~0.5.20"
+ terser "^5.16.8"
-terser@^5.15.1, terser@^5.16.5:
- version "5.16.8"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.8.tgz#ccde583dabe71df3f4ed02b65eb6532e0fae15d5"
- integrity sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==
+terser@^5.10.0, terser@^5.15.1, terser@^5.16.8:
+ version "5.18.2"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948"
+ integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==
dependencies:
- "@jridgewell/source-map" "^0.3.2"
- acorn "^8.5.0"
+ "@jridgewell/source-map" "^0.3.3"
+ acorn "^8.8.2"
commander "^2.20.0"
source-map-support "~0.5.20"
@@ -18048,19 +17632,16 @@ thunky@^1.0.2:
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
-tiny-glob@^0.2.9:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
- integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==
- dependencies:
- globalyzer "0.1.0"
- globrex "^0.1.2"
-
tiny-hashes@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tiny-hashes/-/tiny-hashes-1.0.1.tgz#ddbe9060312ddb4efe0a174bb3a27e1331c425a1"
integrity sha512-knIN5zj4fl7kW4EBU5sLP20DWUvi/rVouvJezV0UAym2DkQaqm365Nyc8F3QEiOvunNDMxR8UhcXd1d5g+Wg1g==
+titleize@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
+ integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==
+
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -18149,7 +17730,7 @@ touch@^3.1.0:
dependencies:
nopt "~1.0.10"
-tough-cookie@4.1.2, tough-cookie@^4.1.2:
+tough-cookie@4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==
@@ -18159,6 +17740,16 @@ tough-cookie@4.1.2, tough-cookie@^4.1.2:
universalify "^0.2.0"
url-parse "^1.5.3"
+tough-cookie@^4.1.2:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+ integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
+ dependencies:
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.2.0"
+ url-parse "^1.5.3"
+
tough-cookie@~2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
@@ -18181,6 +17772,13 @@ tr46@^3.0.0:
dependencies:
punycode "^2.1.1"
+tr46@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469"
+ integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==
+ dependencies:
+ punycode "^2.3.0"
+
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
@@ -18196,11 +17794,6 @@ traverse@^0.6.7:
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe"
integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==
-treeify@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8"
- integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==
-
trim-lines@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
@@ -18248,7 +17841,7 @@ ts-loader@9.4.3:
micromatch "^4.0.0"
semver "^7.3.4"
-ts-node@^10.2.1, ts-node@^10.9.1:
+ts-node@^10.9.1:
version "10.9.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
@@ -18276,12 +17869,12 @@ ts-unused-exports@8.0.5:
tsconfig-paths "^3.9.0"
tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0:
- version "3.14.1"
- resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
- integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
+ version "3.14.2"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
+ integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==
dependencies:
"@types/json5" "^0.0.29"
- json5 "^1.0.1"
+ json5 "^1.0.2"
minimist "^1.2.6"
strip-bom "^3.0.0"
@@ -18290,20 +17883,20 @@ tslib@1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
-tslib@2.5.0, tslib@^2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
- integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
+tslib@2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
+ integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==
-tslib@^1.11.1, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.3:
+tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.3:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.5.3:
- version "2.5.3"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
- integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==
+tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, "tslib@^2.4.1 || ^1.9.3", tslib@^2.5.0, tslib@^2.5.3:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
+ integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
tsutils@^3.21.0:
version "3.21.0"
@@ -18332,11 +17925,6 @@ tunnel-agent@^0.6.0:
dependencies:
safe-buffer "^5.0.1"
-tunnel@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
- integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
-
tv4@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963"
@@ -18373,6 +17961,11 @@ type-detect@4.0.8:
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+type-fest@3.12.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.12.0.tgz#4ce26edc1ccc59fc171e495887ef391fe1f5280e"
+ integrity sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==
+
type-fest@^0.13.1:
version "0.13.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
@@ -18442,18 +18035,18 @@ typescript-compare@^0.0.2:
dependencies:
typescript-logic "^0.0.0"
-typescript-json-schema@0.54.0:
- version "0.54.0"
- resolved "https://registry.yarnpkg.com/typescript-json-schema/-/typescript-json-schema-0.54.0.tgz#b3fc42ad90df6a0f6ab57571ebc8b4d41125df4f"
- integrity sha512-/MNhm1pjdxXiVspjjyRCrQAA1B768cRzHU83aIqN5vQqQEW2NgyyKOfcguiRIMM64lseIZIelegnHOHEu7YDCg==
+typescript-json-schema@0.58.1:
+ version "0.58.1"
+ resolved "https://registry.yarnpkg.com/typescript-json-schema/-/typescript-json-schema-0.58.1.tgz#841fc5c9a05c894ce77a04b28025af4135a00b1f"
+ integrity sha512-EcmquhfGEmEJOAezLZC6CzY0rPNzfXuky+Z3zoXULEEncW8e13aAjmC2r8ppT1bvvDekJj1TJ4xVhOdkjYtkUA==
dependencies:
"@types/json-schema" "^7.0.9"
"@types/node" "^16.9.2"
glob "^7.1.7"
- path-equal "^1.1.2"
+ path-equal "^1.2.5"
safe-stable-stringify "^2.2.0"
- ts-node "^10.2.1"
- typescript "~4.6.0"
+ ts-node "^10.9.1"
+ typescript "~4.9.5"
yargs "^17.1.1"
typescript-logic@^0.0.0:
@@ -18468,16 +18061,16 @@ typescript-tuple@^2.2.1:
dependencies:
typescript-compare "^0.0.2"
-typescript@^4.9.0:
+typescript@5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826"
+ integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==
+
+typescript@~4.9.5:
version "4.9.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
-typescript@~4.6.0:
- version "4.6.4"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9"
- integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==
-
uglify-js@^3.1.4:
version "3.17.4"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
@@ -18584,9 +18177,11 @@ unist-util-is@^4.0.0:
integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==
unist-util-is@^5.0.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.0.tgz#37eed0617b76c114fd34d44c201aa96fd928b309"
- integrity sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9"
+ integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==
+ dependencies:
+ "@types/unist" "^2.0.0"
unist-util-position@^4.0.0:
version "4.0.4"
@@ -18691,14 +18286,6 @@ untildify@^4.0.0:
resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
-update-browserslist-db@^1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
- integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==
- dependencies:
- escalade "^3.1.1"
- picocolors "^1.0.0"
-
update-browserslist-db@^1.0.11:
version "1.0.11"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
@@ -18788,7 +18375,7 @@ uuid@8.0.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c"
integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==
-uuid@8.3.2, uuid@^8.3.0, uuid@^8.3.2:
+uuid@8.3.2, uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
@@ -18818,16 +18405,7 @@ v8-compile-cache@^2.3.0:
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
-v8-to-istanbul@^9.0.0:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4"
- integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==
- dependencies:
- "@jridgewell/trace-mapping" "^0.3.12"
- "@types/istanbul-lib-coverage" "^2.0.1"
- convert-source-map "^1.6.0"
-
-v8-to-istanbul@^9.0.1:
+v8-to-istanbul@^9.0.0, v8-to-istanbul@^9.0.1:
version "9.1.0"
resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265"
integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==
@@ -18912,7 +18490,7 @@ vizion@~2.2.1:
ini "^1.3.5"
js-git "^0.7.8"
-vm2@^3.9.8:
+vm2@^3.9.17:
version "3.9.19"
resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.19.tgz#be1e1d7a106122c6c492b4d51c2e8b93d3ed6a4a"
integrity sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==
@@ -19104,7 +18682,7 @@ webpack-format-messages@^2.0.0:
dependencies:
kleur "^3.0.0"
-webpack-hot-middleware@2.25.3, webpack-hot-middleware@^2.25.1:
+webpack-hot-middleware@2.25.3:
version "2.25.3"
resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz#be343ce2848022cfd854dd82820cd730998c6794"
integrity sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==
@@ -19113,6 +18691,15 @@ webpack-hot-middleware@2.25.3, webpack-hot-middleware@^2.25.1:
html-entities "^2.1.0"
strip-ansi "^6.0.0"
+webpack-hot-middleware@^2.25.1:
+ version "2.25.4"
+ resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz#d8bc9e9cb664fc3105c8e83d2b9ed436bee4e193"
+ integrity sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==
+ dependencies:
+ ansi-html-community "0.0.8"
+ html-entities "^2.1.0"
+ strip-ansi "^6.0.0"
+
webpack-hot-server-middleware@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/webpack-hot-server-middleware/-/webpack-hot-server-middleware-0.6.1.tgz#1515b2d5db3277b583b01fc59bb0d5b87dc46494"
@@ -19130,7 +18717,7 @@ webpack-manifest-plugin@5.0.0:
tapable "^2.0.0"
webpack-sources "^2.2.0"
-webpack-merge@5.8.0, webpack-merge@^5.7.3:
+webpack-merge@5.8.0:
version "5.8.0"
resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61"
integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==
@@ -19138,6 +18725,14 @@ webpack-merge@5.8.0, webpack-merge@^5.7.3:
clone-deep "^4.0.1"
wildcard "^2.0.0"
+webpack-merge@^5.7.3:
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826"
+ integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==
+ dependencies:
+ clone-deep "^4.0.1"
+ wildcard "^2.0.0"
+
webpack-messages@2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/webpack-messages/-/webpack-messages-2.0.4.tgz#96faef65565d8de75f3cf7661c8a45e5ca3741bc"
@@ -19178,22 +18773,22 @@ webpack-virtual-modules@^0.4.3, webpack-virtual-modules@^0.4.5:
resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz#3e4008230731f1db078d9cb6f68baf8571182b45"
integrity sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==
-webpack@5:
- version "5.77.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.77.0.tgz#dea3ad16d7ea6b84aa55fa42f4eac9f30e7eb9b4"
- integrity sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q==
+webpack@5, webpack@^5:
+ version "5.88.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8"
+ integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==
dependencies:
"@types/eslint-scope" "^3.7.3"
- "@types/estree" "^0.0.51"
- "@webassemblyjs/ast" "1.11.1"
- "@webassemblyjs/wasm-edit" "1.11.1"
- "@webassemblyjs/wasm-parser" "1.11.1"
+ "@types/estree" "^1.0.0"
+ "@webassemblyjs/ast" "^1.11.5"
+ "@webassemblyjs/wasm-edit" "^1.11.5"
+ "@webassemblyjs/wasm-parser" "^1.11.5"
acorn "^8.7.1"
- acorn-import-assertions "^1.7.6"
+ acorn-import-assertions "^1.9.0"
browserslist "^4.14.5"
chrome-trace-event "^1.0.2"
- enhanced-resolve "^5.10.0"
- es-module-lexer "^0.9.0"
+ enhanced-resolve "^5.15.0"
+ es-module-lexer "^1.2.1"
eslint-scope "5.1.1"
events "^3.2.0"
glob-to-regexp "^0.4.1"
@@ -19202,13 +18797,13 @@ webpack@5:
loader-runner "^4.2.0"
mime-types "^2.1.27"
neo-async "^2.6.2"
- schema-utils "^3.1.0"
+ schema-utils "^3.2.0"
tapable "^2.1.1"
- terser-webpack-plugin "^5.1.3"
+ terser-webpack-plugin "^5.3.7"
watchpack "^2.4.0"
webpack-sources "^3.2.3"
-webpack@5.76.1, webpack@^5:
+webpack@5.76.1:
version "5.76.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c"
integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==
@@ -19272,6 +18867,14 @@ whatwg-url@^11.0.0:
tr46 "^3.0.0"
webidl-conversions "^7.0.0"
+whatwg-url@^12.0.0, whatwg-url@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c"
+ integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==
+ dependencies:
+ tr46 "^4.1.1"
+ webidl-conversions "^7.0.0"
+
whatwg-url@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
@@ -19364,16 +18967,16 @@ widest-line@^3.1.0:
string-width "^4.0.0"
wildcard@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
- integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
+ integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
wolfy87-eventemitter@^5.2.9:
version "5.2.9"
resolved "https://registry.yarnpkg.com/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz#e879f770b30fbb6512a8afbb330c388591099c2a"
integrity sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==
-word-wrap@^1.2.3, word-wrap@~1.2.3:
+word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
@@ -19450,18 +19053,18 @@ xml-name-validator@^4.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
-xml2js@0.4.19:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
- integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
+xml2js@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7"
+ integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==
dependencies:
sax ">=0.6.0"
- xmlbuilder "~9.0.1"
+ xmlbuilder "~11.0.0"
-xmlbuilder@~9.0.1:
- version "9.0.7"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
- integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==
+xmlbuilder@~11.0.0:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
+ integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
xmlchars@^2.2.0:
version "2.2.0"
@@ -19516,9 +19119,9 @@ yaml@1.10.2, yaml@^1.10.0:
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
yaml@^2.0.0, yaml@^2.2.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073"
- integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
+ integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==
yamljs@0.3.0:
version "0.3.0"
@@ -19576,20 +19179,7 @@ yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
-yargs@^17.1.1:
- version "17.6.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541"
- integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==
- dependencies:
- cliui "^8.0.1"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.3"
- y18n "^5.0.5"
- yargs-parser "^21.1.1"
-
-yargs@^17.3.1, yargs@^17.7.1:
+yargs@^17.1.1, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.1:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
@@ -19602,19 +19192,6 @@ yargs@^17.3.1, yargs@^17.7.1:
y18n "^5.0.5"
yargs-parser "^21.1.1"
-yargs@^17.6.2:
- version "17.7.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967"
- integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==
- dependencies:
- cliui "^8.0.1"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.3"
- y18n "^5.0.5"
- yargs-parser "^21.1.1"
-
yauzl@^2.10.0:
version "2.10.0"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"