From 2312642c34d97da498bd910a8159012d2f6988ef Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Sat, 6 May 2023 19:43:49 +0200 Subject: [PATCH] Use mermaid-isomorphic This handles the logic of dealing with a browser. This also means that under the hood Playwright is used instead of Puppeteer. This also updates to Mermaid 10. Since there are no more different implementations for Node.js and the browser in this package, browser tests have been removed. --- README.md | 47 +- browser.ts | 35 - index.html | 1 - index.ts | 134 +- package-lock.json | 1225 +++-------------- package.json | 13 +- playwright.config.ts | 16 - shared.ts | 73 - test/runInBrowser.ts | 29 - test/test.ts | 86 +- test/test.ts-snapshots/cjk-browser.html | 2 - test/test.ts-snapshots/cjk-browser.md | 3 - test/test.ts-snapshots/cjk-node.html | 2 +- test/test.ts-snapshots/cjk-node.md | 2 +- test/test.ts-snapshots/dark-browser.html | 2 - test/test.ts-snapshots/dark-browser.md | 3 - test/test.ts-snapshots/dark-node.html | 2 +- test/test.ts-snapshots/dark-node.md | 2 +- test/test.ts-snapshots/error-browser.html | 26 - test/test.ts-snapshots/error-browser.md | 28 - test/test.ts-snapshots/error-node.html | 2 +- test/test.ts-snapshots/error-node.md | 2 +- .../test.ts-snapshots/errorEmpty-browser.html | 3 - test/test.ts-snapshots/errorEmpty-browser.md | 5 - test/test.ts-snapshots/flowchart-browser.html | 2 - test/test.ts-snapshots/flowchart-browser.md | 3 - test/test.ts-snapshots/flowchart-node.html | 2 +- test/test.ts-snapshots/flowchart-node.md | 2 +- .../fontawesome-browser.html | 4 - test/test.ts-snapshots/fontawesome-browser.md | 7 - test/test.ts-snapshots/fontawesome-node.html | 2 +- test/test.ts-snapshots/fontawesome-node.md | 2 +- test/test.ts-snapshots/forest-browser.html | 2 - test/test.ts-snapshots/forest-browser.md | 3 - test/test.ts-snapshots/forest-node.html | 2 +- test/test.ts-snapshots/forest-node.md | 2 +- test/test.ts-snapshots/multiple-browser.html | 9 - test/test.ts-snapshots/multiple-browser.md | 17 - test/test.ts-snapshots/multiple-node.html | 8 +- test/test.ts-snapshots/multiple-node.md | 8 +- test/test.ts-snapshots/neutral-browser.html | 2 - test/test.ts-snapshots/neutral-browser.md | 3 - test/test.ts-snapshots/neutral-node.html | 2 +- test/test.ts-snapshots/neutral-node.md | 2 +- .../test.ts-snapshots/no-mermaid-browser.html | 3 - test/test.ts-snapshots/no-mermaid-browser.md | 5 - test/test.ts-snapshots/sequence-browser.html | 2 - test/test.ts-snapshots/sequence-browser.md | 3 - test/test.ts-snapshots/sequence-node.html | 2 +- test/test.ts-snapshots/sequence-node.md | 2 +- test/test.ts-snapshots/simple-browser.html | 4 - test/test.ts-snapshots/simple-browser.md | 7 - test/test.ts-snapshots/simple-node.html | 2 +- test/test.ts-snapshots/simple-node.md | 2 +- 54 files changed, 322 insertions(+), 1537 deletions(-) delete mode 100644 browser.ts delete mode 100644 index.html delete mode 100644 shared.ts delete mode 100644 test/runInBrowser.ts delete mode 100644 test/test.ts-snapshots/cjk-browser.html delete mode 100644 test/test.ts-snapshots/cjk-browser.md delete mode 100644 test/test.ts-snapshots/dark-browser.html delete mode 100644 test/test.ts-snapshots/dark-browser.md delete mode 100644 test/test.ts-snapshots/error-browser.html delete mode 100644 test/test.ts-snapshots/error-browser.md delete mode 100644 test/test.ts-snapshots/errorEmpty-browser.html delete mode 100644 test/test.ts-snapshots/errorEmpty-browser.md delete mode 100644 test/test.ts-snapshots/flowchart-browser.html delete mode 100644 test/test.ts-snapshots/flowchart-browser.md delete mode 100644 test/test.ts-snapshots/fontawesome-browser.html delete mode 100644 test/test.ts-snapshots/fontawesome-browser.md delete mode 100644 test/test.ts-snapshots/forest-browser.html delete mode 100644 test/test.ts-snapshots/forest-browser.md delete mode 100644 test/test.ts-snapshots/multiple-browser.html delete mode 100644 test/test.ts-snapshots/multiple-browser.md delete mode 100644 test/test.ts-snapshots/neutral-browser.html delete mode 100644 test/test.ts-snapshots/neutral-browser.md delete mode 100644 test/test.ts-snapshots/no-mermaid-browser.html delete mode 100644 test/test.ts-snapshots/no-mermaid-browser.md delete mode 100644 test/test.ts-snapshots/sequence-browser.html delete mode 100644 test/test.ts-snapshots/sequence-browser.md delete mode 100644 test/test.ts-snapshots/simple-browser.html delete mode 100644 test/test.ts-snapshots/simple-browser.md diff --git a/README.md b/README.md index 1a3f6a2..3300640 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,20 @@ [![prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io) A [remark](https://remark.js.org) plugin to render [mermaid](https://mermaid-js.github.io) diagrams -using [puppeteer](https://pptr.dev). +using [playwright](https://playwright.dev). ## Table of Contents - [Installation](#installation) - [Usage](#usage) - [Options](#options) + - [`unified().use(remarkMermaid, options?)`](#unifieduseremarkmermaid-options) + - [`browser`](#browser) + - [`css`](#css) - [`errorFallback`](#errorfallback) - [`launchOptions`](#launchoptions) - [`mermaidOptions`](#mermaidoptions) + - [`prefix`](#prefix) - [License](#license) ## Installation @@ -24,10 +28,15 @@ using [puppeteer](https://pptr.dev). npm install remark-mermaidjs ``` -Since this package uses Google Chrome, You have to make sure it’s available on your system. You may -also need to install some additional packages, such as fonts, depending on your system. For more -information, see the Puppeteer -[troubleshooting](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md) guide. +In Node.js this package uses [playwright](https://playwright.dev) under the hood. To use it, you may +need to install additional dependencies. These can be installed with: + +```sh +npx playwright install --with-deps chromium +``` + +See the Playwright [Browsers](https://playwright.dev/docs/browsers) documentation for more +information. ## Usage @@ -41,13 +50,7 @@ import remarkMermaid from 'remark-mermaidjs'; const { value } = await remark() .use(remarkMermaid, { - launchOptions: { - executablePath: 'path/to/chrome/executable', - - /* More puppeteer launch options */ - }, - - /* More options */ + /* Options */ }) .process(await readFile('readme.md')); @@ -56,6 +59,19 @@ console.log(value); ### Options +This package has a default export `remarkMermaid`. + +### `unified().use(remarkMermaid, options?)` + +#### `browser` + +The Playwright browser to use. (`object`, default: chromium) + +#### `css` + +A URL that points to a custom CSS file to load. Use this to load custom fonts. This option is +ignored in the browser. You need to include the CSS in your build manually. (`string` | `URL`) + #### `errorFallback` Create a fallback node if processing of a mermaid diagram fails. If nothing is returned, the code @@ -67,8 +83,7 @@ block is removed. The function receives the following arguments: #### `launchOptions` -These options are passed to -[`puppeteer.launch()`](https://pptr.dev/#?product=Puppeteer&show=api-puppeteerlaunchoptions). +The options used to launch the browser. (`object`) - **Note**: This options is required in Node.js. In the browser this option is unused. @@ -79,6 +94,10 @@ The [mermaid options](https://mermaid-js.github.io/mermaid/#/Setup) to use. **Note**: This options is only supported in Node.js. In the browser this option is unused. If you use this in a browser, call `mermaid.initialize()` manually. +#### `prefix` + +A custom prefix to use for Mermaid IDs. (`string`, default: `mermaid`) + ## License [MIT](LICENSE.md) © [Remco Haszing](https://github.com/remcohaszing) diff --git a/browser.ts b/browser.ts deleted file mode 100644 index f1bed5d..0000000 --- a/browser.ts +++ /dev/null @@ -1,35 +0,0 @@ -import mermaid from 'mermaid'; -import { type RemarkMermaid } from 'remark-mermaidjs'; - -import { extractCodeBlocks, replaceCodeBlocks } from './shared.js'; - -let counter = 0; -const remarkMermaid: RemarkMermaid = (options) => (ast, file) => { - const instances = extractCodeBlocks(ast); - - // Nothing to do. No need to do further processing. - if (!instances.length) { - return; - } - - const results = instances.map(([node]) => { - try { - // @ts-expect-error The mermaid types are wrong. - const result = mermaid.render(`remark-mermaid-${counter}`, node.value); - counter += 1; - return { - success: true, - result, - }; - } catch (error) { - return { - success: false, - result: error instanceof Error ? error.message : String(error), - }; - } - }); - - replaceCodeBlocks(instances, results, options, file); -}; - -export default remarkMermaid; diff --git a/index.html b/index.html deleted file mode 100644 index 0e76edd..0000000 --- a/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/index.ts b/index.ts index 8c29778..d99e16c 100644 --- a/index.ts +++ b/index.ts @@ -1,36 +1,19 @@ -import { createRequire } from 'node:module'; - -import { type BlockContent, type Code, type Root } from 'mdast'; -import { type MermaidConfig } from 'mermaid'; -import puppeteer, { type Browser, type Page, type PuppeteerLaunchOptions } from 'puppeteer-core'; +import { fromHtmlIsomorphic } from 'hast-util-from-html-isomorphic'; +import { type BlockContent, type Code, type Parent, type Root } from 'mdast'; +import { + createMermaidRenderer, + type CreateMermaidRendererOptions, + type RenderOptions, +} from 'mermaid-isomorphic'; import { type Plugin } from 'unified'; +import { visit } from 'unist-util-visit'; import { type VFile } from 'vfile'; -import { extractCodeBlocks, replaceCodeBlocks, type Result } from './shared.js'; - -const mermaidScript = { - path: createRequire(import.meta.url).resolve('mermaid/dist/mermaid.min.js'), -}; - -// eslint-disable-next-line @typescript-eslint/consistent-type-imports -declare const mermaid: typeof import('mermaid').default; - -export interface RemarkMermaidOptions { - /** - * Launch options to pass to puppeteer. - * - * **Note**: This options is required in Node.js. In the browser this option is unused. - */ - launchOptions?: PuppeteerLaunchOptions; - - /** - * The mermaid options to use. - * - * **Note**: This options is only supported in Node.js. In the browser this option is unused. If - * you use this in a browser, call `mermaid.initialize()` manually. - */ - mermaidOptions?: MermaidConfig; +type CodeInstance = [Code, Parent]; +export interface RemarkMermaidOptions + extends CreateMermaidRendererOptions, + Omit { /** * Create a fallback node if processing of a mermaid diagram fails. * @@ -50,72 +33,47 @@ export type RemarkMermaid = Plugin<[RemarkMermaidOptions?], Root>; * @param options Options that may be used to tweak the output. */ const remarkMermaid: RemarkMermaid = (options) => { - if (!options?.launchOptions?.executablePath) { - throw new Error('The option `launchOptions.executablePath` is required when using Node.js'); - } - - const { launchOptions, mermaidOptions } = options; - - let browserPromise: Promise | undefined; - let count = 0; + const render = createMermaidRenderer(options); return async function transformer(ast, file) { - const instances = extractCodeBlocks(ast); + const instances: CodeInstance[] = []; - // Nothing to do. No need to start puppeteer in this case. - if (!instances.length) { - return; - } - - count += 1; - browserPromise ??= puppeteer.launch({ - args: ['--no-sandbox', '--disable-setuid-sandbox'], - ...launchOptions, + visit(ast, { type: 'code', lang: 'mermaid' }, (node: Code, index, parent: Parent) => { + instances.push([node, parent]); }); - const browser = await browserPromise; - let page: Page | undefined; - let results: Result[]; - try { - page = await browser.newPage(); - await page.goto(String(new URL('index.html', import.meta.url))); - await page.addScriptTag(mermaidScript); - - results = await page.evaluate( - // We can’t calculate coverage on this function, as it’s run by Chrome, not Node. - /* c8 ignore start */ - (codes, initOptions) => { - if (initOptions) { - mermaid.initialize(initOptions); - } - return codes.map((code, index) => { - try { - return { - success: true, - result: mermaid.render(`remark-mermaid-${index}`, code), - }; - } catch (error) { - return { - success: false, - result: error instanceof Error ? error.message : String(error), - }; - } - }); - }, - /* C8 ignore stop */ - instances.map((instance) => instance[0].value), - mermaidOptions, - ); - } finally { - count -= 1; - await page?.close(); + // Nothing to do. No need to start a browser in this case. + if (!instances.length) { + return; } - replaceCodeBlocks(instances, results, options, file); - - if (!count) { - browserPromise = undefined; - await browser?.close(); + const results = await render( + instances.map((instance) => instance[0].value), + options, + ); + + for (const [i, [node, parent]] of instances.entries()) { + const result = results[i]; + const nodeIndex = parent.children.indexOf(node); + + if (result.status === 'fulfilled') { + const { svg } = result.value; + const hChildren = fromHtmlIsomorphic(svg, { fragment: true }).children; + parent.children[nodeIndex] = { + type: 'paragraph', + children: [{ type: 'html', value: svg }], + data: { hChildren }, + }; + } else if (options?.errorFallback) { + const fallback = options.errorFallback(node, result.reason, file); + if (fallback) { + parent.children[nodeIndex] = fallback; + } else { + parent.children.splice(nodeIndex, 1); + } + } else { + file.fail(result.reason, node, 'remark-mermaidjs:remark-mermaidjs'); + } } }; }; diff --git a/package-lock.json b/package-lock.json index 8aac0f7..5f0c5bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,7 @@ "dependencies": { "@types/mdast": "^3.0.0", "hast-util-from-html-isomorphic": "^1.0.0", - "mermaid": "^9.0.0", - "puppeteer-core": "^19.0.0", + "mermaid-isomorphic": "^2.0.0", "unified": "^10.0.0", "unist-util-visit": "^4.0.0", "vfile": "^5.0.0" @@ -20,9 +19,7 @@ "devDependencies": { "@playwright/test": "^1.0.0", "@types/node": "^18.0.0", - "@types/sinon": "^10.0.0", "c8": "^7.0.0", - "esbuild": "^0.15.0", "eslint": "^8.0.0", "eslint-config-remcohaszing": "^9.0.0", "prettier": "^2.0.0", @@ -31,7 +28,6 @@ "remark-cli": "^11.0.0", "remark-preset-remcohaszing": "^1.0.0", "remark-rehype": "^10.0.0", - "sinon": "^15.0.0", "typescript": "^5.0.0" }, "engines": { @@ -173,38 +169,6 @@ "node": "^14 || ^16 || ^17 || ^18 || ^19 || ^20" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -261,6 +225,15 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz", + "integrity": "sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -424,6 +397,18 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@khanacademy/simple-markdown": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@khanacademy/simple-markdown/-/simple-markdown-0.9.2.tgz", + "integrity": "sha512-iRkSaVuUT+ho8B0aY0uLGgfS1YU84l/mSwjJTh0N0k0WzjdJUJY4+Eh56kn8whwD8QX6uNblAT0lT5ICATLtZg==", + "dependencies": { + "@types/react": ">=16.0.0" + }, + "peerDependencies": { + "react": "16.14.0", + "react-dom": "16.14.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -604,126 +589,6 @@ "fsevents": "2.3.2" } }, - "node_modules/@puppeteer/browsers": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", - "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", - "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=14.1.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@puppeteer/browsers/node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0" - } - }, - "node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true - }, "node_modules/@types/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.0.tgz", @@ -809,7 +674,7 @@ "version": "18.16.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", - "devOptional": true + "dev": true }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -830,6 +695,26 @@ "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", "dev": true }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", + "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, "node_modules/@types/semver": { "version": "7.3.13", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", @@ -837,21 +722,6 @@ "dev": true, "peer": true }, - "node_modules/@types/sinon": { - "version": "10.0.14", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.14.tgz", - "integrity": "sha512-mn72up6cjaMyMuaPaa/AwKf6WtsSRysQC7wxFkCm1XcOKXPM1z+5Y4H5wjIVBz4gdAkjvZxVVfjA6ba1nHr5WQ==", - "dev": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", - "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", - "dev": true - }, "node_modules/@types/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", @@ -869,15 +739,6 @@ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.59.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz", @@ -1104,17 +965,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1135,6 +985,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1143,6 +994,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1302,25 +1154,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1330,16 +1163,6 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1362,37 +1185,6 @@ "node": ">=8" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1591,22 +1383,6 @@ "node": ">= 6" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/chromium-bidi": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", - "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", - "dependencies": { - "mitt": "3.0.0" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -1661,6 +1437,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1671,7 +1448,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/comma-separated-tokens": { "version": "2.0.3", @@ -1741,14 +1519,6 @@ "layout-base": "^1.0.0" } }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1763,6 +1533,11 @@ "node": ">= 8" } }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, "node_modules/cytoscape": { "version": "3.24.0", "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.24.0.tgz", @@ -2181,9 +1956,9 @@ } }, "node_modules/dagre-d3-es": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", - "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", "dependencies": { "d3": "^7.8.2", "lodash-es": "^4.17.21" @@ -2198,6 +1973,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -2273,11 +2049,6 @@ "node": ">=6" } }, - "node_modules/devtools-protocol": { - "version": "0.0.1107588", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", - "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" - }, "node_modules/diff": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", @@ -2313,9 +2084,9 @@ } }, "node_modules/dompurify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", - "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.2.tgz", + "integrity": "sha512-B8c6JdiEpxAKnd8Dm++QQxJL4lfuc757scZtcapj6qjTjrQzyq5iAyznLKVvK+77eYNiFblHBlt7MM0fOeqoKw==" }, "node_modules/eastasianwidth": { "version": "0.2.0", @@ -2331,15 +2102,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/entities": { "version": "4.5.0", @@ -2419,401 +2183,45 @@ "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "peer": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "peer": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "cpu": [ - "x64" - ], + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "peer": true, + "dependencies": { + "has": "^1.0.3" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "cpu": [ - "arm64" - ], + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "peer": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -3437,25 +2845,6 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3532,14 +2921,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -3631,11 +3012,6 @@ "node": ">=0.4.x" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3696,6 +3072,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -3715,20 +3092,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -4140,18 +3503,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -4163,25 +3514,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -4249,7 +3581,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "4.1.0", @@ -4482,6 +3815,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -4662,12 +3996,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4741,8 +4069,7 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -4810,12 +4137,6 @@ "json5": "lib/cli.js" } }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, "node_modules/khroma": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", @@ -4903,12 +4224,6 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4925,6 +4240,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5451,28 +4778,45 @@ } }, "node_modules/mermaid": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.3.tgz", - "integrity": "sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==", + "version": "10.2.0-rc.2", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.2.0-rc.2.tgz", + "integrity": "sha512-kKP+hOahUeIKYlvKvpO1l6oPv3C8Z6R3EDEMnxQC2J6kmI3fs+A3DSSWUVwIKcPmMz0roaD+VRv1knnTFVJPCQ==", "dependencies": { - "@braintree/sanitize-url": "^6.0.0", + "@braintree/sanitize-url": "^6.0.2", + "@khanacademy/simple-markdown": "^0.9.0", "cytoscape": "^3.23.0", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.1.0", "d3": "^7.4.0", - "dagre-d3-es": "7.0.9", + "dagre-d3-es": "7.0.10", "dayjs": "^1.11.7", - "dompurify": "2.4.3", + "dompurify": "3.0.2", "elkjs": "^0.8.2", "khroma": "^2.0.0", "lodash-es": "^4.17.21", "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.2", + "stylis": "^4.1.3", "ts-dedent": "^2.2.0", "uuid": "^9.0.0", "web-worker": "^1.2.0" } }, + "node_modules/mermaid-isomorphic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mermaid-isomorphic/-/mermaid-isomorphic-2.0.0.tgz", + "integrity": "sha512-gLvSiDk2edx6XT+RufoN3XKZDXRk9F5VeBlfTbQPcNNTegCLVlGn8ppt7HHIPFlkTmhzN6QYA7n5qF2Mowv7Mw==", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.0.0", + "mermaid": "10.2.0-rc.2", + "playwright-core": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, "node_modules/micromark": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", @@ -6093,16 +5437,6 @@ "node": ">=8" } }, - "node_modules/mitt": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -6115,7 +5449,8 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", @@ -6130,28 +5465,6 @@ "dev": true, "peer": true }, - "node_modules/nise": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", - "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^10.0.2", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/nise/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, "node_modules/nlcst-to-string": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz", @@ -6165,25 +5478,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/non-layered-tidy-tree-layout": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", @@ -6251,6 +5545,15 @@ "integrity": "sha512-/fYevVkXRcyBiZDg6yzZbm0RuaD6i0qRfn8yr+6D0KgBMOndFPxuW10qCHpzs50nN8qKuv78k8MuotZhcVX6Pw==", "dev": true }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -6312,6 +5615,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -6571,15 +5875,6 @@ "node": "14 || >=16.14" } }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "dependencies": { - "isarray": "0.0.1" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -6590,11 +5885,6 @@ "node": ">=8" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -6611,7 +5901,6 @@ "version": "1.33.0", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.33.0.tgz", "integrity": "sha512-aizyPE1Cj62vAECdph1iaMILpT0WUDCq3E6rW6I+dleSbBoGbktvJtzS6VHkZ4DKNEOG9qJpiom/ZxO+S15LAw==", - "dev": true, "bin": { "playwright": "cli.js" }, @@ -6674,12 +5963,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, "node_modules/property-information": { @@ -6700,20 +5992,6 @@ "levenshtein-edit-distance": "^1.0.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -6723,35 +6001,6 @@ "node": ">=6" } }, - "node_modules/puppeteer-core": { - "version": "19.11.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", - "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", - "dependencies": { - "@puppeteer/browsers": "0.5.0", - "chromium-bidi": "0.4.7", - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1107588", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "proxy-from-env": "1.1.0", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.13.0" - }, - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "typescript": ">= 4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6772,6 +6021,41 @@ } ] }, + "node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + }, "node_modules/read-package-json-fast": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", @@ -6908,6 +6192,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7558,6 +6843,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7775,6 +7061,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -7820,6 +7107,16 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, "node_modules/semver": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", @@ -7877,24 +7174,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/sinon": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.4.tgz", - "integrity": "sha512-uzmfN6zx3GQaria1kwgWGeKiXSSbShBbue6Dcj0SI8fiCNFbiUDqKl57WFlY5lyhxZVUKmXvzgG2pilRQCBwWg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.0.2", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.4", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -7954,6 +7233,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -7962,6 +7242,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8062,6 +7343,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8147,32 +7429,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -8193,11 +7449,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -8224,11 +7475,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -8304,15 +7550,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -8350,7 +7587,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "devOptional": true, + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8375,15 +7612,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, "node_modules/unherit": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz", @@ -8728,7 +7956,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/uuid": { "version": "9.0.0", @@ -8989,20 +8218,6 @@ "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -9069,6 +8284,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9102,32 +8318,14 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } @@ -9174,15 +8372,6 @@ "node": ">=10" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 43cf4a4..92db8e3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "remark-mermaidjs", "version": "4.1.1", - "description": "A remark plugin to render mermaid diagrams using puppeteer", + "description": "A remark plugin to render mermaid diagrams", "exports": { "browser": "./browser.js", "types": "./index.d.ts", @@ -9,11 +9,8 @@ }, "type": "module", "files": [ - "browser.js", "index.d.ts", - "index.html", - "index.js", - "shared.js" + "index.js" ], "scripts": { "prepack": "tsc --noEmit false", @@ -40,8 +37,7 @@ "dependencies": { "@types/mdast": "^3.0.0", "hast-util-from-html-isomorphic": "^1.0.0", - "mermaid": "^9.0.0", - "puppeteer-core": "^19.0.0", + "mermaid-isomorphic": "^2.0.0", "unified": "^10.0.0", "unist-util-visit": "^4.0.0", "vfile": "^5.0.0" @@ -49,9 +45,7 @@ "devDependencies": { "@playwright/test": "^1.0.0", "@types/node": "^18.0.0", - "@types/sinon": "^10.0.0", "c8": "^7.0.0", - "esbuild": "^0.15.0", "eslint": "^8.0.0", "eslint-config-remcohaszing": "^9.0.0", "prettier": "^2.0.0", @@ -60,7 +54,6 @@ "remark-cli": "^11.0.0", "remark-preset-remcohaszing": "^1.0.0", "remark-rehype": "^10.0.0", - "sinon": "^15.0.0", "typescript": "^5.0.0" } } diff --git a/playwright.config.ts b/playwright.config.ts index 870ec4d..b380f07 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,24 +1,8 @@ import { type PlaywrightTestConfig } from '@playwright/test'; -import { serve } from 'esbuild'; - -const { port } = await serve( - { servedir: 'test' }, - { - bundle: true, - entryPoints: ['./test/runInBrowser.ts'], - format: 'esm', - platform: 'browser', - }, -); const config: PlaywrightTestConfig = { testMatch: /test\/test\.ts$/, metadata: {}, - webServer: { - command: '', - port, - reuseExistingServer: true, - }, }; export default config; diff --git a/shared.ts b/shared.ts deleted file mode 100644 index 253d02a..0000000 --- a/shared.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { fromHtmlIsomorphic } from 'hast-util-from-html-isomorphic'; -import { type Code, type Parent, type Root } from 'mdast'; -import { visit } from 'unist-util-visit'; -import { type VFile } from 'vfile'; - -import { type RemarkMermaidOptions } from './index.js'; - -type CodeInstance = [Code, number, Parent]; - -/** - * Extract Mermaid code blocks from the AST. - * - * @param ast The markdown AST to extract code blocks from. - * @returns A list of tuples that represent the code blocks. - */ -export function extractCodeBlocks(ast: Root): CodeInstance[] { - const instances: CodeInstance[] = []; - - visit(ast, { type: 'code', lang: 'mermaid' }, (node: Code, index, parent: Parent) => { - instances.push([node, index, parent]); - }); - - return instances; -} - -export interface Result { - /** - * This indicates diagram was rendered succesfully. - */ - success: boolean; - - /** - * Either the resulting SVG code or the error message depending on the success status. - */ - result: string; -} - -/** - * Replace the code blocks with rendered diagrams. - * - * @param instances The code block instances to replace. - * @param results The diagram rendering results. - * @param options The `remark-mermaidjs` options as given by the user. - * @param file The file to report errors on. - */ -export function replaceCodeBlocks( - instances: CodeInstance[], - results: Result[], - options: RemarkMermaidOptions | undefined, - file: VFile, -): void { - for (const [i, [node, index, parent]] of instances.entries()) { - const result = results[i]; - if (result.success) { - const value = result.result; - const hChildren = fromHtmlIsomorphic(value, { fragment: true }).children; - parent.children[index] = { - type: 'paragraph', - children: [{ type: 'html', value }], - data: { hChildren }, - }; - } else if (options?.errorFallback) { - const fallback = options.errorFallback(node, result.result, file); - if (fallback) { - parent.children[index] = fallback; - } else { - parent.children.splice(index, 1); - } - } else { - file.fail(result.result, node, 'remark-mermaidjs:remark-mermaidjs'); - } - } -} diff --git a/test/runInBrowser.ts b/test/runInBrowser.ts deleted file mode 100644 index 953c891..0000000 --- a/test/runInBrowser.ts +++ /dev/null @@ -1,29 +0,0 @@ -import rehypeStringify from 'rehype-stringify'; -import { remark } from 'remark'; -import { type RemarkMermaidOptions } from 'remark-mermaidjs'; -import remarkRehype from 'remark-rehype'; - -import { options as error } from './fixtures/error/options.js'; -import { options as errorEmpty } from './fixtures/errorEmpty/options.js'; -import remarkMermaid from '../browser.js'; - -const options: Record = { error, errorEmpty }; - -/** - * Process a fixture using remark and remark-mermaidjs. - * - * This function is run in the browser. - * - * @param name The name of the fixture to process. - * @returns A tuple of the file processed to both markdown and HTML. - */ -export async function processFixture(name: string): Promise<[string, string]> { - const testOptions = name in options ? options[name] : undefined; - const path = `fixtures/${name}/input.md`; - const response = await fetch(path); - const value = await response.text(); - const processor = remark().use(remarkMermaid, testOptions); - const asMarkdown = processor.processSync({ path, value }); - const asHTML = processor().use(remarkRehype).use(rehypeStringify).processSync({ path, value }); - return [asMarkdown.value as string, asHTML.value as string]; -} diff --git a/test/test.ts b/test/test.ts index 56f5747..f0b4d4d 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1,44 +1,15 @@ import { readdir, readFile } from 'node:fs/promises'; -import { chromium, expect, test } from '@playwright/test'; -import puppeteer from 'puppeteer-core'; +import { expect, test } from '@playwright/test'; import rehypeStringify from 'rehype-stringify'; import { remark } from 'remark'; import remarkRehype from 'remark-rehype'; -import sinon from 'sinon'; import { VFile } from 'vfile'; import remarkMermaid, { type RemarkMermaidOptions } from '../index.js'; const fixtures = new URL('fixtures/', import.meta.url); const fixtureNames = await readdir(fixtures); -const launchOptions = { - executablePath: chromium.executablePath(), -}; -const markdown = ` -\`\`\`mermaid -graph TD; -A-->B; -\`\`\` -`; - -test.describe.parallel('browser', () => { - for (const name of fixtureNames) { - test(name, async ({ page }, testInfo) => { - testInfo.snapshotSuffix = 'browser'; - await page.goto('/'); - - const result = await page.evaluate(async (fixtureName) => { - const { processFixture } = await import('./runInBrowser.js'); - - return processFixture(fixtureName); - }, name); - - expect(result[0]).toMatchSnapshot({ name: `${name}.md` }); - expect(result[1]).toMatchSnapshot({ name: `${name}.html` }); - }); - } -}); test.describe.parallel('node', () => { for (const name of fixtureNames) { @@ -47,12 +18,9 @@ test.describe.parallel('node', () => { testInfo.snapshotSuffix = 'node'; const fixture = new URL(`${name}/`, fixtures); const value = await readFile(new URL('input.md', fixture)); - let options: RemarkMermaidOptions = { - launchOptions, - }; + let options: RemarkMermaidOptions | undefined; try { ({ options } = await import(String(new URL('options.ts', fixture)))); - options.launchOptions = launchOptions; } catch { // This test case uses default options. } @@ -66,57 +34,17 @@ test.describe.parallel('node', () => { expect(asHTML.value).toMatchSnapshot({ name: `${name}.html` }); }); } -}); - -test.describe.serial('node', () => { - test.afterEach(() => { - sinon.restore(); - }); - - test('it should not launch the browser if no graphs are defined', async () => { - const processor = remark().use(remarkMermaid, { launchOptions }); - const launch = sinon.spy(puppeteer, 'launch'); - await processor.process('```js\n```'); - sinon.assert.notCalled(launch); - }); - - test('it should share the browser for concurrent calls', async () => { - const processor = remark().use(remarkMermaid, { launchOptions }); - const launch = sinon.spy(puppeteer, 'launch'); - await Promise.all( - Array.from({ length: 3 }) - .fill(markdown) - .map((content) => processor.process(content)), - ); - sinon.assert.calledOnce(launch); - }); - - test('it should close the browser if no more files are being processed', async () => { - const processor = remark().use(remarkMermaid, { launchOptions }); - const launch = sinon.spy(puppeteer, 'launch'); - for (const content of Array.from({ length: 3 }).fill(markdown)) { - await processor.process(content); - } - sinon.assert.calledThrice(launch); - }); - - test('it should throw an error if no executablePath is given', () => { - expect(() => remark().use(remarkMermaid).processSync('')).toThrowError( - 'The option `launchOptions.executablePath` is required when using Node.js', - ); - expect(() => remark().use(remarkMermaid, { launchOptions: {} }).processSync('')).toThrowError( - 'The option `launchOptions.executablePath` is required when using Node.js', - ); - }); test('it should throw a vfile error if a diagram is invalid without error fallback', async () => { - const processor = remark().use(remarkMermaid, { launchOptions }); + const processor = remark().use(remarkMermaid); const file = new VFile('```mermaid\ninvalid\n```\n'); await expect(() => processor.process(file)).rejects.toThrowError( - 'No diagram type detected for text: invalid', + 'No diagram type detected matching given configuration for text: invalid', ); expect(file.messages).toHaveLength(1); - expect(file.messages[0].message).toBe('No diagram type detected for text: invalid'); + expect(file.messages[0].message).toBe( + 'No diagram type detected matching given configuration for text: invalid', + ); expect(file.messages[0].source).toBe('remark-mermaidjs'); expect(file.messages[0].ruleId).toBe('remark-mermaidjs'); expect(file.messages[0].fatal).toBe(true); diff --git a/test/test.ts-snapshots/cjk-browser.html b/test/test.ts-snapshots/cjk-browser.html deleted file mode 100644 index ddbe4ab..0000000 --- a/test/test.ts-snapshots/cjk-browser.html +++ /dev/null @@ -1,2 +0,0 @@ -

An example of a CJK (Related Korean)

-

아이디어
로드맵
요구사항
디자인
구현
테스트
배포

\ No newline at end of file diff --git a/test/test.ts-snapshots/cjk-browser.md b/test/test.ts-snapshots/cjk-browser.md deleted file mode 100644 index 3a74846..0000000 --- a/test/test.ts-snapshots/cjk-browser.md +++ /dev/null @@ -1,3 +0,0 @@ -# An example of a CJK (Related Korean) - -
아이디어
로드맵
요구사항
디자인
구현
테스트
배포
diff --git a/test/test.ts-snapshots/cjk-node.html b/test/test.ts-snapshots/cjk-node.html index 5516a9f..0a90d57 100644 --- a/test/test.ts-snapshots/cjk-node.html +++ b/test/test.ts-snapshots/cjk-node.html @@ -1,2 +1,2 @@

An example of a CJK (Related Korean)

-

아이디어
로드맵
요구사항
디자인
구현
테스트
배포

\ No newline at end of file +

아이디어
로드맵
요구사항
디자인
구현
테스트
배포

\ No newline at end of file diff --git a/test/test.ts-snapshots/cjk-node.md b/test/test.ts-snapshots/cjk-node.md index ee13e6e..c94c4f3 100644 --- a/test/test.ts-snapshots/cjk-node.md +++ b/test/test.ts-snapshots/cjk-node.md @@ -1,3 +1,3 @@ # An example of a CJK (Related Korean) -
아이디어
로드맵
요구사항
디자인
구현
테스트
배포
+
아이디어
로드맵
요구사항
디자인
구현
테스트
배포
diff --git a/test/test.ts-snapshots/dark-browser.html b/test/test.ts-snapshots/dark-browser.html deleted file mode 100644 index cef2b57..0000000 --- a/test/test.ts-snapshots/dark-browser.html +++ /dev/null @@ -1,2 +0,0 @@ -

An example of a flowchart

-

A
B
C
D

\ No newline at end of file diff --git a/test/test.ts-snapshots/dark-browser.md b/test/test.ts-snapshots/dark-browser.md deleted file mode 100644 index 8d6c020..0000000 --- a/test/test.ts-snapshots/dark-browser.md +++ /dev/null @@ -1,3 +0,0 @@ -# An example of a flowchart - -
A
B
C
D
diff --git a/test/test.ts-snapshots/dark-node.html b/test/test.ts-snapshots/dark-node.html index c68e3d4..9315285 100644 --- a/test/test.ts-snapshots/dark-node.html +++ b/test/test.ts-snapshots/dark-node.html @@ -1,2 +1,2 @@

An example of a flowchart

-

A
B
C
D

\ No newline at end of file +

A
B
C
D

\ No newline at end of file diff --git a/test/test.ts-snapshots/dark-node.md b/test/test.ts-snapshots/dark-node.md index ec54c7d..dccb79d 100644 --- a/test/test.ts-snapshots/dark-node.md +++ b/test/test.ts-snapshots/dark-node.md @@ -1,3 +1,3 @@ # An example of a flowchart -
A
B
C
D
+
A
B
C
D
diff --git a/test/test.ts-snapshots/error-browser.html b/test/test.ts-snapshots/error-browser.html deleted file mode 100644 index a7bab20..0000000 --- a/test/test.ts-snapshots/error-browser.html +++ /dev/null @@ -1,26 +0,0 @@ -

Error

-

This is an invalid diagram

-
input.md
-
-No diagram type detected for text: invalid
-
-{
-  "type": "code",
-  "lang": "mermaid",
-  "meta": null,
-  "value": "invalid",
-  "position": {
-    "start": {
-      "line": 5,
-      "column": 1,
-      "offset": 37
-    },
-    "end": {
-      "line": 7,
-      "column": 4,
-      "offset": 59
-    }
-  }
-}
-
-

More content

\ No newline at end of file diff --git a/test/test.ts-snapshots/error-browser.md b/test/test.ts-snapshots/error-browser.md deleted file mode 100644 index 1a58c26..0000000 --- a/test/test.ts-snapshots/error-browser.md +++ /dev/null @@ -1,28 +0,0 @@ -# Error - -This is an invalid diagram - - input.md - - No diagram type detected for text: invalid - - { - "type": "code", - "lang": "mermaid", - "meta": null, - "value": "invalid", - "position": { - "start": { - "line": 5, - "column": 1, - "offset": 37 - }, - "end": { - "line": 7, - "column": 4, - "offset": 59 - } - } - } - -More content diff --git a/test/test.ts-snapshots/error-node.html b/test/test.ts-snapshots/error-node.html index a7bab20..5264b40 100644 --- a/test/test.ts-snapshots/error-node.html +++ b/test/test.ts-snapshots/error-node.html @@ -2,7 +2,7 @@

Error

This is an invalid diagram

input.md
 
-No diagram type detected for text: invalid
+UnknownDiagramError: No diagram type detected matching given configuration for text: invalid
 
 {
   "type": "code",
diff --git a/test/test.ts-snapshots/error-node.md b/test/test.ts-snapshots/error-node.md
index 1a58c26..13808ef 100644
--- a/test/test.ts-snapshots/error-node.md
+++ b/test/test.ts-snapshots/error-node.md
@@ -4,7 +4,7 @@ This is an invalid diagram
 
     input.md
 
-    No diagram type detected for text: invalid
+    UnknownDiagramError: No diagram type detected matching given configuration for text: invalid
 
     {
       "type": "code",
diff --git a/test/test.ts-snapshots/errorEmpty-browser.html b/test/test.ts-snapshots/errorEmpty-browser.html
deleted file mode 100644
index 0f15354..0000000
--- a/test/test.ts-snapshots/errorEmpty-browser.html
+++ /dev/null
@@ -1,3 +0,0 @@
-

Error

-

This is an invalid diagram

-

More content

\ No newline at end of file diff --git a/test/test.ts-snapshots/errorEmpty-browser.md b/test/test.ts-snapshots/errorEmpty-browser.md deleted file mode 100644 index 9a74afb..0000000 --- a/test/test.ts-snapshots/errorEmpty-browser.md +++ /dev/null @@ -1,5 +0,0 @@ -# Error - -This is an invalid diagram - -More content diff --git a/test/test.ts-snapshots/flowchart-browser.html b/test/test.ts-snapshots/flowchart-browser.html deleted file mode 100644 index cef2b57..0000000 --- a/test/test.ts-snapshots/flowchart-browser.html +++ /dev/null @@ -1,2 +0,0 @@ -

An example of a flowchart

-

A
B
C
D

\ No newline at end of file diff --git a/test/test.ts-snapshots/flowchart-browser.md b/test/test.ts-snapshots/flowchart-browser.md deleted file mode 100644 index 8d6c020..0000000 --- a/test/test.ts-snapshots/flowchart-browser.md +++ /dev/null @@ -1,3 +0,0 @@ -# An example of a flowchart - -
A
B
C
D
diff --git a/test/test.ts-snapshots/flowchart-node.html b/test/test.ts-snapshots/flowchart-node.html index c5bde33..9315285 100644 --- a/test/test.ts-snapshots/flowchart-node.html +++ b/test/test.ts-snapshots/flowchart-node.html @@ -1,2 +1,2 @@

An example of a flowchart

-

A
B
C
D

\ No newline at end of file +

A
B
C
D

\ No newline at end of file diff --git a/test/test.ts-snapshots/flowchart-node.md b/test/test.ts-snapshots/flowchart-node.md index 99c1ba4..dccb79d 100644 --- a/test/test.ts-snapshots/flowchart-node.md +++ b/test/test.ts-snapshots/flowchart-node.md @@ -1,3 +1,3 @@ # An example of a flowchart -
A
B
C
D
+
A
B
C
D
diff --git a/test/test.ts-snapshots/fontawesome-browser.html b/test/test.ts-snapshots/fontawesome-browser.html deleted file mode 100644 index 6b74e51..0000000 --- a/test/test.ts-snapshots/fontawesome-browser.html +++ /dev/null @@ -1,4 +0,0 @@ -

Basic support for fontawesome

-

It is possible to add icons from fontawesome.

-

The icons are acessed via the syntax fa:#icon class name#.

-

for peace
forbidden
A perhaps?

\ No newline at end of file diff --git a/test/test.ts-snapshots/fontawesome-browser.md b/test/test.ts-snapshots/fontawesome-browser.md deleted file mode 100644 index dd7f6fb..0000000 --- a/test/test.ts-snapshots/fontawesome-browser.md +++ /dev/null @@ -1,7 +0,0 @@ -# Basic support for fontawesome - -It is possible to add icons from fontawesome. - -The icons are acessed via the syntax `fa:#icon class name#`. - -
for peace
forbidden
A perhaps?
diff --git a/test/test.ts-snapshots/fontawesome-node.html b/test/test.ts-snapshots/fontawesome-node.html index 56a3cc4..8db989d 100644 --- a/test/test.ts-snapshots/fontawesome-node.html +++ b/test/test.ts-snapshots/fontawesome-node.html @@ -1,4 +1,4 @@

Basic support for fontawesome

It is possible to add icons from fontawesome.

The icons are acessed via the syntax fa:#icon class name#.

-

for peace
forbidden
A perhaps?

\ No newline at end of file +

for peace
forbidden
A perhaps?

\ No newline at end of file diff --git a/test/test.ts-snapshots/fontawesome-node.md b/test/test.ts-snapshots/fontawesome-node.md index 13c3cee..0967501 100644 --- a/test/test.ts-snapshots/fontawesome-node.md +++ b/test/test.ts-snapshots/fontawesome-node.md @@ -4,4 +4,4 @@ It is possible to add icons from fontawesome. The icons are acessed via the syntax `fa:#icon class name#`. -
for peace
forbidden
A perhaps?
+
for peace
forbidden
A perhaps?
diff --git a/test/test.ts-snapshots/forest-browser.html b/test/test.ts-snapshots/forest-browser.html deleted file mode 100644 index cef2b57..0000000 --- a/test/test.ts-snapshots/forest-browser.html +++ /dev/null @@ -1,2 +0,0 @@ -

An example of a flowchart

-

A
B
C
D

\ No newline at end of file diff --git a/test/test.ts-snapshots/forest-browser.md b/test/test.ts-snapshots/forest-browser.md deleted file mode 100644 index 8d6c020..0000000 --- a/test/test.ts-snapshots/forest-browser.md +++ /dev/null @@ -1,3 +0,0 @@ -# An example of a flowchart - -
A
B
C
D
diff --git a/test/test.ts-snapshots/forest-node.html b/test/test.ts-snapshots/forest-node.html index 7d6ce99..9315285 100644 --- a/test/test.ts-snapshots/forest-node.html +++ b/test/test.ts-snapshots/forest-node.html @@ -1,2 +1,2 @@

An example of a flowchart

-

A
B
C
D

\ No newline at end of file +

A
B
C
D

\ No newline at end of file diff --git a/test/test.ts-snapshots/forest-node.md b/test/test.ts-snapshots/forest-node.md index 13b6bd2..dccb79d 100644 --- a/test/test.ts-snapshots/forest-node.md +++ b/test/test.ts-snapshots/forest-node.md @@ -1,3 +1,3 @@ # An example of a flowchart -
A
B
C
D
+
A
B
C
D
diff --git a/test/test.ts-snapshots/multiple-browser.html b/test/test.ts-snapshots/multiple-browser.html deleted file mode 100644 index 2efd251..0000000 --- a/test/test.ts-snapshots/multiple-browser.html +++ /dev/null @@ -1,9 +0,0 @@ -

Demos

-

Basic sequence diagram

-

AliceBobJohnBob thinks a longlong time, so longthat the text doesnot fit on a row.Hello Bob, how are you?How about you John?I am good thanks!I am good thanks!Checking with John...Yes... John, how are you?AliceBobJohn

-

Basic flowchart

-

Link text
Square Rect
Circle
Round Rect
Rhombus

-

Loops, alt and opt

-

AliceBobalt[is sick][is well]opt[Extra response]loop[Daily query]Hello Bob, how are you?Not so good :(Feeling fresh like a daisyThanks for askingAliceBob

-

Message to self in loop

-

AliceBobJohnloop[Healthcheck]Rational thoughtsprevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn

\ No newline at end of file diff --git a/test/test.ts-snapshots/multiple-browser.md b/test/test.ts-snapshots/multiple-browser.md deleted file mode 100644 index 6c8ad6b..0000000 --- a/test/test.ts-snapshots/multiple-browser.md +++ /dev/null @@ -1,17 +0,0 @@ -# Demos - -## Basic sequence diagram - -AliceBobJohnBob thinks a longlong time, so longthat the text doesnot fit on a row.Hello Bob, how are you?How about you John?I am good thanks!I am good thanks!Checking with John...Yes... John, how are you?AliceBobJohn - -## Basic flowchart - -
Link text
Square Rect
Circle
Round Rect
Rhombus
- -## Loops, alt and opt - -AliceBobalt[is sick][is well]opt[Extra response]loop[Daily query]Hello Bob, how are you?Not so good :(Feeling fresh like a daisyThanks for askingAliceBob - -## Message to self in loop - -AliceBobJohnloop[Healthcheck]Rational thoughtsprevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn diff --git a/test/test.ts-snapshots/multiple-node.html b/test/test.ts-snapshots/multiple-node.html index 4311e69..89b5536 100644 --- a/test/test.ts-snapshots/multiple-node.html +++ b/test/test.ts-snapshots/multiple-node.html @@ -1,9 +1,9 @@

Demos

Basic sequence diagram

-

AliceBobJohnBob thinks a longlong time, so longthat the text doesnot fit on a row.Hello Bob, how are you?How about you John?I am good thanks!I am good thanks!Checking with John...Yes... John, how are you?AliceBobJohn

+

AliceBobJohnBob thinks a longlong time, so longthat the text doesnot fit on a row.Hello Bob, how are you?How about you John?I am good thanks!I am good thanks!Checking with John...Yes... John, how are you?AliceBobJohn

Basic flowchart

-

Link text
Square Rect
Circle
Round Rect
Rhombus

+

Link text
Square Rect
Circle
Round Rect
Rhombus

Loops, alt and opt

-

AliceBobalt[is sick][is well]opt[Extra response]loop[Daily query]Hello Bob, how are you?Not so good :(Feeling fresh like a daisyThanks for askingAliceBob

+

AliceBobalt[is sick][is well]opt[Extra response]loop[Daily query]Hello Bob, how are you?Not so good :(Feeling fresh like a daisyThanks for askingAliceBob

Message to self in loop

-

AliceBobJohnloop[Healthcheck]Rational thoughtsprevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn

\ No newline at end of file +

AliceBobJohnloop[Healthcheck]Rational thoughtsprevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn

\ No newline at end of file diff --git a/test/test.ts-snapshots/multiple-node.md b/test/test.ts-snapshots/multiple-node.md index 96e11b0..3f19871 100644 --- a/test/test.ts-snapshots/multiple-node.md +++ b/test/test.ts-snapshots/multiple-node.md @@ -2,16 +2,16 @@ ## Basic sequence diagram -AliceBobJohnBob thinks a longlong time, so longthat the text doesnot fit on a row.Hello Bob, how are you?How about you John?I am good thanks!I am good thanks!Checking with John...Yes... John, how are you?AliceBobJohn +AliceBobJohnBob thinks a longlong time, so longthat the text doesnot fit on a row.Hello Bob, how are you?How about you John?I am good thanks!I am good thanks!Checking with John...Yes... John, how are you?AliceBobJohn ## Basic flowchart -
Link text
Square Rect
Circle
Round Rect
Rhombus
+
Link text
Square Rect
Circle
Round Rect
Rhombus
## Loops, alt and opt -AliceBobalt[is sick][is well]opt[Extra response]loop[Daily query]Hello Bob, how are you?Not so good :(Feeling fresh like a daisyThanks for askingAliceBob +AliceBobalt[is sick][is well]opt[Extra response]loop[Daily query]Hello Bob, how are you?Not so good :(Feeling fresh like a daisyThanks for askingAliceBob ## Message to self in loop -AliceBobJohnloop[Healthcheck]Rational thoughtsprevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn +AliceBobJohnloop[Healthcheck]Rational thoughtsprevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn diff --git a/test/test.ts-snapshots/neutral-browser.html b/test/test.ts-snapshots/neutral-browser.html deleted file mode 100644 index cef2b57..0000000 --- a/test/test.ts-snapshots/neutral-browser.html +++ /dev/null @@ -1,2 +0,0 @@ -

An example of a flowchart

-

A
B
C
D

\ No newline at end of file diff --git a/test/test.ts-snapshots/neutral-browser.md b/test/test.ts-snapshots/neutral-browser.md deleted file mode 100644 index 8d6c020..0000000 --- a/test/test.ts-snapshots/neutral-browser.md +++ /dev/null @@ -1,3 +0,0 @@ -# An example of a flowchart - -
A
B
C
D
diff --git a/test/test.ts-snapshots/neutral-node.html b/test/test.ts-snapshots/neutral-node.html index fafafea..9315285 100644 --- a/test/test.ts-snapshots/neutral-node.html +++ b/test/test.ts-snapshots/neutral-node.html @@ -1,2 +1,2 @@

An example of a flowchart

-

A
B
C
D

\ No newline at end of file +

A
B
C
D

\ No newline at end of file diff --git a/test/test.ts-snapshots/neutral-node.md b/test/test.ts-snapshots/neutral-node.md index b60904a..dccb79d 100644 --- a/test/test.ts-snapshots/neutral-node.md +++ b/test/test.ts-snapshots/neutral-node.md @@ -1,3 +1,3 @@ # An example of a flowchart -
A
B
C
D
+
A
B
C
D
diff --git a/test/test.ts-snapshots/no-mermaid-browser.html b/test/test.ts-snapshots/no-mermaid-browser.html deleted file mode 100644 index 893842f..0000000 --- a/test/test.ts-snapshots/no-mermaid-browser.html +++ /dev/null @@ -1,3 +0,0 @@ -

No medmaid

-
console.log('This is a JavaScript code block');
-
\ No newline at end of file diff --git a/test/test.ts-snapshots/no-mermaid-browser.md b/test/test.ts-snapshots/no-mermaid-browser.md deleted file mode 100644 index fca3f7f..0000000 --- a/test/test.ts-snapshots/no-mermaid-browser.md +++ /dev/null @@ -1,5 +0,0 @@ -# No medmaid - -```js -console.log('This is a JavaScript code block'); -``` diff --git a/test/test.ts-snapshots/sequence-browser.html b/test/test.ts-snapshots/sequence-browser.html deleted file mode 100644 index 4f513a4..0000000 --- a/test/test.ts-snapshots/sequence-browser.html +++ /dev/null @@ -1,2 +0,0 @@ -

An example of a sequence diagram

-

AliceBobJohnloop[Healthcheck]Rational thoughts prevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn

\ No newline at end of file diff --git a/test/test.ts-snapshots/sequence-browser.md b/test/test.ts-snapshots/sequence-browser.md deleted file mode 100644 index 49b6498..0000000 --- a/test/test.ts-snapshots/sequence-browser.md +++ /dev/null @@ -1,3 +0,0 @@ -# An example of a sequence diagram - -AliceBobJohnloop[Healthcheck]Rational thoughts prevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn diff --git a/test/test.ts-snapshots/sequence-node.html b/test/test.ts-snapshots/sequence-node.html index 93213fe..65cb8a8 100644 --- a/test/test.ts-snapshots/sequence-node.html +++ b/test/test.ts-snapshots/sequence-node.html @@ -1,2 +1,2 @@

An example of a sequence diagram

-

AliceBobJohnloop[Healthcheck]Rational thoughts prevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn

\ No newline at end of file +

AliceBobJohnloop[Healthcheck]Rational thoughts prevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn

\ No newline at end of file diff --git a/test/test.ts-snapshots/sequence-node.md b/test/test.ts-snapshots/sequence-node.md index 49b6498..5e8ba2e 100644 --- a/test/test.ts-snapshots/sequence-node.md +++ b/test/test.ts-snapshots/sequence-node.md @@ -1,3 +1,3 @@ # An example of a sequence diagram -AliceBobJohnloop[Healthcheck]Rational thoughts prevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn +AliceBobJohnloop[Healthcheck]Rational thoughts prevail...Hello John, how are you?Fight against hypochondriaGreat!How about you?Jolly good!AliceBobJohn diff --git a/test/test.ts-snapshots/simple-browser.html b/test/test.ts-snapshots/simple-browser.html deleted file mode 100644 index 1851368..0000000 --- a/test/test.ts-snapshots/simple-browser.html +++ /dev/null @@ -1,4 +0,0 @@ -

Simple

-

This is a simple mermaid diagram.

-

A
B
C
D

-

It is rendered above.

\ No newline at end of file diff --git a/test/test.ts-snapshots/simple-browser.md b/test/test.ts-snapshots/simple-browser.md deleted file mode 100644 index baced8c..0000000 --- a/test/test.ts-snapshots/simple-browser.md +++ /dev/null @@ -1,7 +0,0 @@ -# Simple - -This is a simple mermaid diagram. - -
A
B
C
D
- -It is rendered above. diff --git a/test/test.ts-snapshots/simple-node.html b/test/test.ts-snapshots/simple-node.html index a51e787..85e307c 100644 --- a/test/test.ts-snapshots/simple-node.html +++ b/test/test.ts-snapshots/simple-node.html @@ -1,4 +1,4 @@

Simple

This is a simple mermaid diagram.

-

A
B
C
D

+

A
B
C
D

It is rendered above.

\ No newline at end of file diff --git a/test/test.ts-snapshots/simple-node.md b/test/test.ts-snapshots/simple-node.md index 53628fa..57b7c55 100644 --- a/test/test.ts-snapshots/simple-node.md +++ b/test/test.ts-snapshots/simple-node.md @@ -2,6 +2,6 @@ This is a simple mermaid diagram. -
A
B
C
D
+
A
B
C
D
It is rendered above.