diff --git a/.vscode/settings.json b/.vscode/settings.json index a7a60240..ff638551 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "editor.formatOnSave": true, - "cSpell.words": ["asyncable", "pako", "Serde", "serdes"], + "cSpell.words": ["asyncable", "mindmap", "pako", "Serde", "serdes"], "vitest.commandLine": "yarn test:unit", "vitest.enable": true, "testing.autoRun.mode": "rerun", diff --git a/package.json b/package.json index e811b146..77bb23ff 100644 --- a/package.json +++ b/package.json @@ -65,11 +65,12 @@ "vitest": "0.24.3" }, "dependencies": { + "@mermaid-js/mermaid-mindmap": "9.2.2-rc.2", "analytics": "0.8.1", "analytics-plugin-plausible": "0.0.6", "daisyui": "2.37.0", "js-base64": "3.7.2", - "mermaid": "9.2.0", + "mermaid": "9.2.2-rc.2", "moment": "2.29.4", "monaco-editor": "0.34.1", "monaco-mermaid": "1.0.6", diff --git a/src/lib/util/mermaid.ts b/src/lib/util/mermaid.ts index 5e91c2e8..d6697928 100644 --- a/src/lib/util/mermaid.ts +++ b/src/lib/util/mermaid.ts @@ -1,21 +1,7 @@ -import mermaid from 'mermaid'; -// We need to export MermaidConfig and all related types from mermaid. -import type { MermaidConfig } from 'mermaid/dist/config.type'; -import { env } from './env'; -const { mermaidBaseURL, mermaidCDNUrl, useLocalMermaid } = env; +import mermaid, { type MermaidConfig } from 'mermaid'; +import mindmap from '@mermaid-js/mermaid-mindmap'; -const getDiagramURL = (name: string, version: string): string => { - if (useLocalMermaid) { - return `${mermaidBaseURL}/${name}-detector.esm.mjs`; - } - return `${mermaidCDNUrl}/${name}@${version}/dist/${name}-detector.esm.mjs`; -}; - -const initialize = mermaid.initializeAsync({ - // logLevel: 0, - lazyLoadedDiagrams: [getDiagramURL('mermaid-mindmap', '9.2.0-rc4')], - loadExternalDiagramsAtStartup: true -}); +const initialize = mermaid.registerExternalDiagrams([mindmap]); export const init = async () => { await initialize; @@ -37,5 +23,5 @@ export const render = async ( export const parse = async (code: string): Promise => { await init(); - return mermaid.parseAsync(code); + return (await mermaid.parseAsync(code)) as boolean; }; diff --git a/yarn.lock b/yarn.lock index 56e3d71d..65c7e203 100644 --- a/yarn.lock +++ b/yarn.lock @@ -250,6 +250,18 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@mermaid-js/mermaid-mindmap@9.2.2-rc.2": + version "9.2.2-rc.2" + resolved "https://registry.yarnpkg.com/@mermaid-js/mermaid-mindmap/-/mermaid-mindmap-9.2.2-rc.2.tgz#6703dec434c020182b323de3045c2f555ed5f3b7" + integrity sha512-/mEPI62y6/6r7Hsf6M1F2qhv4gH+WIz/EyKjnqCtJ7sCBF7/m1VJQz8MQIJfggGS1LqxPDbvtcztfzwMBu9/vg== + dependencies: + "@braintree/sanitize-url" "^6.0.0" + cytoscape "^3.23.0" + cytoscape-cose-bilkent "^4.1.0" + cytoscape-fcose "^2.1.0" + d3 "^7.0.0" + non-layered-tidy-tree-layout "^2.0.2" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -1278,6 +1290,20 @@ core-util-is@1.0.2: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cose-base@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-1.0.3.tgz#650334b41b869578a543358b80cda7e0abe0a60a" + integrity sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg== + dependencies: + layout-base "^1.0.0" + +cose-base@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-2.1.0.tgz#89b2d4a59d7bd0cde3138a4689825f3e8a5abd6a" + integrity sha512-HTMm07dhxq1dIPGWwpiVrIk9n+DH7KYmqWA786mLe8jDS+1ZjGtJGIIsJVKoseZXS6/FxiUWCJ2B7XzqUCuhPw== + dependencies: + layout-base "^2.0.0" + cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" @@ -1481,6 +1507,28 @@ cypress@10.11.0: untildify "^4.0.0" yauzl "^2.10.0" +cytoscape-cose-bilkent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz#762fa121df9930ffeb51a495d87917c570ac209b" + integrity sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ== + dependencies: + cose-base "^1.0.0" + +cytoscape-fcose@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cytoscape-fcose/-/cytoscape-fcose-2.1.0.tgz#04c3093776ea6b71787009de641607db7d4edf55" + integrity sha512-Q3apPl66jf8/2sMsrCjNP247nbDkyIPjA9g5iPMMWNLZgP3/mn9aryF7EFY/oRPEpv7bKJ4jYmCoU5r5/qAc1Q== + dependencies: + cose-base "^2.0.0" + +cytoscape@^3.23.0: + version "3.23.0" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.23.0.tgz#054ee05a6d0aa3b4f139382bbf2f4e5226df3c6d" + integrity sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA== + dependencies: + heap "^0.2.6" + lodash "^4.17.21" + d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" @@ -3082,6 +3130,11 @@ he@1.2.0: resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +heap@^0.2.6: + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -3482,6 +3535,16 @@ kleur@^4.1.4, kleur@^4.1.5: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== +layout-base@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-1.0.2.tgz#1291e296883c322a9dd4c5dd82063721b53e26e2" + integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg== + +layout-base@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-2.0.1.tgz#d0337913586c90f9c2c075292069f5c2da5dd285" + integrity sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg== + lazy-ass@1.6.0, lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz" @@ -3685,10 +3748,10 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -mermaid@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.2.0.tgz#e73bfe252a8cb12427fcb9cb38867d8f2d1a77f0" - integrity sha512-iWKTBjHoPUSs+mJMpZ5+K9xg97KflKjbv91Bu42yK2jjz4wX4Nt1eshi+bmmFWAhn7f2R0X55hlxxbSxdp0QYA== +mermaid@9.2.2-rc.2: + version "9.2.2-rc.2" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.2.2-rc.2.tgz#869c51f9923c0501f3af94da6a0812d69f214212" + integrity sha512-diWNUCpIxzlZXuDlfokENDezjhh7fcCHuhpJYLD0+pHesut1MnbaajnoyPnmFMcGy4GFGtJMI96CPov3xUHqhg== dependencies: "@braintree/sanitize-url" "^6.0.0" d3 "^7.0.0"