Start on migration to CodeMirror 6

This commit is contained in:
Damien Elmes 2023-07-01 15:37:17 +10:00
parent c8458fce16
commit 382a9eadef
5 changed files with 307 additions and 83 deletions

View file

@ -53,7 +53,7 @@
"@popperjs/core": "^2.11.8",
"bootstrap": "^5.3.0",
"bootstrap-icons": "^1.10.5",
"codemirror": "^5.63.1",
"codemirror": "^6.0.1",
"css-browser-selector": "^0.6.5",
"d3": "^7.0.0",
"fabric": "^5.3.0",

View file

@ -4,6 +4,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script context="module" lang="ts">
import type CodeMirrorLib from "codemirror";
import { EditorView } from "@codemirror/view";
import type { Extension } from "@codemirror/state";
export interface CodeMirrorAPI {
readonly editor: Promise<CodeMirrorLib.Editor>;
@ -28,7 +30,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
setupCodeMirror,
} from "./code-mirror";
export let configuration: CodeMirrorLib.EditorConfiguration;
export let configuration: Extension;
export let code: Writable<string>;
export let hidden = false;
@ -37,7 +39,25 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
lineNumbers: false,
};
const [editorPromise, resolve] = promiseWithResolver<CodeMirrorLib.Editor>();
const dispatch = createEventDispatcher();
const updateListenerExtension = EditorView.updateListener.of((update) => {
if (update.docChanged) {
dispatch("change", update.state.doc.toString());
}
});
function allConfiguration(): Extension {
// {
// ...configuration,
// ...defaultConfiguration,
// direction: $direction,
// theme: $pageTheme.isDark ? darkTheme : lightTheme,
// },
return [updateListenerExtension];
}
const [editorPromise, resolve] = promiseWithResolver<EditorView>();
/**
* Convenience function for editor.setOption.
@ -60,23 +80,20 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
setOption,
});
const dispatch = createEventDispatcher();
onMount(async () => {
const editor = await editorPromise;
setupCodeMirror(editor, code);
editor.on("change", () => dispatch("change", editor.getValue()));
editor.on("focus", (codeMirror, event) =>
dispatch("focus", { codeMirror, event }),
);
editor.on("blur", (codeMirror, event) =>
dispatch("blur", { codeMirror, event }),
);
editor.on("keydown", (codeMirror, event) => {
if (event.code === "Tab") {
dispatch("tab", { codeMirror, event });
}
});
// editor.on("focus", (codeMirror, event) =>
// dispatch("focus", { codeMirror, event }),
// );
// editor.on("blur", (codeMirror, event) =>
// dispatch("blur", { codeMirror, event }),
// );
// editor.on("keydown", (codeMirror, event) => {
// if (event.code === "Tab") {
// dispatch("tab", { codeMirror, event });
// }
// });
});
</script>
@ -85,12 +102,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
tabindex="-1"
hidden
use:openCodeMirror={{
configuration: {
...configuration,
...defaultConfiguration,
direction: $direction,
theme: $pageTheme.isDark ? darkTheme : lightTheme,
},
configuration: allConfiguration(),
resolve,
hidden,
}}

View file

@ -1,25 +1,13 @@
// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import "codemirror/lib/codemirror.css";
import "codemirror/addon/fold/foldgutter.css";
import "codemirror/theme/monokai.css";
import "codemirror/mode/htmlmixed/htmlmixed";
import "codemirror/mode/stex/stex";
import "codemirror/addon/fold/foldcode";
import "codemirror/addon/fold/foldgutter";
import "codemirror/addon/fold/xml-fold";
import "codemirror/addon/edit/matchtags";
import "codemirror/addon/edit/closetag";
import "codemirror/addon/display/placeholder";
import type { Extension } from "@codemirror/state";
import { EditorView } from "@codemirror/view";
import CodeMirror from "codemirror";
import type { Readable } from "svelte/store";
import storeSubscribe from "../sveltelib/store-subscribe";
export { CodeMirror };
export const latex = {
name: "stex",
inMathMode: true,
@ -52,7 +40,7 @@ export const gutterOptions: CodeMirror.EditorConfiguration = {
};
export function focusAndSetCaret(
editor: CodeMirror.Editor,
editor: EditorView,
position: CodeMirror.Position = { line: editor.lineCount(), ch: 0 },
): void {
editor.focus();
@ -60,31 +48,31 @@ export function focusAndSetCaret(
}
interface OpenCodeMirrorOptions {
configuration: CodeMirror.EditorConfiguration;
resolve(editor: CodeMirror.EditorFromTextArea): void;
configuration: Extension;
resolve(editor: EditorView): void;
hidden: boolean;
}
export function openCodeMirror(
textarea: HTMLTextAreaElement,
options: Partial<OpenCodeMirrorOptions>,
): { update: (options: Partial<OpenCodeMirrorOptions>) => void; destroy: () => void } {
let editor: CodeMirror.EditorFromTextArea | null = null;
options: OpenCodeMirrorOptions,
): { update: (options: OpenCodeMirrorOptions) => void; destroy: () => void } {
let editor: EditorView | null = null;
function update({
configuration,
resolve,
hidden,
}: Partial<OpenCodeMirrorOptions>): void {
}: OpenCodeMirrorOptions): void {
if (editor) {
for (const key in configuration) {
editor.setOption(
key as keyof CodeMirror.EditorConfiguration,
configuration[key],
);
}
// for (const key in configuration) {
// editor.setOption(
// key as keyof CodeMirror.EditorConfiguration,
// configuration[key],
// );
// }
} else if (!hidden) {
editor = CodeMirror.fromTextArea(textarea, configuration);
editor = editorFromTextArea(textarea, configuration);
resolve?.(editor);
}
}
@ -94,51 +82,66 @@ export function openCodeMirror(
return {
update,
destroy(): void {
editor?.toTextArea();
if (editor) editorToTextArea(textarea, editor);
editor = null;
},
};
}
function editorFromTextArea(textarea, extensions: Extension) {
let view = new EditorView({ doc: textarea.value, extensions });
textarea.parentNode.insertBefore(view.dom, textarea);
textarea.style.display = "none";
return view;
}
function editorToTextArea(textarea, view: EditorView) {
textarea.style.display = "block";
view.destroy();
}
/**
* Sets up the contract with the code store and location restoration.
*/
export function setupCodeMirror(
editor: CodeMirror.Editor,
editor: EditorView,
code: Readable<string>,
): void {
const { subscribe, unsubscribe } = storeSubscribe(
code,
(value: string): void => editor.setValue(value),
(value: string): void => {
console.log(value);
editor.dispatch({ changes: { from: 0, to: editor.state.doc.length, insert: value } });
},
false,
);
// TODO passing in the tabindex option does not do anything: bug?
editor.getInputField().tabIndex = 0;
// // TODO passing in the tabindex option does not do anything: bug?
// editor.getInputField().tabIndex = 0;
let ranges: CodeMirror.Range[] | null = null;
// let ranges: CodeMirror.Range[] | null = null;
editor.on("focus", () => {
if (ranges) {
try {
editor.setSelections(ranges);
} catch {
ranges = null;
editor.setCursor(editor.lineCount(), 0);
}
}
unsubscribe();
});
// editor.on("focus", () => {
// if (ranges) {
// try {
// editor.setSelections(ranges);
// } catch {
// ranges = null;
// editor.setCursor(editor.lineCount(), 0);
// }
// }
// unsubscribe();
// });
editor.on("mousedown", () => {
// Prevent focus restoring location
ranges = null;
});
// editor.on("mousedown", () => {
// // Prevent focus restoring location
// ranges = null;
// });
editor.on("blur", () => {
ranges = editor.listSelections();
subscribe();
});
// editor.on("blur", () => {
// ranges = editor.listSelections();
// subscribe();
// });
subscribe();
}

