sanitize deck description HTML with html-sanitize

Committing for reference; will roll back afterwards.

This adds approximately 150k to the bundled .js file in release mode.
html-sanitizer might be useful to replace our custom paste filtering
code in the future, but for now I'm not sure it's worth the extra
page load time over doing the filtering in Rust.
This commit is contained in:
Damien Elmes 2021-02-06 13:25:34 +10:00
parent 3839ed2e28
commit f248b71707
9 changed files with 292 additions and 4 deletions

View File

@ -44,8 +44,11 @@ rollup_bundle(
"bootstrap", "bootstrap",
"//ts/lib", "//ts/lib",
"@npm//@rollup/plugin-commonjs", "@npm//@rollup/plugin-commonjs",
"@npm//@rollup/plugin-json",
"@npm//@rollup/plugin-node-resolve", "@npm//@rollup/plugin-node-resolve",
"@npm//rollup-plugin-ignore",
"@npm//rollup-plugin-terser", "@npm//rollup-plugin-terser",
"@npm//sanitize-html",
], ],
) )

View File

@ -1,5 +1,7 @@
<script lang="ts"> <script lang="ts">
import { I18n } from "anki/i18n"; import { I18n } from "anki/i18n";
import { basicHtml } from "anki/html_sanitizer";
import pb from "anki/backend_proto"; import pb from "anki/backend_proto";
import { buildNextLearnMsg } from "./lib"; import { buildNextLearnMsg } from "./lib";
import { bridgeLink } from "anki/bridgecommand"; import { bridgeLink } from "anki/bridgecommand";
@ -62,6 +64,6 @@
{/if} {/if}
{/if} {/if}
{@html info.deckDescription} {@html basicHtml(info.deckDescription)}
</div> </div>
</div> </div>

View File

@ -67,6 +67,8 @@ rollup_bundle(
"bootstrap", "bootstrap",
"@npm//@rollup/plugin-commonjs", "@npm//@rollup/plugin-commonjs",
"@npm//@rollup/plugin-node-resolve", "@npm//@rollup/plugin-node-resolve",
"@npm//@rollup/plugin-json",
"@npm//rollup-plugin-ignore",
"@npm//rollup-plugin-terser", "@npm//rollup-plugin-terser",
] + svelte_names, ] + svelte_names,
) )

View File

@ -36,7 +36,9 @@ ts_library(
"fluent_proto", "fluent_proto",
"@npm//@fluent/bundle", "@npm//@fluent/bundle",
"@npm//@types/long", "@npm//@types/long",
"@npm//@types/sanitize-html",
"@npm//intl-pluralrules", "@npm//intl-pluralrules",
"@npm//sanitize-html",
"@npm//tslib", "@npm//tslib",
], ],
) )

11
ts/lib/html_sanitizer.ts Normal file
View File

@ -0,0 +1,11 @@
import sanitizeHtml from "sanitize-html";
export function basicHtml(html: string): string {
return sanitizeHtml(html, {
allowedTags: ["b", "i", "em", "strong", "a", "img", "div", "br"],
allowedAttributes: {
a: ["href"],
img: ["src"],
},
});
}

View File

