diff --git a/package.json b/package.json index 470e74b78..78cd2dc74 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "browser-fs-access": "0.29.1", "canvas-roundrect-polyfill": "0.0.1", "clsx": "1.1.1", + "copyfiles": "2.4.1", "cross-env": "7.0.3", "eslint-plugin-react": "7.32.2", "fake-indexeddb": "3.1.7", @@ -40,7 +41,7 @@ "image-blob-reduce": "3.0.1", "jotai": "1.13.1", "lodash.throttle": "4.1.1", - "mathjax-full": "3.2.2", + "mathjax-full": "https://github.com/MathJax/MathJax-src#develop", "nanoid": "3.3.3", "open-color": "1.9.1", "pako": "1.0.11", @@ -55,6 +56,7 @@ "pwacompat": "2.0.17", "react": "18.2.0", "react-dom": "18.2.0", + "replace-in-file": "7.0.1", "roughjs": "4.5.2", "sass": "1.51.0", "socket.io-client": "2.3.1", @@ -114,7 +116,7 @@ "fix": "yarn fix:other && yarn fix:code", "locales-coverage": "node scripts/build-locales-coverage.js", "locales-coverage:description": "node scripts/locales-coverage-description.js", - "postinstall": "patch-package", + "postinstall": "patch-package && yarn --cwd node_modules/mathjax-full compile-mjs && node scripts/beta-mathjax-import-paths.js", "prepare": "husky install", "prettier": "prettier \"**/*.{css,scss,json,md,html,yml}\" --ignore-path=.eslintignore", "start": "vite", diff --git a/patches/mathjax-full+3.2.2.patch b/patches/mathjax-full+4.0.0-beta.3.patch similarity index 56% rename from patches/mathjax-full+3.2.2.patch rename to patches/mathjax-full+4.0.0-beta.3.patch index 7514477b8..42050375d 100644 --- a/patches/mathjax-full+3.2.2.patch +++ b/patches/mathjax-full+4.0.0-beta.3.patch @@ -1,45 +1,42 @@ -diff --git a/node_modules/mathjax-full/js/input/asciimath/mathjax2/input/AsciiMath.js b/node_modules/mathjax-full/js/input/asciimath/mathjax2/input/AsciiMath.js -index 41f6a1f..25096c6 100644 ---- a/node_modules/mathjax-full/js/input/asciimath/mathjax2/input/AsciiMath.js -+++ b/node_modules/mathjax-full/js/input/asciimath/mathjax2/input/AsciiMath.js +diff --git a/node_modules/mathjax-full/ts/input/asciimath/legacy/shim.js b/node_modules/mathjax-full/ts/input/asciimath/legacy/shim.js +index 3b228bb9..c8bcdea5 100644 +--- a/node_modules/mathjax-full/ts/input/asciimath/legacy/shim.js ++++ b/node_modules/mathjax-full/ts/input/asciimath/legacy/shim.js @@ -1,4 +1,4 @@ --MathJax = Object.assign(global.MathJax || {}, require("../legacy/MathJax.js").MathJax); -+window.MathJax = Object.assign(window.MathJax || {}, require("../legacy/MathJax.js").MathJax); +-MathJax = Object.assign(global.MathJax || {}, require("./MathJax.js").MathJax); ++window.MathJax = Object.assign(window.MathJax || {}, require("./MathJax.js").MathJax); // // Load component-based configuration, if any -@@ -13,11 +13,12 @@ MathJax.Ajax.Preloading( +@@ -13,10 +13,13 @@ MathJax.Ajax.Preloading( "[MathJax]/jax/element/mml/jax.js" ); --require("../legacy/jax/element/mml/jax.js"); --require("../legacy/jax/input/AsciiMath/config.js"); --require("../legacy/jax/input/AsciiMath/jax.js"); -+exports.LegacyAsciiMath = void 0; -+import("../legacy/jax/element/mml/jax.js").then(() => { -+import("../legacy/jax/input/AsciiMath/config.js").then(() => { -+import("../legacy/jax/input/AsciiMath/jax.js").then(() => { +-require("./jax/element/mml/jax.js"); +-require("./jax/input/AsciiMath/config.js"); +-require("./jax/input/AsciiMath/jax.js"); ++module.exports.AsciiMath = void 0; ++(async () => { ++ await import("./jax/element/mml/jax.js"); ++ await import("./jax/input/AsciiMath/config.js"); ++ await import("./jax/input/AsciiMath/jax.js"); --require("../legacy/jax/element/MmlNode.js"); -+import("../legacy/jax/element/MmlNode.js").then(() => { +-require("./jax/element/MmlNode.js"); ++ await import("./jax/element/MmlNode.js"); - var MmlFactory = require("../../../../core/MmlTree/MmlFactory.js").MmlFactory; - var factory = new MmlFactory(); -@@ -37,3 +38,4 @@ exports.LegacyAsciiMath = { - return this.Compile(am,display); - } - }; -+})})})}) -diff --git a/node_modules/mathjax-full/js/input/asciimath/mathjax2/legacy/MathJax.js b/node_modules/mathjax-full/js/input/asciimath/mathjax2/legacy/MathJax.js -index 903ede2..504ae4f 100644 ---- a/node_modules/mathjax-full/js/input/asciimath/mathjax2/legacy/MathJax.js -+++ b/node_modules/mathjax-full/js/input/asciimath/mathjax2/legacy/MathJax.js +-module.exports.AsciiMath = MathJax.InputJax.AsciiMath; ++ module.exports.AsciiMath = MathJax.InputJax.AsciiMath; ++})(); +diff --git a/node_modules/mathjax-full/ts/input/asciimath/legacy/MathJax.js b/node_modules/mathjax-full/ts/input/asciimath/legacy/MathJax.js +index 853b0a0e..1e009028 100644 +--- a/node_modules/mathjax-full/ts/input/asciimath/legacy/MathJax.js ++++ b/node_modules/mathjax-full/ts/input/asciimath/legacy/MathJax.js @@ -19,7 +19,7 @@ exports.MathJax = MathJax; return obj; }; var CONSTRUCTOR = function () { - return function () {return arguments.callee.Init.call(this,arguments)}; -+ return function aaa() {return aaa.Init.call(this,Object.assign(arguments,{call:aaa}))}; ++ return function fn() {return fn.Init.call(this,Object.assign(arguments,{call:fn}))}; }; BASE.Object = OBJECT({ @@ -57,7 +54,7 @@ index 903ede2..504ae4f 100644 prototype: { Init: function () {}, - SUPER: function (fn) {return fn.callee.SUPER}, -+ SUPER: function (fncall) {return fncall.SUPER}, ++ SUPER: function (fn) {return fn.SUPER}, can: function (method) {return typeof(this[method]) === "function"}, has: function (property) {return typeof(this[property]) !== "undefined"}, isa: function (obj) {return (obj instanceof Object) && (this instanceof obj)} @@ -66,23 +63,23 @@ index 903ede2..504ae4f 100644 // var CALLBACK = function (data) { - var cb = function () {return arguments.callee.execute.apply(arguments.callee,arguments)}; -+ var cb = function ccc() {return ccc.execute.apply(ccc,arguments)}; ++ var cb = function fn() {return fn.execute.apply(fn,arguments)}; for (var id in CALLBACK.prototype) { if (CALLBACK.prototype.hasOwnProperty(id)) { if (typeof(data[id]) !== 'undefined') {cb[id] = data[id]} -diff --git a/node_modules/mathjax-full/js/input/asciimath/mathjax2/legacy/jax/element/mml/jax.js b/node_modules/mathjax-full/js/input/asciimath/mathjax2/legacy/jax/element/mml/jax.js -index 96fb918..473aca1 100644 ---- a/node_modules/mathjax-full/js/input/asciimath/mathjax2/legacy/jax/element/mml/jax.js -+++ b/node_modules/mathjax-full/js/input/asciimath/mathjax2/legacy/jax/element/mml/jax.js +diff --git a/node_modules/mathjax-full/ts/input/asciimath/legacy/jax/element/mml/jax.js b/node_modules/mathjax-full/ts/input/asciimath/legacy/jax/element/mml/jax.js +index 96fb9186..473aca11 100644 +--- a/node_modules/mathjax-full/ts/input/asciimath/legacy/jax/element/mml/jax.js ++++ b/node_modules/mathjax-full/ts/input/asciimath/legacy/jax/element/mml/jax.js @@ -813,9 +813,9 @@ MathJax.ElementJax.mml.Augment({ if (!(this.isEmbellished()) || typeof(this.core) === "undefined") {return this} return this.data[this.core].CoreMO(); }, - toString: function () { -+ toString: function qqq() { ++ toString: function fn() { if (this.inferred) {return '[' + this.data.join(',') + ']'} - return this.SUPER(arguments).toString.call(this); -+ return this.SUPER(qqq).toString.call(this); ++ return this.SUPER(fn).toString.call(this); }, setTeXclass: function (prev) { var i, m = this.data.length; @@ -91,13 +88,13 @@ index 96fb918..473aca1 100644 }, linebreakContainer: true, - Append: function () { -+ Append: function www() { ++ Append: function fn() { for (var i = 0, m = arguments.length; i < m; i++) { if (!((arguments[i] instanceof MML.mtr) || (arguments[i] instanceof MML.mlabeledtr))) {arguments[i] = MML.mtr(arguments[i])} } - this.SUPER(arguments).Append.apply(this,arguments); -+ this.SUPER(www).Append.apply(this,arguments); ++ this.SUPER(fn).Append.apply(this,arguments); }, setTeXclass: MML.mbase.setSeparateTeXclasses }); @@ -106,12 +103,12 @@ index 96fb918..473aca1 100644 }, linebreakContainer: true, - Append: function () { -+ Append: function eee() { ++ Append: function fn() { for (var i = 0, m = arguments.length; i < m; i++) { if (!(arguments[i] instanceof MML.mtd)) {arguments[i] = MML.mtd(arguments[i])} } - this.SUPER(arguments).Append.apply(this,arguments); -+ this.SUPER(eee).Append.apply(this,arguments); ++ this.SUPER(fn).Append.apply(this,arguments); }, setTeXclass: MML.mbase.setSeparateTeXclasses }); @@ -120,10 +117,10 @@ index 96fb918..473aca1 100644 MML.xml = MML.mbase.Subclass({ type: "xml", - Init: function () { -+ Init: function rrr() { ++ Init: function fn() { this.div = document.createElement("div"); - return this.SUPER(arguments).Init.apply(this,arguments); -+ return this.SUPER(rrr).Init.apply(this,arguments); ++ return this.SUPER(fn).Init.apply(this,arguments); }, Append: function () { for (var i = 0, m = arguments.length; i < m; i++) { diff --git a/scripts/beta-mathjax-import-paths.js b/scripts/beta-mathjax-import-paths.js new file mode 100644 index 000000000..c8ace6f5e --- /dev/null +++ b/scripts/beta-mathjax-import-paths.js @@ -0,0 +1,10 @@ +// When building MathJax 4.0-beta from source within the Excalidraw tree, some +// import paths don't properly translate from `ts/` to `mjs/`. This makes the +// Excalidraw build process parse MathJax TypeScript files. The resulting error +// messages do not occur if MathJax was built from source outside the +// Excalidraw tree. The following regexp eliminates those error messages. +require("replace-in-file").sync({ + files: "node_modules/mathjax-full/mjs/**/*", + from: /mathjax-full\/ts/g, + to: "mathjax-full/mjs", +}); diff --git a/src/element/subtypes/mathjax/implementation.tsx b/src/element/subtypes/mathjax/implementation.tsx index a3830bc88..5fcef7c53 100644 --- a/src/element/subtypes/mathjax/implementation.tsx +++ b/src/element/subtypes/mathjax/implementation.tsx @@ -137,60 +137,60 @@ const loadMathJax = async () => { mathJaxLoading = true; // MathJax components we use - const AsciiMath = (await import("mathjax-full/js/input/asciimath")) + const AsciiMath = (await import("mathjax-full/mjs/input/asciimath")) .AsciiMath; - const TeX = (await import("mathjax-full/js/input/tex")).TeX; - const SVG = (await import("mathjax-full/js/output/svg")).SVG; - const liteAdaptor = (await import("mathjax-full/js/adaptors/liteAdaptor")) + const TeX = (await import("mathjax-full/mjs/input/tex")).TeX; + const SVG = (await import("mathjax-full/mjs/output/svg")).SVG; + const liteAdaptor = (await import("mathjax-full/mjs/adaptors/liteAdaptor")) .liteAdaptor; - const RegisterHTMLHandler = (await import("mathjax-full/js/handlers/html")) + const RegisterHTMLHandler = (await import("mathjax-full/mjs/handlers/html")) .RegisterHTMLHandler; // Components for MathJax accessibility - const MathML = (await import("mathjax-full/js/input/mathml")).MathML; + const MathML = (await import("mathjax-full/mjs/input/mathml")).MathML; const SerializedMmlVisitor = ( - await import("mathjax-full/js/core/MmlTree/SerializedMmlVisitor") + await import("mathjax-full/mjs/core/MmlTree/SerializedMmlVisitor") ).SerializedMmlVisitor; const Sre = useSRE - ? (await import("mathjax-full/js/a11y/sre")).Sre + ? (await import("mathjax-full/mjs/a11y/sre")).Sre : undefined; // Import some TeX packages - await import("mathjax-full/js/input/tex/ams/AmsConfiguration"); + await import("mathjax-full/mjs/input/tex/ams/AmsConfiguration"); await import( - "mathjax-full/js/input/tex/boldsymbol/BoldsymbolConfiguration" + "mathjax-full/mjs/input/tex/boldsymbol/BoldsymbolConfiguration" ); // Set the following to "true" to import the "mhchem" and "physics" packages. const includeMhchemPhysics = false; if (includeMhchemPhysics) { - await import("mathjax-full/js/input/tex/mhchem/MhchemConfiguration"); - await import("mathjax-full/js/input/tex/physics/PhysicsConfiguration"); + await import("mathjax-full/mjs/input/tex/mhchem/MhchemConfiguration"); + await import("mathjax-full/mjs/input/tex/physics/PhysicsConfiguration"); } const texPackages = includeMhchemPhysics ? ["base", "ams", "boldsymbol", "mhchem", "physics"] : ["base", "ams", "boldsymbol"]; // Types needed to lazy-load MathJax - const LiteElement = (await import("mathjax-full/js/adaptors/lite/Element")) + const LiteElement = (await import("mathjax-full/mjs/adaptors/lite/Element")) .LiteElement; - const LiteText = (await import("mathjax-full/js/adaptors/lite/Text")) + const LiteText = (await import("mathjax-full/mjs/adaptors/lite/Text")) .LiteText; const LiteDocument = ( - await import("mathjax-full/js/adaptors/lite/Document") + await import("mathjax-full/mjs/adaptors/lite/Document") ).LiteDocument; // Configure AsciiMath to use the "display" option. See // https://github.com/mathjax/MathJax/issues/2520#issuecomment-1128831182. const MathJax = ( await import( - /* @vite-ignore */ "mathjax-full/js/input/asciimath/mathjax2/legacy/MathJax" + /* @vite-ignore */ "mathjax-full/mjs/input/asciimath/legacy/MathJax" ) ).MathJax; mathJax.amFixes = MathJax.InputJax.AsciiMath.AM.Augment; // Load the document creator last - const mathjax = (await import("mathjax-full/js/mathjax")).mathjax; + const mathjax = (await import("mathjax-full/mjs/mathjax")).mathjax; type E = typeof LiteElement; type T = typeof LiteText; @@ -252,7 +252,7 @@ const loadMathJax = async () => { try { const mathmap = JSON.stringify( import( - /* @vite-ignore */ `mathjax-full/es5/sre/mathmaps/${locale}.json` + /* @vite-ignore */ `mathjax-full/mjs/sre/mathmaps/${locale}.json` ), ); resolve(mathmap); diff --git a/src/global.d.ts b/src/global.d.ts index af79408ce..d543d1646 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -117,4 +117,4 @@ declare namespace jest { } } -declare module "mathjax-full/js/input/asciimath/mathjax2/legacy/MathJax"; +declare module "mathjax-full/mjs/input/asciimath/legacy/MathJax"; diff --git a/yarn.lock b/yarn.lock index fb8f09541..5f2f37b7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2878,6 +2878,11 @@ loupe "^2.3.6" pretty-format "^29.5.0" +"@xmldom/xmldom@0.9.0-beta.8": + version "0.9.0-beta.8" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.9.0-beta.8.tgz#ef343e627e4d5eba57c52b40c2e1f26d12738512" + integrity sha512-Q5bFbYxRJKTYP7S1a0HIlumTmJRHHMGrNvBp8F1mUEyyGTeCs0g8+FKAaA6tU+YFsZgHKA0eRKzZhYdhpgAHAw== + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -3442,6 +3447,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clsx@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" @@ -3483,10 +3497,10 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9" - integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== +commander@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" + integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== commander@^2.20.0: version "2.20.3" @@ -3533,6 +3547,19 @@ 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== +copyfiles@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" + integrity sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg== + dependencies: + glob "^7.0.5" + minimatch "^3.0.3" + mkdirp "^1.0.4" + noms "0.0.0" + through2 "^2.0.1" + untildify "^4.0.0" + yargs "^16.1.0" + core-js-compat@^3.25.1: version "3.30.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.0.tgz#99aa2789f6ed2debfa1df3232784126ee97f4d80" @@ -3550,6 +3577,11 @@ core-js@^3.4: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.0.tgz#64ac6f83bc7a49fd42807327051701d4b1478dea" integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + corser@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" @@ -4238,11 +4270,6 @@ eslint@^7.32.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -esm@^3.2.25: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" @@ -4585,7 +4612,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4597,6 +4624,17 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.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== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -4874,7 +4912,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5111,6 +5149,11 @@ is-wsl@^2.1.1: dependencies: is-docker "^2.0.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + isarray@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" @@ -5121,6 +5164,11 @@ isarray@^2.0.5: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -5600,15 +5648,19 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -mathjax-full@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/mathjax-full/-/mathjax-full-3.2.2.tgz#43f02e55219db393030985d2b6537ceae82f1fa7" - integrity sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w== +"mathjax-full@https://github.com/MathJax/MathJax-src#develop": + version "4.0.0-beta.3" + resolved "https://github.com/MathJax/MathJax-src#9ca76266fc7b26ddab4efb983eebe900e3a428c0" dependencies: - esm "^3.2.25" - mhchemparser "^4.1.0" - mj-context-menu "^0.6.1" - speech-rule-engine "^4.0.6" + mathjax-modern-font "^4.0.0-beta.3" + mhchemparser "^4.2.1" + mj-context-menu "^0.9.1" + speech-rule-engine "^4.1.0-beta.7" + +mathjax-modern-font@^4.0.0-beta.3: + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.com/mathjax-modern-font/-/mathjax-modern-font-4.0.0-beta.3.tgz#2d032255f47e7730e3beb5d3061606f5f1e8c376" + integrity sha512-rUD7Hxu2yKCogWg0PVx5l4iMn2mOjcD4/vseIU+u2RxFkRfEDvfCphdBiQv27O8wnYEbdhjmn9+v4cDeDowDWg== merge-stream@^2.0.0: version "2.0.0" @@ -5620,10 +5672,10 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -mhchemparser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mhchemparser/-/mhchemparser-4.1.0.tgz#db204c394c46c0070e115270a7e45c15b5f0c2f5" - integrity sha512-rFj6nGMLJQQ0WcDw3j4LY/kWCq1EftcsarQWnDg38U47XMR36Tlda19WsN4spHr0Qc9Wn4oj6YtvXuwVnOKC/g== +mhchemparser@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/mhchemparser/-/mhchemparser-4.2.1.tgz#d73982e66bc06170a85b1985600ee9dabe157cb0" + integrity sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ== micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" @@ -5660,7 +5712,7 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -5679,10 +5731,10 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mj-context-menu@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz#a043c5282bf7e1cf3821de07b13525ca6f85aa69" - integrity sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA== +mj-context-menu@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/mj-context-menu/-/mj-context-menu-0.9.1.tgz#8195fb10092488d9feeba8b50f03fa56080edb14" + integrity sha512-ECPcVXZFRfeYOxb1MWGzctAtnQcZ6nRucE3orfkKX7t/KE2mlXO2K/bq4BcCGOuhdz3Wg2BZDy2S8ECK73/iIw== mkdirp@^0.5.6: version "0.5.6" @@ -5691,6 +5743,11 @@ mkdirp@^0.5.6: dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mlly@^1.2.0, mlly@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b" @@ -5766,6 +5823,14 @@ node-releases@^2.0.8: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +noms@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" + integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== + dependencies: + inherits "^2.0.1" + readable-stream "~1.0.31" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -6164,6 +6229,11 @@ pretty-format@^29.0.0, pretty-format@^29.5.0: ansi-styles "^5.0.0" react-is "^18.0.0" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -6322,6 +6392,29 @@ react@18.2.0: dependencies: loose-envify "^1.1.0" +readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.3.6: + 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" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -6404,6 +6497,15 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" +replace-in-file@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-7.0.1.tgz#1bb69a2e5596341cc6f0f581309add6c1d364b71" + integrity sha512-KbhgPq04eA+TxXuUxpgWIH9k/TjF+28ofon2PXP7vq6izAILhxOtksCVcLuuQLtyjouBaPdlH6RJYYcSPVxCOA== + dependencies: + chalk "^4.1.2" + glob "^8.1.0" + yargs "^17.7.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6545,7 +6647,7 @@ safari-14-idb-fix@^3.0.0: resolved "https://registry.yarnpkg.com/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz#450fc049b996ec7f3fd9ca2f89d32e0761583440" integrity sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog== -safe-buffer@5.1.2: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -6768,14 +6870,14 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -speech-rule-engine@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/speech-rule-engine/-/speech-rule-engine-4.0.6.tgz#325dfa4528f25f6aa52d44cf7ee158c7fc0c395d" - integrity sha512-Hqa4ywf7d3lX2YsnnE8BeEdqFyaTwPSyyVhVGWZlQw4XVh0NCijyVsMZD3I9HsG5JBuDXyRaMVVNZcGJlKbZxA== +speech-rule-engine@^4.1.0-beta.7: + version "4.1.0-beta.7" + resolved "https://registry.yarnpkg.com/speech-rule-engine/-/speech-rule-engine-4.1.0-beta.7.tgz#b3690bbe27582c07c86631e11cc045e3d3b154cc" + integrity sha512-e9QntjrfSKDa/w0baCXsoPQRPD9uY0r7q86Jr8ud/5zElzdG0Beiz4mc38kFb/E53c4RuYyZKSKyug8e5cVrpQ== dependencies: - commander "9.2.0" + "@xmldom/xmldom" "0.9.0-beta.8" + commander "10.0.0" wicked-good-xpath "1.3.0" - xmldom-sre "0.1.31" sprintf-js@~1.0.2: version "1.0.3" @@ -6875,6 +6977,18 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -7016,6 +7130,14 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +through2@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -7252,6 +7374,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -7310,6 +7437,11 @@ use-sync-external-store@1.2.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -7833,11 +7965,6 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xmldom-sre@0.1.31: - version "0.1.31" - resolved "https://registry.yarnpkg.com/xmldom-sre/-/xmldom-sre-0.1.31.tgz#10860d5bab2c603144597d04bf2c4980e98067f4" - integrity sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw== - xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" @@ -7848,6 +7975,11 @@ xmlhttprequest@1.8.0: resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -7878,7 +8010,12 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^16.2.0: +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.1.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -7891,6 +8028,19 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + 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" + yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"