View file

@ -5,6 +5,62 @@
"path": "node_modules/@bufbuild/protobuf",
"licenseFile": "node_modules/@bufbuild/protobuf/README.md"
},
"@codemirror/autocomplete@6.8.1": {
"licenses": "MIT",
"repository": "https://github.com/codemirror/autocomplete",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@codemirror/autocomplete",
"licenseFile": "node_modules/@codemirror/autocomplete/LICENSE"
},
"@codemirror/commands@6.2.4": {
"licenses": "MIT",
"repository": "https://github.com/codemirror/commands",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@codemirror/commands",
"licenseFile": "node_modules/@codemirror/commands/LICENSE"
},
"@codemirror/language@6.8.0": {
"licenses": "MIT",
"repository": "https://github.com/codemirror/language",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@codemirror/language",
"licenseFile": "node_modules/@codemirror/language/LICENSE"
},
"@codemirror/lint@6.3.0": {
"licenses": "MIT",
"repository": "https://github.com/codemirror/lint",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@codemirror/lint",
"licenseFile": "node_modules/@codemirror/lint/LICENSE"
},
"@codemirror/search@6.5.0": {
"licenses": "MIT",
"repository": "https://github.com/codemirror/search",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@codemirror/search",
"licenseFile": "node_modules/@codemirror/search/LICENSE"
},
"@codemirror/state@6.2.1": {
"licenses": "MIT",
"repository": "https://github.com/codemirror/state",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@codemirror/state",
"licenseFile": "node_modules/@codemirror/state/LICENSE"
},
"@codemirror/view@6.14.0": {
"licenses": "MIT",
"repository": "https://github.com/codemirror/view",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@codemirror/view",
"licenseFile": "node_modules/@codemirror/view/LICENSE"
},
"@floating-ui/core@1.3.1": {
"licenses": "MIT",
"repository": "https://github.com/floating-ui/floating-ui",
@ -27,6 +83,30 @@
"path": "node_modules/@fluent/bundle",
"licenseFile": "node_modules/@fluent/bundle/README.md"
},
"@lezer/common@1.0.3": {
"licenses": "MIT",
"repository": "https://github.com/lezer-parser/common",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@lezer/common",
"licenseFile": "node_modules/@lezer/common/LICENSE"
},
"@lezer/highlight@1.1.6": {
"licenses": "MIT",
"repository": "https://github.com/lezer-parser/highlight",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@lezer/highlight",
"licenseFile": "node_modules/@lezer/highlight/LICENSE"
},
"@lezer/lr@1.3.7": {
"licenses": "MIT",
"repository": "https://github.com/lezer-parser/lr",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/@lezer/lr",
"licenseFile": "node_modules/@lezer/lr/LICENSE"
},
"@mdi/svg@7.2.96": {
"licenses": "Apache-2.0",
"repository": "https://github.com/Templarian/MaterialDesign-SVG",
@ -135,11 +215,11 @@
"path": "node_modules/browser-process-hrtime",
"licenseFile": "node_modules/browser-process-hrtime/LICENSE"
},
"codemirror@5.65.13": {
"codemirror@6.0.1": {
"licenses": "MIT",
"repository": "https://github.com/codemirror/CodeMirror",
"repository": "https://github.com/codemirror/basic-setup",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"email": "marijnh@gmail.com",
"path": "node_modules/codemirror",
"licenseFile": "node_modules/codemirror/LICENSE"
},
@ -159,6 +239,14 @@
"path": "node_modules/commander",
"licenseFile": "node_modules/commander/LICENSE"
},
"crelt@1.0.6": {
"licenses": "MIT",
"repository": "https://github.com/marijnh/crelt",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/crelt",
"licenseFile": "node_modules/crelt/LICENSE"
},
"css-browser-selector@0.6.5": {
"licenses": "CC-BY-SA-2.5",
"repository": "https://github.com/verbatim/css_browser_selector",
@ -708,6 +796,13 @@
"path": "node_modules/source-map",
"licenseFile": "node_modules/source-map/LICENSE"
},
"style-mod@4.0.3": {
"licenses": "MIT",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/style-mod",
"licenseFile": "node_modules/style-mod/LICENSE"
},
"symbol-tree@3.2.4": {
"licenses": "MIT",
"repository": "https://github.com/jsdom/js-symbol-tree",
@ -755,6 +850,14 @@
"path": "node_modules/w3c-hr-time",
"licenseFile": "node_modules/w3c-hr-time/LICENSE.md"
},
"w3c-keyname@2.2.8": {
"licenses": "MIT",
"repository": "https://github.com/marijnh/w3c-keyname",
"publisher": "Marijn Haverbeke",
"email": "marijn@haverbeke.berlin",
"path": "node_modules/w3c-keyname",
"licenseFile": "node_modules/w3c-keyname/LICENSE"
},
"w3c-xmlserializer@3.0.0": {
"licenses": "MIT",
"repository": "https://github.com/jsdom/w3c-xmlserializer",

114
yarn.lock
View file

@ -318,6 +318,70 @@
"@typescript/vfs" "^1.4.0"
typescript "4.5.2"
"@codemirror/autocomplete@^6.0.0":
version "6.8.1"
resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.8.1.tgz#3f3daa9f591186901db07f58d17256656242e841"
integrity sha512-HpphvDcTdOx+9R3eUw9hZK9JA77jlaBF0kOt2McbyfvY0rX9pnMoO8rkkZc0GzSbzhIY4m5xJ0uHHgjfqHNmXQ==
dependencies:
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.6.0"
"@lezer/common" "^1.0.0"
"@codemirror/commands@^6.0.0":
version "6.2.4"
resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.2.4.tgz#b8a0e5ce72448c092ba4c4b1d902e6f183948aec"
integrity sha512-42lmDqVH0ttfilLShReLXsDfASKLXzfyC36bzwcqzox9PlHulMcsUOfHXNo2X2aFMVNUoQ7j+d4q5bnfseYoOA==
dependencies:
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.2.0"
"@codemirror/view" "^6.0.0"
"@lezer/common" "^1.0.0"
"@codemirror/language@^6.0.0":
version "6.8.0"
resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.8.0.tgz#f2d7eea6b338c25593d800f2293b062d9f9856db"
integrity sha512-r1paAyWOZkfY0RaYEZj3Kul+MiQTEbDvYqf8gPGaRvNneHXCmfSaAVFjwRUPlgxS8yflMxw2CTu6uCMp8R8A2g==
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
"@lezer/common" "^1.0.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
style-mod "^4.0.0"
"@codemirror/lint@^6.0.0":
version "6.3.0"
resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.3.0.tgz#bd36fb85094cf5735e5426e48f1a8e575a7b70df"
integrity sha512-tzxOVQNoDhhwFNfcTO2IB74wQoWarARcH6gv3YufPpiJ9yhcb7zD6JCkO5+FWARskqRFc8GFa6E+wUyOvADl5A==
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
crelt "^1.0.5"
"@codemirror/search@^6.0.0":
version "6.5.0"
resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.0.tgz#308f9968434e0e6ed59c9ec36a0239eb1dfc5d92"
integrity sha512-64/M40YeJPToKvGO6p3fijo2vwUEj4nACEAXElCaYQ50HrXSvRaK+NHEhSh73WFBGdvIdhrV+lL9PdJy2RfCYA==
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
crelt "^1.0.5"
"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.4", "@codemirror/state@^6.2.0":
version "6.2.1"
resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.2.1.tgz#6dc8d8e5abb26b875e3164191872d69a5e85bd73"
integrity sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==
"@codemirror/view@^6.0.0", "@codemirror/view@^6.6.0":
version "6.14.0"
resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.14.0.tgz#a8ecb0216d6f81aeb20bf8b0cbbc7ed563cf0777"
integrity sha512-I263FPs4In42MNmrdwN2DfmYPFMVMXgT7o/mxdGp4jv5LPs8i0FOxzmxF5yeeQdYSTztb2ZhmPIu0ahveInVTg==
dependencies:
"@codemirror/state" "^6.1.4"
style-mod "^4.0.0"
w3c-keyname "^2.2.4"
"@esbuild-kit/cjs-loader@^2.4.2":
version "2.4.2"
resolved "https://registry.yarnpkg.com/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.2.tgz#cb4dde00fbf744a68c4f20162ea15a8242d0fa54"
@ -888,6 +952,25 @@
"@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14"
"@lezer/common@^1.0.0":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.0.3.tgz#1808f70e2b0a7b1fdcbaf5c074723d2d4ed1e4c5"
integrity sha512-JH4wAXCgUOcCGNekQPLhVeUtIqjH0yPBs7vvUdSjyQama9618IOKFJwkv2kcqdhF0my8hQEgCTEJU0GIgnahvA==
"@lezer/highlight@^1.0.0":
version "1.1.6"
resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.1.6.tgz#87e56468c0f43c2a8b3dc7f0b7c2804b34901556"
integrity sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==
dependencies:
"@lezer/common" "^1.0.0"
"@lezer/lr@^1.0.0":
version "1.3.7"
resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.3.7.tgz#e3012c74512a063098eb9da86d4cc689170e1f92"
integrity sha512-ssHKb3p0MxhJXT2i7UBmgAY1BIM3Uq/D772Qutu3EVmxWIyNMU12nQ0rL3Fhu+MiFtiTzyTmd3xGwEf3ON5PSA==
dependencies:
"@lezer/common" "^1.0.0"
"@mdi/svg@^7.0.96":
version "7.2.96"
resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-7.2.96.tgz#6c182628ed722a85055c3795e7d4ca6d4f2f139c"
@ -1928,10 +2011,18 @@ code-red@^1.0.3:
estree-walker "^3.0.3"
periscopic "^3.1.0"
codemirror@^5.63.1:
version "5.65.13"
resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.13.tgz#c098a6f409db8b5a7c5722788bd9fa3bb2367f2e"
integrity sha512-SVWEzKXmbHmTQQWaz03Shrh4nybG0wXx2MEu3FO4ezbPW8IbnZEd5iGHGEffSUaitKYa3i+pHpBsSvw8sPHtzg==
codemirror@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29"
integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/commands" "^6.0.0"
"@codemirror/language" "^6.0.0"
"@codemirror/lint" "^6.0.0"
"@codemirror/search" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
collect-v8-coverage@^1.0.0:
version "1.0.1"
@ -1984,6 +2075,11 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
crelt@^1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72"
integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==
cross-env@^7.0.2:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
@ -5017,6 +5113,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
style-mod@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.0.3.tgz#136c4abc905f82a866a18b39df4dc08ec762b1ad"
integrity sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@ -5323,6 +5424,11 @@ w3c-hr-time@^1.0.2:
dependencies:
browser-process-hrtime "^1.0.0"
w3c-keyname@^2.2.4:
version "2.2.8"
resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5"
integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==
w3c-xmlserializer@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923"