@ -99,6 +99,13 @@
"path": "node_modules/protobufjs/node_modules/@types/node", "path": "node_modules/protobufjs/node_modules/@types/node",
"licenseFile": "node_modules/protobufjs/node_modules/@types/node/LICENSE" "licenseFile": "node_modules/protobufjs/node_modules/@types/node/LICENSE"
}, },
"colorette@1.2.1": {
"licenses": "MIT",
"repository": "https://github.com/jorgebucaran/colorette",
"publisher": "Jorge Bucaran",
"path": "node_modules/colorette",
"licenseFile": "node_modules/colorette/LICENSE.md"
},
"commander@2.20.3": { "commander@2.20.3": {
"licenses": "MIT", "licenses": "MIT",
"repository": "https://github.com/tj/commander.js", "repository": "https://github.com/tj/commander.js",
@ -362,6 +369,12 @@
"path": "node_modules/d3", "path": "node_modules/d3",
"licenseFile": "node_modules/d3/LICENSE" "licenseFile": "node_modules/d3/LICENSE"
}, },
"deepmerge@4.2.2": {
"licenses": "MIT",
"repository": "https://github.com/TehShrike/deepmerge",
"path": "node_modules/deepmerge",
"licenseFile": "node_modules/deepmerge/license.txt"
},
"delaunator@4.0.1": { "delaunator@4.0.1": {
"licenses": "ISC", "licenses": "ISC",
"repository": "https://github.com/mapbox/delaunator", "repository": "https://github.com/mapbox/delaunator",
@ -369,6 +382,63 @@
"path": "node_modules/delaunator", "path": "node_modules/delaunator",
"licenseFile": "node_modules/delaunator/LICENSE" "licenseFile": "node_modules/delaunator/LICENSE"
}, },
"dom-serializer@1.2.0": {
"licenses": "MIT",
"repository": "https://github.com/cheeriojs/dom-renderer",
"publisher": "Felix Boehm",
"email": "me@feedic.com",
"path": "node_modules/dom-serializer",
"licenseFile": "node_modules/dom-serializer/LICENSE"
},
"domelementtype@2.1.0": {
"licenses": "BSD-2-Clause",
"repository": "https://github.com/fb55/domelementtype",
"publisher": "Felix Boehm",
"email": "me@feedic.com",
"path": "node_modules/domelementtype",
"licenseFile": "node_modules/domelementtype/LICENSE"
},
"domhandler@4.0.0": {
"licenses": "BSD-2-Clause",
"repository": "https://github.com/fb55/domhandler",
"publisher": "Felix Boehm",
"email": "me@feedic.com",
"path": "node_modules/domhandler",
"licenseFile": "node_modules/domhandler/LICENSE"
},
"domutils@2.4.4": {
"licenses": "BSD-2-Clause",
"repository": "https://github.com/fb55/domutils",
"publisher": "Felix Boehm",
"email": "me@feedic.com",
"path": "node_modules/domutils",
"licenseFile": "node_modules/domutils/LICENSE"
},
"entities@2.2.0": {
"licenses": "BSD-2-Clause",
"repository": "https://github.com/fb55/entities",
"publisher": "Felix Boehm",
"email": "me@feedic.com",
"path": "node_modules/entities",
"licenseFile": "node_modules/entities/LICENSE"
},
"escape-string-regexp@4.0.0": {
"licenses": "MIT",
"repository": "https://github.com/sindresorhus/escape-string-regexp",
"publisher": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "https://sindresorhus.com",
"path": "node_modules/sanitize-html/node_modules/escape-string-regexp",
"licenseFile": "node_modules/sanitize-html/node_modules/escape-string-regexp/license"
},
"htmlparser2@6.0.0": {
"licenses": "MIT",
"repository": "https://github.com/fb55/htmlparser2",
"publisher": "Felix Boehm",
"email": "me@feedic.com",
"path": "node_modules/sanitize-html/node_modules/htmlparser2",
"licenseFile": "node_modules/sanitize-html/node_modules/htmlparser2/LICENSE"
},
"iconv-lite@0.4.24": { "iconv-lite@0.4.24": {
"licenses": "MIT", "licenses": "MIT",
"repository": "https://github.com/ashtuchkin/iconv-lite", "repository": "https://github.com/ashtuchkin/iconv-lite",
@ -393,6 +463,14 @@
"path": "node_modules/intl-pluralrules", "path": "node_modules/intl-pluralrules",
"licenseFile": "node_modules/intl-pluralrules/LICENSE" "licenseFile": "node_modules/intl-pluralrules/LICENSE"
}, },
"is-plain-object@5.0.0": {
"licenses": "MIT",
"repository": "https://github.com/jonschlinkert/is-plain-object",
"publisher": "Jon Schlinkert",
"url": "https://github.com/jonschlinkert",
"path": "node_modules/sanitize-html/node_modules/is-plain-object",
"licenseFile": "node_modules/sanitize-html/node_modules/is-plain-object/LICENSE"
},
"jquery-ui-dist@1.12.1": { "jquery-ui-dist@1.12.1": {
"licenses": "MIT", "licenses": "MIT",
"repository": "https://github.com/jquery/jquery-ui", "repository": "https://github.com/jquery/jquery-ui",
@ -409,6 +487,15 @@
"path": "node_modules/jquery", "path": "node_modules/jquery",
"licenseFile": "node_modules/jquery/LICENSE.txt" "licenseFile": "node_modules/jquery/LICENSE.txt"
}, },
"klona@2.0.4": {
"licenses": "MIT",
"repository": "https://github.com/lukeed/klona",
"publisher": "Luke Edwards",
"email": "luke.edwards05@gmail.com",
"url": "https://lukeed.com",
"path": "node_modules/klona",
"licenseFile": "node_modules/klona/license"
},
"lodash.debounce@4.0.8": { "lodash.debounce@4.0.8": {
"licenses": "MIT", "licenses": "MIT",
"repository": "https://github.com/lodash/lodash", "repository": "https://github.com/lodash/lodash",
@ -441,6 +528,30 @@
"path": "node_modules/mathjax", "path": "node_modules/mathjax",
"licenseFile": "node_modules/mathjax/LICENSE" "licenseFile": "node_modules/mathjax/LICENSE"
}, },
"nanoid@3.1.20": {
"licenses": "MIT",
"repository": "https://github.com/ai/nanoid",
"publisher": "Andrey Sitnik",
"email": "andrey@sitnik.ru",
"path": "node_modules/nanoid",
"licenseFile": "node_modules/nanoid/LICENSE"
},
"parse-srcset@1.0.2": {
"licenses": "MIT",
"repository": "https://github.com/albell/parse-srcset",
"publisher": "Alex Bell",
"email": "alex@bellandwhistle.net",
"path": "node_modules/parse-srcset",
"licenseFile": "node_modules/parse-srcset/LICENSE"
},
"postcss@8.2.4": {
"licenses": "MIT",
"repository": "https://github.com/postcss/postcss",
"publisher": "Andrey Sitnik",
"email": "andrey@sitnik.ru",
"path": "node_modules/postcss",
"licenseFile": "node_modules/postcss/LICENSE"
},
"protobufjs@6.10.2": { "protobufjs@6.10.2": {
"licenses": "BSD-3-Clause", "licenses": "BSD-3-Clause",
"repository": "https://github.com/protobufjs/protobuf.js", "repository": "https://github.com/protobufjs/protobuf.js",
@ -465,6 +576,21 @@
"url": "https://github.com/ChALkeR", "url": "https://github.com/ChALkeR",
"path": "node_modules/safer-buffer", "path": "node_modules/safer-buffer",
"licenseFile": "node_modules/safer-buffer/LICENSE" "licenseFile": "node_modules/safer-buffer/LICENSE"
},
"sanitize-html@2.3.2": {
"licenses": "MIT",
"repository": "https://github.com/apostrophecms/sanitize-html",
"publisher": "Apostrophe Technologies, Inc.",
"path": "node_modules/sanitize-html",
"licenseFile": "node_modules/sanitize-html/LICENSE"
},
"source-map@0.6.1": {
"licenses": "BSD-3-Clause",
"repository": "https://github.com/mozilla/source-map",
"publisher": "Nick Fitzgerald",
"email": "nfitzgerald@mozilla.com",
"path": "node_modules/source-map",
"licenseFile": "node_modules/source-map/LICENSE"
} }
} }

View File

@ -11,6 +11,7 @@
"@bazel/typescript": "=3.0.0", "@bazel/typescript": "=3.0.0",
"@pyoner/svelte-types": "^3.4.4-2", "@pyoner/svelte-types": "^3.4.4-2",
"@rollup/plugin-commonjs": "^15.1.0", "@rollup/plugin-commonjs": "^15.1.0",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^9.0.0", "@rollup/plugin-node-resolve": "^9.0.0",
"@sqltools/formatter": "^1.2.2", "@sqltools/formatter": "^1.2.2",
"@tsconfig/svelte": "^1.0.10", "@tsconfig/svelte": "^1.0.10",
@ -24,6 +25,7 @@
"@types/node": "^14.14.20", "@types/node": "^14.14.20",
"@types/react": "^16.9.53", "@types/react": "^16.9.53",
"@types/react-dom": "^16.9.8", "@types/react-dom": "^16.9.8",
"@types/sanitize-html": "^1.27.1",
"@typescript-eslint/eslint-plugin": "^2.11.0", "@typescript-eslint/eslint-plugin": "^2.11.0",
"@typescript-eslint/parser": "^2.11.0", "@typescript-eslint/parser": "^2.11.0",
"cross-env": "^7.0.2", "cross-env": "^7.0.2",
@ -36,6 +38,7 @@
"protobufjs-cli-taylorm": "^7.0.4", "protobufjs-cli-taylorm": "^7.0.4",
"protobufjs-taylorm": "^7.0.4", "protobufjs-taylorm": "^7.0.4",
"rollup": "^2.32.1", "rollup": "^2.32.1",
"rollup-plugin-ignore": "^1.0.9",
"rollup-plugin-terser": "^7.0.2", "rollup-plugin-terser": "^7.0.2",
"sass": "^1.32.6", "sass": "^1.32.6",
"svelte": "^3.28.0", "svelte": "^3.28.0",
@ -58,7 +61,8 @@
"lodash.debounce": "^4.0.8", "lodash.debounce": "^4.0.8",
"lodash.throttle": "^4.1.1", "lodash.throttle": "^4.1.1",
"mathjax": "^3.1.2", "mathjax": "^3.1.2",
"protobufjs": "^6.10.2" "protobufjs": "^6.10.2",
"sanitize-html": "^2.3.2"
}, },
"files": [ "files": [
"dist/*" "dist/*"

View File

@ -1,5 +1,7 @@
import resolve from "@rollup/plugin-node-resolve"; import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs"; import commonjs from "@rollup/plugin-commonjs";
import json from "@rollup/plugin-json";
import ignore from "rollup-plugin-ignore";
import { terser } from "rollup-plugin-terser"; import { terser } from "rollup-plugin-terser";
import process from "process"; import process from "process";
@ -18,7 +20,10 @@ export default {
browser: true, browser: true,
dedupe: ["svelte", "protobufjs"], dedupe: ["svelte", "protobufjs"],
}), }),
json(),
commonjs(), commonjs(),
// imported by sanitize-html->postcss
ignore(["path", "url"]),
production && terser(), production && terser(),
], ],
onwarn: function (warning, warn) { onwarn: function (warning, warn) {

View File

@ -124,6 +124,13 @@
magic-string "^0.25.7" magic-string "^0.25.7"
resolve "^1.17.0" resolve "^1.17.0"
"@rollup/plugin-json@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3"
integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==
dependencies:
"@rollup/pluginutils" "^3.0.8"
"@rollup/plugin-node-resolve@^9.0.0": "@rollup/plugin-node-resolve@^9.0.0":
version "9.0.0" version "9.0.0"
resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6" resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6"
@ -136,7 +143,7 @@
is-module "^1.0.0" is-module "^1.0.0"
resolve "^1.17.0" resolve "^1.17.0"
"@rollup/pluginutils@^3.1.0": "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0":
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
@ -478,6 +485,13 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/sanitize-html@^1.27.1":
version "1.27.1"
resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-1.27.1.tgz#1fc4b67edd6296eeb366960d13cd01f5d6bffdcd"
integrity sha512-TW5gfZYplKQYO8003WrxaDgwyJsEG74920S+Ei7zB9mbUFgm7l2NvFAumXzxL+1fOwM2I9A+G/1rgiEebQOxcQ==
dependencies:
htmlparser2 "^4.1.0"
"@types/sass@^1.16.0": "@types/sass@^1.16.0":
version "1.16.0" version "1.16.0"
resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.16.0.tgz#b41ac1c17fa68ffb57d43e2360486ef526b3d57d" resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.16.0.tgz#b41ac1c17fa68ffb57d43e2360486ef526b3d57d"
@ -871,6 +885,11 @@ color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
colorette@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
commander@2, commander@^2.20.0: commander@2, commander@^2.20.0:
version "2.20.3" version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@ -1266,6 +1285,43 @@ doctrine@^3.0.0:
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
dom-serializer@^1.0.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1"
integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==
dependencies:
domelementtype "^2.0.1"
domhandler "^4.0.0"
entities "^2.0.0"
domelementtype@^2.0.1, domelementtype@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e"
integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==
domhandler@^3.0.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a"
integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==
dependencies:
domelementtype "^2.0.1"
domhandler@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e"
integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==
dependencies:
domelementtype "^2.1.0"
domutils@^2.0.0, domutils@^2.4.4:
version "2.4.4"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3"
integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.0.1"
domhandler "^4.0.0"
emoji-regex@^7.0.1: emoji-regex@^7.0.1:
version "7.0.3" version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@ -1276,6 +1332,11 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
entities@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
entities@~2.0.0: entities@~2.0.0:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
@ -1291,6 +1352,11 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
escodegen@^1.9.1: escodegen@^1.9.1:
version "1.14.3" version "1.14.3"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
@ -1692,6 +1758,26 @@ hosted-git-info@^2.1.4:
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
htmlparser2@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78"
integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==
dependencies:
domelementtype "^2.0.1"
domhandler "^3.0.0"
domutils "^2.0.0"
entities "^2.0.0"
htmlparser2@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.0.tgz#c2da005030390908ca4c91e5629e418e0665ac01"
integrity sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==
dependencies:
domelementtype "^2.0.1"
domhandler "^4.0.0"
domutils "^2.4.4"
entities "^2.0.0"
iconv-lite@0.4, iconv-lite@^0.4.24: iconv-lite@0.4, iconv-lite@^0.4.24:
version "0.4.24" version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -1889,6 +1975,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies: dependencies:
isobject "^3.0.1" isobject "^3.0.1"
is-plain-object@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
is-reference@^1.2.1: is-reference@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
@ -2042,6 +2133,11 @@ klaw@^3.0.0:
dependencies: dependencies:
graceful-fs "^4.1.9" graceful-fs "^4.1.9"
klona@^2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
levn@^0.3.0, levn@~0.3.0: levn@^0.3.0, levn@~0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@ -2238,6 +2334,11 @@ mute-stream@0.0.8:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
nanoid@^3.1.20:
version "3.1.20"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788"
integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==
nanomatch@^1.2.9: nanomatch@^1.2.9:
version "1.2.13" version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@ -2375,6 +2476,11 @@ parent-module@^1.0.0:
dependencies: dependencies:
callsites "^3.0.0" callsites "^3.0.0"
parse-srcset@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1"
integrity sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=
pascal-case@^3.1.1: pascal-case@^3.1.1:
version "3.1.2" version "3.1.2"
resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
@ -2436,6 +2542,15 @@ posix-character-classes@^0.1.0:
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
postcss@^8.0.2:
version "8.2.4"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.4.tgz#20a98a39cf303d15129c2865a9ec37eda0031d04"
integrity sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg==
dependencies:
colorette "^1.2.1"
nanoid "^3.1.20"
source-map "^0.6.1"
prelude-ls@~1.1.2: prelude-ls@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@ -2662,6 +2777,11 @@ rimraf@^2.6.3:
dependencies: dependencies:
glob "^7.1.3" glob "^7.1.3"
rollup-plugin-ignore@^1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/rollup-plugin-ignore/-/rollup-plugin-ignore-1.0.9.tgz#62a692d387d543395ad2fbcc443c9b3549582844"
integrity sha512-+Q2jmD4gbO3ByFuljkDEfpEcYvll7J5+ZadUuk/Pu35x2KGrbHxKtt3+s+dPIgXX1mG7zCxG4s/NdRqztR5Ruw==
rollup-plugin-terser@^7.0.2: rollup-plugin-terser@^7.0.2:
version "7.0.2" version "7.0.2"
resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
@ -2713,6 +2833,19 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sanitize-html@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.3.2.tgz#a1954aea877a096c408aca7b0c260bef6e4fc402"
integrity sha512-p7neuskvC8pSurUjdVmbWPXmc9A4+QpOXIL+4gwFC+av5h+lYCXFT8uEneqsFQg/wEA1IH+cKQA60AaQI6p3cg==
dependencies:
deepmerge "^4.2.2"
escape-string-regexp "^4.0.0"
htmlparser2 "^6.0.0"
is-plain-object "^5.0.0"
klona "^2.0.3"
parse-srcset "^1.0.2"
postcss "^8.0.2"
sass@^1.32.6: sass@^1.32.6:
version "1.32.6" version "1.32.6"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.6.tgz#e3646c8325cd97ff75a8a15226007f3ccd221393" resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.6.tgz#e3646c8325cd97ff75a8a15226007f3ccd221393"
@ -2874,7 +3007,7 @@ source-map@^0.5.6:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.6.0, source-map@~0.6.1: source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==