diff --git a/.github/workflows/mdsvex.yaml b/.github/workflows/mdsvex.yaml index 99ba4730..9df946d6 100644 --- a/.github/workflows/mdsvex.yaml +++ b/.github/workflows/mdsvex.yaml @@ -2,9 +2,13 @@ name: mdsvex on: push: + branches: + - main paths-ignore: - 'site/**' pull_request: + branches: + - main paths-ignore: - 'site/**' @@ -43,7 +47,7 @@ jobs: cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' - run: pnpm i --frozen-lockfile - - run: pnpm test + - run: pnpm test:run - run: pnpm -r build env: CI: true diff --git a/.github/workflows/npm-previews.yaml b/.github/workflows/npm-previews.yaml index c8b1ec61..e2eedcdd 100644 --- a/.github/workflows/npm-previews.yaml +++ b/.github/workflows/npm-previews.yaml @@ -2,6 +2,8 @@ name: npm-previews on: pull_request: + branches: + - main paths-ignore: - 'site/**' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 930b3a6e..3e8742ec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ name: Release on: push: branches: - - master + - main jobs: release: diff --git a/package.json b/package.json index c20a929d..e5303482 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,12 @@ "version": "0.8.5", "description": "Markdown preprocessor for Svelte", "repository": "https://github.com/pngwn/MDsveX", + "type": "module", "scripts": { "lint": "prettier --check .", "format": "prettier --write .", "test": "pnpm -r --filter=!site test", - "test:filter": "uvu -r ts-node/register", + "test:run": "vitest run . **/*.spec.ts ", "release": "pnpm -r build && changeset publish", "changeset:add": "changeset add", "changeset:version": "changeset version && pnpm i --lockfile-only", @@ -26,19 +27,23 @@ "devDependencies": { "@changesets/changelog-github": "^0.4.0", "@changesets/cli": "^2.16.0", - "@rollup/plugin-typescript": "^8.2.1", + "@rollup/plugin-typescript": "^11.1.6", "@types/node": "^14.14.44", - "esm": "^3.2.25", "prettier": "^2.2.1", - "rollup": "^2.77.4-1", - "rollup-plugin-dts": "^3.0.1", - "ts-node": "^9.1.1", + "rollup": "^4.20.0", + "rollup-plugin-dts": "^6.1.1", "typescript": "^4.2.4", - "uvu": "^0.5.1", "watchlist": "^0.2.3" }, "dependencies": { - "tslib": "^2.3.1" + "@rollup/plugin-commonjs": "^26.0.1", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^5.0.7", + "@rollup/plugin-sucrase": "^5.0.2", + "rollup-plugin-node-globals": "^1.4.0", + "tslib": "^2.3.1", + "vitest": "^2.0.5" }, "engines": { "pnpm": "^9.1.0" diff --git a/packages/mdsvex/CHANGELOG.md b/packages/mdsvex/CHANGELOG.md index 7dc1595b..7519b3d1 100644 --- a/packages/mdsvex/CHANGELOG.md +++ b/packages/mdsvex/CHANGELOG.md @@ -1,5 +1,11 @@ # mdsvex +## 0.12.3 + +### Patch Changes + +- [#637](https://github.com/pngwn/MDsveX/pull/637) [`9e8165f`](https://github.com/pngwn/MDsveX/commit/9e8165f981f52ef0b05cbb93335a7ac664d9e50c) Thanks [@pngwn](https://github.com/pngwn)! - fix layout path resolution + ## 0.12.2 ### Patch Changes diff --git a/packages/mdsvex/package.json b/packages/mdsvex/package.json index 5e07ff27..c73ed36e 100644 --- a/packages/mdsvex/package.json +++ b/packages/mdsvex/package.json @@ -1,19 +1,21 @@ { "name": "mdsvex", - "version": "0.12.2", + "version": "0.12.3", "description": "Markdown preprocessor for Svelte", + "type": "module", "exports": { ".": { "require": "./dist/main.cjs", "default": "./dist/main.mjs" - } + }, + "./package.json": "./package.json" }, "main": "dist/main.cjs", "module": "dist/main.mjs", "repository": "https://github.com/pngwn/MDsveX", "scripts": { "build": "rollup -c", - "test": "uvu -r ts-node/register test test.ts$" + "test": "vitest . **/*.spec.ts" }, "files": [ "dist/*", @@ -29,10 +31,6 @@ "author": "pngwn ", "license": "MIT", "devDependencies": { - "@rollup/plugin-commonjs": "^25.0.7", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-replace": "^2.4.2", - "@rollup/plugin-sucrase": "^5.0.2", "@starptech/prettyhtml-hast-to-html": "^0.10.0", "@types/acorn": "^4.0.5", "@types/escape-html": "^1.0.0", @@ -54,9 +52,6 @@ "remark-slug": "^6.0.0", "retext": "^7.0.1", "retext-smartypants": "^4.0.0", - "rollup-plugin-json": "^4.0.0", - "rollup-plugin-node-builtins": "^2.1.2", - "rollup-plugin-node-globals": "^1.4.0", "rollup-plugin-svelte": "^5.1.1", "shiki": "^0.9.3", "svelte": "^4.0.0", diff --git a/packages/mdsvex/rollup.config.js b/packages/mdsvex/rollup.config.js index 883be1b6..7f48519f 100644 --- a/packages/mdsvex/rollup.config.js +++ b/packages/mdsvex/rollup.config.js @@ -1,18 +1,17 @@ -import resolve from '@rollup/plugin-node-resolve'; +import node from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; -import json from 'rollup-plugin-json'; -import builtins from 'rollup-plugin-node-builtins'; -import globals from 'rollup-plugin-node-globals'; +import json from '@rollup/plugin-json'; import sucrase from '@rollup/plugin-sucrase'; import dts from 'rollup-plugin-dts'; -import replace from '@rollup/plugin-replace'; +import { readFileSync } from 'fs'; +import { resolve } from 'path'; -import pkg from './package.json'; +const pkg = JSON.parse(readFileSync(resolve('package.json'), 'utf-8')); export default [ { plugins: [ - resolve({ preferBuiltins: true }), + node({ preferBuiltins: true }), commonjs({ namedExports: { 'svelte/compiler': ['parse'] } }), json(), sucrase({ transforms: ['typescript'] }), diff --git a/packages/mdsvex/src/index.ts b/packages/mdsvex/src/index.ts index b62a851e..075ded39 100644 --- a/packages/mdsvex/src/index.ts +++ b/packages/mdsvex/src/index.ts @@ -25,6 +25,7 @@ import extract_frontmatter from 'remark-frontmatter'; import remark2rehype from 'remark-rehype'; //@ts-ignore import hast_to_html from '@starptech/prettyhtml-hast-to-html'; +import { createRequire } from 'module'; import { mdsvex_parser } from './parsers'; import { @@ -126,13 +127,15 @@ function to_posix(_path: string): string { return _path.replace(/\\/g, '/'); } +const _require = import.meta.url ? createRequire(import.meta.url) : require; + function resolve_layout(layout_path: string): string { try { - return to_posix(require.resolve(layout_path)); + return to_posix(_require.resolve(layout_path)); } catch (e) { try { const _path = join(process.cwd(), layout_path); - return to_posix(require.resolve(_path)); + return to_posix(_require.resolve(_path)); } catch (e) { throw new Error( `The layout path you provided couldn't be found at either ${layout_path} or ${join( diff --git a/packages/mdsvex/test/it/code_highlighting.spec.ts b/packages/mdsvex/test/it/code_highlighting.spec.ts new file mode 100644 index 00000000..d8717ce4 --- /dev/null +++ b/packages/mdsvex/test/it/code_highlighting.spec.ts @@ -0,0 +1,343 @@ +import { test, expect } from 'vitest'; +import { lines } from '../utils'; +import * as shiki from 'shiki'; + +import { mdsvex } from '../../src'; + +test('it should not highlight code when false is passed', async () => { + const output = await mdsvex({ highlight: false }).markup({ + content: ` +\`\`\`js +const some_var = whatever; +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines(` +
const some_var = whatever;
+		
`) + ); +}); + +test('it should escape code when false is passed', async () => { + const output = await mdsvex({ highlight: false }).markup({ + content: ` +\`\`\`html + +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines(`
<script>
+  function() {
+    whatever;
+  }
+</script>
+
`) + ); +}); + +test('it should highlight code when nothing is passed', async () => { + const output = await mdsvex().markup({ + content: ` +\`\`\`js +const thing = 'string'; +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines( + `
{@html \`const thing = 'string';\`}
` + ) + ); +}); + +test('it should escape when highlighting (kinda)', async () => { + const output = await mdsvex().markup({ + content: ` +\`\`\`js +function() { + whatever; +} +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines(`
{@html \`function() {
+	whatever;
+}\`}
`) + ); +}); + +test('it should escape characters with special meaning inside {@html} used by default highlighter', async () => { + const output = await mdsvex().markup({ + content: `\`\`\`js +const evil = '{ } \` \\t \\r \\n'; +\`\`\``, + filename: 'thing.svx', + }); + expect(lines(output?.code.trim())).toEqual( + lines( + '
{@html `' +
+				'const evil = \'{ } ` \t \r \n\';`}' +
+				'
' + ) + ); +}); + +test('it should highlight code when nothing is passed, with a non-default language', async () => { + const output = await mdsvex().markup({ + content: ` +\`\`\`ruby +print 'Please type name >' +name = gets.chomp +puts "Hello #{name}." +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines(`
{@html \`print 'Please type name >'
+name = gets.chomp
+puts "Hello #{name}."\`}
`) + ); +}); + +test('it should highlight code when nothing is passed, with a more obscure language', async () => { + const output = await mdsvex().markup({ + content: ` +\`\`\`ebnf +SYNTAX = SYNTAX RULE, (: SYNTAX RULE :). +SYNTAX RULE + = META IDENTIFIER, '=', DEFINITIONS LIST, '.'. (* '.' instead of ';' *) +DEFINITIONS LIST + = SINGLE DEFINITION, + (: '/', SINGLE DEFINITION :). +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines(`
{@html \`SYNTAX = SYNTAX RULE, (: SYNTAX RULE :).
+SYNTAX RULE
+  = META IDENTIFIER, '=', DEFINITIONS LIST, '.'. (* '.' instead of ';' *)
+DEFINITIONS LIST
+  = SINGLE DEFINITION,
+    (: '/', SINGLE DEFINITION :).\`}
`) + ); +}); + +test('Should be possible to pass a custom highlight function ', async () => { + function _highlight(code: string, lang: string | undefined | null): string { + return `${code}`; + } + + const output = await mdsvex({ + highlight: { highlighter: _highlight }, + }).markup({ + content: ` +\`\`\`somecode +i am some code +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines(`i am some code`) + ); +}); + +test('Custom highlight functions receive the metastring', async () => { + function _highlight( + code: string, + lang: string | undefined | null, + meta: string | undefined | null + ): string { + return `${code}`; + } + + const output = await mdsvex({ + highlight: { highlighter: _highlight }, + }).markup({ + content: ` +\`\`\`somecode hello-friends what are you +i am some code +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines( + `i am some code` + ) + ); +}); + +test('Should be possible to pass an async custom highlight function ', async () => { + async function _highlight( + code: string, + lang: string | undefined | null + ): Promise { + // const shiki = require('shiki'); + const highlighter = await shiki.getHighlighter({ + theme: 'material-theme-palenight', + }); + return highlighter.codeToHtml(code, lang || undefined); + } + + const output = await mdsvex({ + highlight: { highlighter: _highlight }, + }).markup({ + content: ` +\`\`\`python +import os +key = os.environ["SECRET_KEY"] +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines(`
import os
+key = os.environ["SECRET_KEY"]
`) + ); +}); + +test('Should be possible to define a custom alias for a language', async () => { + const output = await mdsvex({ + highlight: { alias: { beeboo: 'html' } }, + }).markup({ + content: ` +\`\`\`beeboo +

Title

+\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines( + `
{@html \`<h1>Title</h1>\`}
` + ) + ); +}); + +test('Svelte syntax is highlighted by default', async () => { + const output = await mdsvex().markup({ + content: ` +\`\`\`svelte +{#if condition} + +{/if} +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines( + `
{@html \`{#if condition}
+<Hello />
+{/if}\`}
` + ) + ); +}); + +test('Svelte syntax is highlighted by default: using custom alias', async () => { + const output = await mdsvex({ + highlight: { alias: { beeboo: 'svelte' } }, + }).markup({ + content: ` +\`\`\`beeboo +{#if condition} + +{/if} +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines( + `
{@html \`{#if condition}
+<Hello />
+{/if}\`}
` + ) + ); +}); + +test('Svelte syntax is highlighted by default: using sv alias', async () => { + const output = await mdsvex().markup({ + content: ` +\`\`\`sv +{#if condition} + +{/if} +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines( + `
{@html \`{#if condition}
+<Hello />
+{/if}\`}
` + ) + ); +}); + +test('Should be possible to add additional highlighting grammars', async () => { + require('prismjs'); + require('prism-svelte'); + const output = await mdsvex({ + highlight: { alias: { beeboo: 'html' } }, + }).markup({ + content: ` +\`\`\`svelte +

Title

+\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines( + `
{@html \`<h1>Title</h1>\`}
` + ) + ); +}); + +test('lang definitions should be case insensitive', async () => { + const output = await mdsvex().markup({ + content: ` +\`\`\`Docker +RUN bash -lc "rvm install ruby-2.5.1 && \ + rvm use ruby-ruby-2.5.1 --default" +\`\`\` + `, + filename: 'thing.svx', + }); + + expect(lines(output?.code.trim())).toEqual( + lines( + `
{@html \`RUN bash -lc "rvm install ruby-2.5.1 &&               rvm use ruby-ruby-2.5.1 --default"\`}
` + ) + ); +}); diff --git a/packages/mdsvex/test/it/code_highlighting.test.ts b/packages/mdsvex/test/it/code_highlighting.test.ts deleted file mode 100644 index d7f727e9..00000000 --- a/packages/mdsvex/test/it/code_highlighting.test.ts +++ /dev/null @@ -1,391 +0,0 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; -import { lines } from '../utils'; -import * as shiki from 'shiki'; - -import { mdsvex } from '../../src'; - -const highlight = suite('code-highlighting'); - -highlight('it should not highlight code when false is passed', async () => { - const output = await mdsvex({ highlight: false }).markup({ - content: ` -\`\`\`js -const some_var = whatever; -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines(` -
const some_var = whatever;
-
`), - output && lines(output.code) - ); -}); - -highlight('it should escape code when false is passed', async () => { - const output = await mdsvex({ highlight: false }).markup({ - content: ` -\`\`\`html - -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines(`
<script>
-  function() {
-    whatever;
-  }
-</script>
-
`), - output && lines(output.code) - ); -}); - -highlight('it should highlight code when nothing is passed', async () => { - const output = await mdsvex().markup({ - content: ` -\`\`\`js -const thing = 'string'; -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines( - `
{@html \`const thing = 'string';\`}
` - ), - output && lines(output.code) - ); -}); - -highlight('it should escape when highlighting (kinda)', async () => { - const output = await mdsvex().markup({ - content: ` -\`\`\`js -function() { - whatever; -} -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines(`
{@html \`function() {
-	whatever;
-}\`}
`), - output && lines(output.code) - ); -}); - -highlight( - 'it should escape characters with special meaning inside {@html} used by default highlighter', - async () => { - const output = await mdsvex().markup({ - content: `\`\`\`js -const evil = '{ } \` \\t \\r \\n'; -\`\`\``, - filename: 'thing.svx', - }); - assert.equal( - lines( - '
{@html `' +
-					'const evil = \'{ } ` \t \r \n\';`}' +
-					'
' - ), - output && lines(output.code) - ); - } -); - -highlight( - 'it should highlight code when nothing is passed, with a non-default language', - async () => { - const output = await mdsvex().markup({ - content: ` -\`\`\`ruby -print 'Please type name >' -name = gets.chomp -puts "Hello #{name}." -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines(`
{@html \`print 'Please type name >'
-name = gets.chomp
-puts "Hello #{name}."\`}
`), - output && lines(output.code) - ); - } -); - -highlight( - 'it should highlight code when nothing is passed, with a more obscure language', - async () => { - const output = await mdsvex().markup({ - content: ` -\`\`\`ebnf -SYNTAX = SYNTAX RULE, (: SYNTAX RULE :). -SYNTAX RULE - = META IDENTIFIER, '=', DEFINITIONS LIST, '.'. (* '.' instead of ';' *) -DEFINITIONS LIST - = SINGLE DEFINITION, - (: '/', SINGLE DEFINITION :). -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines(`
{@html \`SYNTAX = SYNTAX RULE, (: SYNTAX RULE :).
-SYNTAX RULE
-  = META IDENTIFIER, '=', DEFINITIONS LIST, '.'. (* '.' instead of ';' *)
-DEFINITIONS LIST
-  = SINGLE DEFINITION,
-    (: '/', SINGLE DEFINITION :).\`}
`), - output && lines(output.code) - ); - } -); - -highlight( - 'Should be possible to pass a custom highlight function ', - async () => { - function _highlight(code: string, lang: string | undefined): string { - return `${code}`; - } - - const output = await mdsvex({ - highlight: { highlighter: _highlight }, - }).markup({ - content: ` -\`\`\`somecode -i am some code -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines(`i am some code`), - output && lines(output.code) - ); - } -); - -highlight('Custom highlight functions receive the metastring', async () => { - function _highlight( - code: string, - lang: string | undefined, - meta: string | undefined - ): string { - return `${code}`; - } - - const output = await mdsvex({ - highlight: { highlighter: _highlight }, - }).markup({ - content: ` -\`\`\`somecode hello-friends what are you -i am some code -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines( - `i am some code` - ), - output && lines(output.code) - ); -}); - -highlight( - 'Should be possible to pass an async custom highlight function ', - async () => { - async function _highlight( - code: string, - lang: string | undefined - ): Promise { - // const shiki = require('shiki'); - const highlighter = await shiki.getHighlighter({ - theme: 'material-theme-palenight', - }); - return highlighter.codeToHtml(code, lang); - } - - const output = await mdsvex({ - highlight: { highlighter: _highlight }, - }).markup({ - content: ` -\`\`\`python -import os -key = os.environ["SECRET_KEY"] -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines(`
import os
-key = os.environ["SECRET_KEY"]
`), - output && lines(output.code) - ); - } -); - -highlight( - 'Should be possible to define a custom alias for a language', - async () => { - const output = await mdsvex({ - highlight: { alias: { beeboo: 'html' } }, - }).markup({ - content: ` -\`\`\`beeboo -

Title

-\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines( - `
{@html \`<h1>Title</h1>\`}
` - ), - output && lines(output.code) - ); - } -); - -highlight('Svelte syntax is highlighted by default', async () => { - const output = await mdsvex().markup({ - content: ` -\`\`\`svelte -{#if condition} - -{/if} -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines( - `
{@html \`{#if condition}
-<Hello />
-{/if}\`}
` - ), - output && lines(output.code) - ); -}); - -highlight( - 'Svelte syntax is highlighted by default: using custom alias', - async () => { - const output = await mdsvex({ - highlight: { alias: { beeboo: 'svelte' } }, - }).markup({ - content: ` -\`\`\`beeboo -{#if condition} - -{/if} -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines( - `
{@html \`{#if condition}
-<Hello />
-{/if}\`}
` - ), - output && lines(output.code) - ); - } -); - -highlight( - 'Svelte syntax is highlighted by default: using sv alias', - async () => { - const output = await mdsvex().markup({ - content: ` -\`\`\`sv -{#if condition} - -{/if} -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines( - `
{@html \`{#if condition}
-<Hello />
-{/if}\`}
` - ), - output && lines(output.code) - ); - } -); - -highlight( - 'Should be possible to add additional highlighting grammars', - async () => { - require('prismjs'); - require('prism-svelte'); - const output = await mdsvex({ - highlight: { alias: { beeboo: 'html' } }, - }).markup({ - content: ` -\`\`\`svelte -

Title

-\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines( - `
{@html \`<h1>Title</h1>\`}
` - ), - output && lines(output.code) - ); - } -); - -highlight('lang definitions should be case insensitive', async () => { - const output = await mdsvex().markup({ - content: ` -\`\`\`Docker -RUN bash -lc "rvm install ruby-2.5.1 && \ - rvm use ruby-ruby-2.5.1 --default" -\`\`\` - `, - filename: 'thing.svx', - }); - - assert.equal( - lines( - `
{@html \`RUN bash -lc "rvm install ruby-2.5.1 &&               rvm use ruby-ruby-2.5.1 --default"\`}
` - ), - output && lines(output.code) - ); -}); - -highlight.run(); diff --git a/packages/mdsvex/test/it/mdsvex.test.ts b/packages/mdsvex/test/it/mdsvex.spec.ts similarity index 62% rename from packages/mdsvex/test/it/mdsvex.test.ts rename to packages/mdsvex/test/it/mdsvex.spec.ts index 76d516a3..d2a5ca79 100644 --- a/packages/mdsvex/test/it/mdsvex.test.ts +++ b/packages/mdsvex/test/it/mdsvex.spec.ts @@ -1,5 +1,4 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; +import { test, expect } from 'vitest'; import { Node, Parent } from 'unist'; import { join } from 'path'; @@ -16,19 +15,18 @@ import toml from 'toml'; import VMessage, { VFileMessage } from 'vfile-message'; import { Transformer } from 'unified'; -const mdsvex_it = suite('mdsvex'); const fix_dir = join(__dirname, '..', '_fixtures'); -mdsvex_it('it should work', async () => { +test('it should work', async () => { const output = await mdsvex().markup({ content: `# hello`, filename: 'file.svx', }); - assert.equal(output && output && lines(output.code), lines(`

hello

`)); + expect(lines(output?.code)).toEqual(lines(`

hello

`)); }); -mdsvex_it('it should accept a remark plugin', async () => { +test('it should accept a remark plugin', async () => { const output = await mdsvex({ remarkPlugins: [containers] }).markup({ content: ` ::: div thingy @@ -42,15 +40,14 @@ Hello friends, how are we today filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines( `

Hello friends, how are we today

` - ), - output && lines(output.code) + ) ); }); -mdsvex_it('it should accept remark plugins - plural', async () => { +test('it should accept remark plugins - plural', async () => { const output = await mdsvex({ remarkPlugins: [containers, slug, headings], }).markup({ @@ -67,14 +64,19 @@ Hello friends, how are we today filename: 'file.svx', }); - assert.equal( + // expect(lines(output?.code)).toEqual( + // lines(`

Lorem ipsum đŸ˜Ș

+ //

Hello friends, how are we today

`), + // + // ); + + expect(lines(output?.code)).toEqual( lines(`

Lorem ipsum đŸ˜Ș

-

Hello friends, how are we today

`), - output && lines(output.code) +

Hello friends, how are we today

`) ); }); -mdsvex_it('it should accept remark plugins with options - plural', async () => { +test('it should accept remark plugins with options - plural', async () => { const output = await mdsvex({ remarkPlugins: [containers, slug, [headings, { behavior: 'append' }]], }).markup({ @@ -91,14 +93,13 @@ Hello friends, how are we today filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines(`

Lorem ipsum đŸ˜Ș

-

Hello friends, how are we today

`), - output && lines(output.code) +

Hello friends, how are we today

`) ); }); -mdsvex_it('it should accept a rehype plugin', async () => { +test('it should accept a rehype plugin', async () => { const output = await mdsvex({ rehypePlugins: [toc], }).markup({ @@ -110,7 +111,7 @@ mdsvex_it('it should accept a rehype plugin', async () => { filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines(`

One

Two

-

Three

`), - output && lines(output.code) +

Three

`) ); }); -mdsvex_it('it should accept rehype plugins - plural', async () => { +test('it should accept rehype plugins - plural', async () => { const output = await mdsvex({ rehypePlugins: [rehype_slug, toc], }).markup({ @@ -135,7 +135,7 @@ mdsvex_it('it should accept rehype plugins - plural', async () => { filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines(`

One

Two

-

Three

`), - output && lines(output.code) +

Three

`) ); }); -mdsvex_it('it should accept rehype plugins with options - plural', async () => { +test('it should accept rehype plugins with options - plural', async () => { const output = await mdsvex({ rehypePlugins: [rehype_slug, [toc, { nav: false }]], }).markup({ @@ -160,7 +159,7 @@ mdsvex_it('it should accept rehype plugins with options - plural', async () => { filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines(`
  1. One
    1. Two
        { >
      1. Three

One

Two

-

Three

`), - output && lines(output.code) +

Three

`) ); }); -mdsvex_it( - 'it should accept remark plugins that modify code blocks', - async () => { - function code_plugin(): Transformer { - return function (tree: Node): void { - (tree as Parent).children.forEach((node) => { - if (node.type === 'code') { - node.type = 'html'; - node.value = `

The Code is:

${node.value}

`; - } - }); - }; - } +test('it should accept remark plugins that modify code blocks', async () => { + function code_plugin(): Transformer { + return function (tree: Node): void { + (tree as Parent).children.forEach((node) => { + if (node.type === 'code') { + node.type = 'html'; + node.value = `

The Code is:

${node.value}

`; + } + }); + }; + } - const output = await mdsvex({ - remarkPlugins: [code_plugin], - }).markup({ - content: ` + const output = await mdsvex({ + remarkPlugins: [code_plugin], + }).markup({ + content: ` \`\`\`booboo hello friends \`\`\` `, - filename: 'file.svx', - }); + filename: 'file.svx', + }); - assert.equal( - lines(`

The Code is:

hello friends

`), - output && lines(output.code) - ); - } -); + expect(lines(output?.code)).toEqual( + lines(`

The Code is:

hello friends

`) + ); +}); -mdsvex_it('it should respect the smartypants option', async () => { +test('it should respect the smartypants option', async () => { const output = await mdsvex({ smartypants: true, }).markup({ @@ -213,13 +207,12 @@ mdsvex_it('it should respect the smartypants option', async () => { filename: 'file.svx', }); - assert.equal( - lines(`

“Hello friends!” ‘This is some stuff
’

`), - output && lines(output.code) + expect(lines(output?.code)).toEqual( + lines(`

“Hello friends!” ‘This is some stuff
’

`) ); }); -mdsvex_it('it should accept a smartypants options object', async () => { +test('it should accept a smartypants options object', async () => { const output = await mdsvex({ smartypants: { dashes: 'oldschool', ellipses: false }, }).markup({ @@ -227,28 +220,28 @@ mdsvex_it('it should accept a smartypants options object', async () => { filename: 'file.svx', }); - assert.equal(lines(`

hello—friend...

`), output && lines(output.code)); + expect(lines(output?.code)).toEqual(lines(`

hello—friend...

`)); }); -mdsvex_it('only expected file extension names should work', async () => { +test('only expected file extension names should work', async () => { const output = await mdsvex().markup({ content: `# hello`, filename: 'file.boo', }); - assert.equal(undefined, output); + expect(output?.code).toEqual(undefined); }); -mdsvex_it('the extension name should be customisable', async () => { +test('the extension name should be customisable', async () => { const output = await mdsvex({ extensions: ['.jesus'] }).markup({ content: `# hello`, filename: 'file.jesus', }); - assert.equal(lines(`

hello

`), output && lines(output.code)); + expect(lines(output?.code)).toEqual(lines(`

hello

`)); }); -mdsvex_it('custom layouts should work - special tags', async () => { +test('custom layouts should work - special tags', async () => { const output = await mdsvex({ layout: join(fix_dir, 'Layout.svelte'), }).markup({ @@ -263,7 +256,7 @@ mdsvex_it('custom layouts should work - special tags', async () => { filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines(` @@ -322,11 +311,11 @@ mdsvex_it( } `, - filename: 'file.svx', - }); + filename: 'file.svx', + }); - assert.equal( - lines(` @@ -339,19 +328,15 @@ mdsvex_it(

hello

-`), - output && lines(output.code) - ); - } -); +`) + ); +}); -mdsvex_it( - 'custom layouts should work - when there are script tags with random attributes', - async () => { - const output = await mdsvex({ - layout: join(fix_dir, 'Layout.svelte'), - }).markup({ - content: ` +test('custom layouts should work - when there are script tags with random attributes', async () => { + const output = await mdsvex({ + layout: join(fix_dir, 'Layout.svelte'), + }).markup({ + content: ` @@ -364,11 +349,11 @@ mdsvex_it( } `, - filename: 'file.svx', - }); + filename: 'file.svx', + }); - assert.equal( - lines(` @@ -381,19 +366,15 @@ mdsvex_it(

hello

-`), - output && lines(output.code) - ); - } -); +`) + ); +}); -mdsvex_it( - 'custom layouts should work - when everything is in a random order', - async () => { - const output = await mdsvex({ - layout: join(fix_dir, 'Layout.svelte'), - }).markup({ - content: ` +test('custom layouts should work - when everything is in a random order', async () => { + const output = await mdsvex({ + layout: join(fix_dir, 'Layout.svelte'), + }).markup({ + content: ` # hello @@ -430,17 +411,13 @@ boo boo boo

hello

hello friends

boo boo boo

-`), - output && lines(output.code) - ); - } -); +`) + ); +}); -mdsvex_it( - 'YAML front-matter should be injected into the component module script', - async () => { - const output = await mdsvex().markup({ - content: `--- +test('YAML front-matter should be injected into the component module script', async () => { + const output = await mdsvex().markup({ + content: `--- string: value string2: 'value2' array: [1, 2, 3] @@ -449,27 +426,23 @@ number: 999 # hello `, - filename: 'file.svx', - }); + filename: 'file.svx', + }); - assert.equal( - lines(`

hello

-`), - output && lines(output.code) - ); - } -); +`) + ); +}); -mdsvex_it( - 'YAML front-matter should be injected into the component module script - even if there is already a module script', - async () => { - const output = await mdsvex().markup({ - content: `--- +test('YAML front-matter should be injected into the component module script - even if there is already a module script', async () => { + const output = await mdsvex().markup({ + content: `--- string: value string2: 'value2' array: [1, 2, 3] @@ -482,11 +455,11 @@ number: 999 # hello `, - filename: 'file.svx', - }); + filename: 'file.svx', + }); - assert.equal( - lines(` @@ -960,12 +893,11 @@ mdsvex_it('layout: allow custom components', async () => { hello -`), - output && lines(output.code) +`) ); }); -mdsvex_it('layout: allow custom components', async () => { +test('layout: allow custom components', async () => { const output = await mdsvex({ layout: join( __dirname, @@ -993,7 +925,7 @@ hello *hello* **hello** filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines(` @@ -1011,12 +943,11 @@ hello *hello* **hello** hello hello hello hello hello -`), - output && lines(output.code) +`) ); }); -mdsvex_it('layout: allow custom components', async () => { +test('layout: allow custom components', async () => { const output = await mdsvex({ layout: join( __dirname, @@ -1038,7 +969,7 @@ I am some paragraph text filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines(` @@ -1053,12 +984,11 @@ I am some paragraph text hello I am some paragraph text -`), - output && lines(output.code) +`) ); }); -mdsvex_it('layout: allow custom components', async () => { +test('layout: allow custom components', async () => { const output = await mdsvex({ layout: join( __dirname, @@ -1080,7 +1010,7 @@ I am some paragraph text filename: 'file.svx', }); - assert.equal( + expect(lines(output?.code)).toEqual( lines(` @@ -1095,24 +1025,20 @@ I am some paragraph text hello I am some paragraph text -`), - output && lines(output.code) +`) ); }); -mdsvex_it('compile, no options', async () => { +test('compile, no options', async () => { const output = await compile('# Hello world'); - assert.equal( - { - code: '\n

Hello world

\n', - data: {}, - map: '', - }, - output - ); + expect(output).toEqual({ + code: '\n

Hello world

\n', + data: {}, + map: '', + }); }); -mdsvex_it('compile, gets headmatter attributes', async () => { +test('compile, gets headmatter attributes', async () => { const output = await compile( ` --- @@ -1123,22 +1049,19 @@ title: Yo ` ); - assert.equal( - { - code: - '\n\n

Hello world

\n', - data: { - fm: { - title: 'Yo', - }, + expect(output).toEqual({ + code: + '\n\n

Hello world

\n', + data: { + fm: { + title: 'Yo', }, - map: '', }, - output - ); + map: '', + }); }); -mdsvex_it('layout: allow custom components', async () => { +test('layout: allow custom components', async () => { const output = await compile( ` @@ -1174,12 +1097,11 @@ I am some paragraph text hello I am some paragraph text -`), - output && lines(output.code) +`) ); }); -mdsvex_it('layout: allow custom components', async () => { +test('layout: allow custom components', async () => { const output = await compile( ` @@ -1216,9 +1138,6 @@ I am some paragraph text hello I am some paragraph text -`), - output && lines(output.code) +`) ); }); - -mdsvex_it.run(); diff --git a/packages/mdsvex/test/it/pure-markdown.test.ts b/packages/mdsvex/test/it/pure-markdown.spec.ts similarity index 54% rename from packages/mdsvex/test/it/pure-markdown.test.ts rename to packages/mdsvex/test/it/pure-markdown.spec.ts index c8ee5ef5..fbc1dfd5 100644 --- a/packages/mdsvex/test/it/pure-markdown.test.ts +++ b/packages/mdsvex/test/it/pure-markdown.spec.ts @@ -1,5 +1,4 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; +import { test, expect } from 'vitest'; import { readdirSync, readFileSync } from 'fs'; import { join, basename } from 'path'; @@ -10,8 +9,6 @@ const PATH = join(__dirname, '../_fixtures/markdown'); const INPUT_PATH = join(PATH, 'input'); const OUTPUT_PATH = join(PATH, 'output'); -const markdown = suite('pure-markdown'); - const md_files = readdirSync(INPUT_PATH).map((p) => [ p, readFileSync(join(INPUT_PATH, p), { encoding: 'utf8' }), @@ -21,21 +18,16 @@ const md_files = readdirSync(INPUT_PATH).map((p) => [ ]); md_files.forEach(([path, input, output], i) => { - markdown( - `it should correctly parse pure markdown files: ${path}`, - async () => { - // temp - if (path === 'literal-html-tags.md') return; + test(`it should correctly parse pure markdown files: ${path}`, async () => { + // temp + if (path === 'literal-html-tags.md') return; - let result; - try { - result = await transform().process(input); - } catch (e) { - console.log(i, e); - } - assert.equal(lines(output), result && lines(result.contents as string)); + let result; + try { + result = await transform().process(input); + } catch (e) { + console.log(i, e); } - ); + expect(lines(output)).toEqual(result && lines(result.contents as string)); + }); }); - -markdown.run(); diff --git a/packages/mdsvex/test/it/pure-svelte.test.ts b/packages/mdsvex/test/it/pure-svelte.spec.ts similarity index 68% rename from packages/mdsvex/test/it/pure-svelte.test.ts rename to packages/mdsvex/test/it/pure-svelte.spec.ts index 1cf3b555..84106eb4 100644 --- a/packages/mdsvex/test/it/pure-svelte.test.ts +++ b/packages/mdsvex/test/it/pure-svelte.spec.ts @@ -1,5 +1,4 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; +import { test, expect } from 'vitest'; import { readdirSync, readFileSync, existsSync, lstatSync } from 'fs'; import { join, extname } from 'path'; @@ -30,8 +29,6 @@ const flatten = (arr: any) => [] ); -const svelte = suite('pure-svelte'); - let svelte_files; try { svelte_files = (flatten(get_dir_path(PATH)) as string[]) @@ -42,23 +39,19 @@ try { } svelte_files.forEach(([path, file], i) => { - svelte( - `it should correctly parse any svelte component: ${path.replace( - join(__dirname, '../_fixtures/svelte/'), - '' - )}`, - async () => { - let output; - - try { - output = await transform().process(file); - } catch (e) { - console.log(i, e); - } - - assert.equal(lines(file), output && lines(output.contents as string)); + test(`it should correctly parse any svelte component: ${path.replace( + join(__dirname, '../_fixtures/svelte/'), + '' + )}`, async () => { + let output; + + try { + output = await transform().process(file); + } catch (e) { + console.log(i, e); } - ); -}); -svelte.run(); + expect(lines(file)).toEqual(output && lines(output.contents as string)); + // assert.equal(lines(file), output && lines(output.contents as string)); + }); +}); diff --git a/packages/mdsvex/test/it/svelte-markdown.test.ts b/packages/mdsvex/test/it/svelte-markdown.spec.ts similarity index 57% rename from packages/mdsvex/test/it/svelte-markdown.test.ts rename to packages/mdsvex/test/it/svelte-markdown.spec.ts index ebe2c1bf..e7c13987 100644 --- a/packages/mdsvex/test/it/svelte-markdown.test.ts +++ b/packages/mdsvex/test/it/svelte-markdown.spec.ts @@ -1,5 +1,4 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; +import { test, expect } from 'vitest'; import { readdirSync, readFileSync } from 'fs'; import { join, basename } from 'path'; @@ -11,8 +10,6 @@ const PATH = join(__dirname, '../_fixtures/hybrid'); const INPUT_PATH = join(PATH, 'input'); const OUTPUT_PATH = join(PATH, 'output'); -const hybrid = suite('svelte-markdown'); - const md_files = readdirSync(INPUT_PATH).map((p) => [ p, readFileSync(join(INPUT_PATH, p), { encoding: 'utf8' }), @@ -22,19 +19,14 @@ const md_files = readdirSync(INPUT_PATH).map((p) => [ ]); md_files.forEach(([path, input, output], i) => { - hybrid( - `it should correctly parse hybrid svelte-markdown files: ${path}`, - async () => { - let result; - try { - result = await mdsvex().markup({ content: input, filename: path }); - } catch (e) { - console.log(i, e); - } - - assert.equal(lines(output), result && lines(result.code)); + test(`it should correctly parse hybrid svelte-markdown files: ${path}`, async () => { + let result; + try { + result = await mdsvex().markup({ content: input, filename: path }); + } catch (e) { + console.log(i, e); } - ); -}); -hybrid.run(); + expect(lines(output)).toEqual(result && lines(result.code)); + }); +}); diff --git a/packages/mdsvex/test/parsers/svelte_blocks.spec.ts b/packages/mdsvex/test/parsers/svelte_blocks.spec.ts new file mode 100644 index 00000000..c91db79c --- /dev/null +++ b/packages/mdsvex/test/parsers/svelte_blocks.spec.ts @@ -0,0 +1,94 @@ +import { test, expect } from 'vitest'; + +import { parse_svelte_block } from '../../src/parsers'; + +// I have no idea what the unified/ remark eat function returns but i need to fake it. +// @ts-ignore +const eat = (value) => (node) => ({ + value, + node, +}); + +const svelte_blocks = [ + [ + 'each', + 'basic', + '#each array as el', + '#each [{a: {hello: []}, {a: {b: {c: {}}}}} as {a, b: { c, d }}', + ], + ['else', 'basic', ':else', false], + ['if', 'basic', '#if condition', '#if new Array([123] === {a, b, c})'], + [ + 'else if', + 'basic', + '#else if condition', + '#else if new Array([123] === {a, b, c})', + ], + ['await', 'basic', '#await promise', '#await new Promise((r, r) => r())'], + ['then', 'basic', ':then resolved_promise', '#then {a, b: { c, d }}'], + ['catch', 'basic', ':catch error', ':catch {a, b: { c, d }}'], + ['html', 'basic', '@html html'], + ['debug', 'basic', '@debug breakpoint'], +]; + +svelte_blocks.forEach( + // @ts-ignore + ([name, desc, block, advanced]: [ + string, + string, + string, + boolean | string + ]) => { + test(`${name}: it should it should correctly match and parse any svelte block`, () => { + // @ts-ignore + expect(parse_svelte_block(eat, `{${block}}`, false)).toEqual({ + value: `{${block}}`, + node: { + value: `{${block}}`, + name, + type: 'svelteBlock', + }, + }); + + // @ts-ignore + expect(parse_svelte_block(eat, `{${block}}`, false)).toEqual({ + value: `{${block}}`, + node: { + value: `{${block}}`, + name, + type: 'svelteBlock', + }, + }); + + expect( + parse_svelte_block( + //@ts-ignore + eat, + `{${block}}hello jesus /n/n iam a paragraph with words \n\n #hello everyone`, + false + ) + ).toEqual({ + value: `{${block}}`, + node: { + value: `{${block}}`, + name, + type: 'svelteBlock', + }, + }); + + if (advanced) { + expect( + //@ts-ignore + parse_svelte_block(eat, `{${advanced}}`, false) + ).toEqual({ + value: `{${advanced}}`, + node: { + value: `{${advanced}}`, + name, + type: 'svelteBlock', + }, + }); + } + }); + } +); diff --git a/packages/mdsvex/test/parsers/svelte_blocks.test.ts b/packages/mdsvex/test/parsers/svelte_blocks.test.ts deleted file mode 100644 index d559a40e..00000000 --- a/packages/mdsvex/test/parsers/svelte_blocks.test.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; - -import { parse_svelte_block } from '../../src/parsers'; - -const blocks = suite('svelte-blocks'); - -// I have no idea what the unified/ remark eat function returns but i need to fake it. -const eat = (value) => (node) => ({ - value, - node, -}); - -const svelte_blocks = [ - [ - 'each', - 'basic', - '#each array as el', - '#each [{a: {hello: []}, {a: {b: {c: {}}}}} as {a, b: { c, d }}', - ], - ['else', 'basic', ':else', false], - ['if', 'basic', '#if condition', '#if new Array([123] === {a, b, c})'], - [ - 'else if', - 'basic', - '#else if condition', - '#else if new Array([123] === {a, b, c})', - ], - ['await', 'basic', '#await promise', '#await new Promise((r, r) => r())'], - ['then', 'basic', ':then resolved_promise', '#then {a, b: { c, d }}'], - ['catch', 'basic', ':catch error', ':catch {a, b: { c, d }}'], - ['html', 'basic', '@html html'], - ['debug', 'basic', '@debug breakpoint'], -]; - -svelte_blocks.forEach( - ([name, desc, block, advanced]: [ - string, - string, - string, - boolean | string - ]) => { - blocks( - `${name}: it should it should correctly match and parse any svelte block`, - () => { - assert.equal( - //@ts-ignore - parse_svelte_block(eat, `{${block}}`, false), - { - value: `{${block}}`, - node: { - value: `{${block}}`, - name, - type: 'svelteBlock', - }, - }, - desc - ); - - assert.equal( - //@ts-ignore - parse_svelte_block(eat, ` {${block}}`, false), - { - value: ` {${block}}`, - node: { - value: ` {${block}}`, - name, - type: 'svelteBlock', - }, - }, - 'with whitespace' - ); - - assert.equal( - parse_svelte_block( - //@ts-ignore - eat, - `{${block}}hello jesus /n/n iam a paragraph with words \n\n #hello everyone`, - false - ), - { - value: `{${block}}`, - node: { - value: `{${block}}`, - name, - type: 'svelteBlock', - }, - }, - 'with random stuff after it' - ); - - if (advanced) { - assert.equal( - //@ts-ignore - parse_svelte_block(eat, `{${advanced}}`, false), - { - value: `{${advanced}}`, - node: { - value: `{${advanced}}`, - name, - type: 'svelteBlock', - }, - }, - 'a more advanced case' - ); - } - } - ); - } -); - -blocks.run(); diff --git a/packages/mdsvex/test/parsers/svelte_tags.spec.ts b/packages/mdsvex/test/parsers/svelte_tags.spec.ts new file mode 100644 index 00000000..3bf64aea --- /dev/null +++ b/packages/mdsvex/test/parsers/svelte_tags.spec.ts @@ -0,0 +1,101 @@ +import { test, expect } from 'vitest'; + +import { parse_svelte_tag } from '../../src/parsers'; + +// I have no idea what the unified/ remark eat function returns but i need to fake it. +//@ts-ignore +const eat = (value) => (node) => ({ + value, + node, +}); + +const svelte_tags = [ + ['component', 'svelte:component'], + ['self', 'svelte:self'], + ['window', 'svelte:window'], + ['body', 'svelte:body'], + ['options', 'svelte:options'], + ['head', 'svelte:head'], +]; + +test('svelte blocks with children should be correctly parsed', () => { + const s = ` + + + + + +# hello`; + //@ts-ignore + expect(parse_svelte_tag(eat, s, false)).toEqual({ + value: ` + + + +`, + node: { + value: ` + + + +`, + name: 'head', + type: 'svelteTag', + }, + }); +}); + +svelte_tags.forEach(([name, component]) => { + test(`${name}: it should it should correctly match and parse any svelte tag`, () => { + expect( + //@ts-ignore + parse_svelte_tag(eat, `<${component}>`, false) + ).toEqual({ + value: `<${component}>`, + node: { + value: `<${component}>`, + name, + type: 'svelteTag', + }, + }); + + expect( + //@ts-ignore + parse_svelte_tag(eat, `<${component} />`, false) + ).toEqual({ + value: `<${component} />`, + node: { + value: `<${component} />`, + name, + type: 'svelteTag', + }, + }); + + expect( + //@ts-ignore + parse_svelte_tag(eat, ` <${component} />`, false) + ).toEqual({ + value: ` <${component} />`, + node: { + value: `<${component} />`, + name, + type: 'svelteTag', + }, + }); + + const output = parse_svelte_tag( + //@ts-ignore + eat, + `<${component} foo=bar quu="quux" hello on:click foo={bar} />`, + false + ); + expect(output).toEqual({ + value: `<${component} foo=bar quu="quux" hello on:click foo={bar} />`, + node: { + value: `<${component} foo=bar quu="quux" hello on:click foo={bar} />`, + name, + type: 'svelteTag', + }, + }); + }); +}); diff --git a/packages/mdsvex/test/parsers/svelte_tags.test.ts b/packages/mdsvex/test/parsers/svelte_tags.test.ts deleted file mode 100644 index 48227955..00000000 --- a/packages/mdsvex/test/parsers/svelte_tags.test.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; - -import { parse_svelte_tag } from '../../src/parsers'; - -const tags = suite('svelte-tags'); - -// I have no idea what the unified/ remark eat function returns but i need to fake it. -const eat = (value) => (node) => ({ - value, - node, -}); - -const svelte_tags = [ - ['component', 'svelte:component'], - ['self', 'svelte:self'], - ['window', 'svelte:window'], - ['body', 'svelte:body'], - ['options', 'svelte:options'], - ['head', 'svelte:head'], -]; - -tags('svelte blocks with children should be correctly parsed', () => { - const s = ` - - - - - -# hello`; - //@ts-ignore - assert.equal(parse_svelte_tag(eat, s, false), { - value: ` - - - -`, - node: { - value: ` - - - -`, - name: 'head', - type: 'svelteTag', - }, - }); -}); - -svelte_tags.forEach(([name, component]) => { - tags( - `${name}: it should it should correctly match and parse any svelte tag`, - () => { - assert.equal( - //@ts-ignore - parse_svelte_tag(eat, `<${component}>`, false), - { - value: `<${component}>`, - node: { - value: `<${component}>`, - name, - type: 'svelteTag', - }, - }, - 'opening tags' - ); - - assert.equal( - //@ts-ignore - parse_svelte_tag(eat, `<${component} />`, false), - { - value: `<${component} />`, - node: { - value: `<${component} />`, - name, - type: 'svelteTag', - }, - }, - 'void tags' - ); - - assert.equal( - //@ts-ignore - parse_svelte_tag(eat, ` <${component} />`, false), - { - value: ` <${component} />`, - node: { - value: `<${component} />`, - name, - type: 'svelteTag', - }, - }, - `ignoring whitespace` - ); - - const output = parse_svelte_tag( - //@ts-ignore - eat, - `<${component} foo=bar quu="quux" hello on:click foo={bar} />`, - false - ); - assert.equal( - output, - { - value: `<${component} foo=bar quu="quux" hello on:click foo={bar} />`, - node: { - value: `<${component} foo=bar quu="quux" hello on:click foo={bar} />`, - name, - type: 'svelteTag', - }, - }, - 'with attributes' - ); - } - ); -}); - -tags.run(); diff --git a/packages/mdsvex/test/utils.ts b/packages/mdsvex/test/utils.ts index 15bfb6b3..1a3197f2 100644 --- a/packages/mdsvex/test/utils.ts +++ b/packages/mdsvex/test/utils.ts @@ -1,4 +1,5 @@ -export function lines(str: string): string[] { +export function lines(str?: string): string[] { + if (!str) return []; return str .split('\n') .filter((s) => !!s.trim()) diff --git a/packages/svast-stringify/CHANGELOG.md b/packages/svast-stringify/CHANGELOG.md index ad2d0e93..d3429364 100644 --- a/packages/svast-stringify/CHANGELOG.md +++ b/packages/svast-stringify/CHANGELOG.md @@ -1,5 +1,14 @@ # svast-stringify +## 0.1.1 + +### Patch Changes + +- [#637](https://github.com/pngwn/MDsveX/pull/637) [`9e8165f`](https://github.com/pngwn/MDsveX/commit/9e8165f981f52ef0b05cbb93335a7ac664d9e50c) Thanks [@pngwn](https://github.com/pngwn)! - fix layout path resolution + +- Updated dependencies [[`9e8165f`](https://github.com/pngwn/MDsveX/commit/9e8165f981f52ef0b05cbb93335a7ac664d9e50c)]: + - svast@0.2.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/svast-stringify/package.json b/packages/svast-stringify/package.json index 68fdb97f..35f2926f 100644 --- a/packages/svast-stringify/package.json +++ b/packages/svast-stringify/package.json @@ -1,13 +1,13 @@ { "name": "svast-stringify", - "version": "0.1.0", + "version": "0.1.1", "description": "Turn svast nodes back into svelte code", "main": "dist/main.cjs.js", "module": "dist/main.es.js", + "type": "module", "scripts": { "build": "rollup -c", - "test:filter": "uvu -r ts-node/register test", - "test": "uvu -r ts-node/register test test.ts$" + "test": "vitest . **/*.spec.ts" }, "repository": { "type": "git", @@ -22,6 +22,6 @@ "author": "pngwn ", "license": "MIT", "dependencies": { - "svast": "workspace:^0.2.0" + "svast": "workspace:^0.2.1" } } diff --git a/packages/svast-stringify/rollup.config.js b/packages/svast-stringify/rollup.config.js index 53986048..05e521d5 100644 --- a/packages/svast-stringify/rollup.config.js +++ b/packages/svast-stringify/rollup.config.js @@ -1,8 +1,9 @@ import ts from '@rollup/plugin-typescript'; import dts from 'rollup-plugin-dts'; +import { readFileSync } from 'fs'; +import { resolve } from 'path'; -import pkg from './package.json'; - +const pkg = JSON.parse(readFileSync(resolve('package.json'), 'utf-8')); export default [ { plugins: [ts()], diff --git a/packages/svast-stringify/test/compile.test.ts b/packages/svast-stringify/test/compile.spec.ts similarity index 63% rename from packages/svast-stringify/test/compile.test.ts rename to packages/svast-stringify/test/compile.spec.ts index 410f08d1..ae3d9a10 100644 --- a/packages/svast-stringify/test/compile.test.ts +++ b/packages/svast-stringify/test/compile.spec.ts @@ -1,23 +1,20 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; +import { test, expect } from 'vitest'; import { table_without_positions } from './fixtures/table_without_positions'; import { table_output } from './fixtures/table_output'; import { Node, Root } from 'svast'; import { compile } from '../src/main'; -const svast_stringify = suite('compile-tree'); - -svast_stringify('throws without a root node root', () => { +test('throws without a root node root', () => { const node = { type: 'hi', }; //@ts-ignore - assert.throws(() => compile(node)); + expect(() => compile(node)).toThrow(); }); -svast_stringify('compiles a text node', () => { +test('compiles a text node', () => { const tree = { type: 'root', children: [ @@ -28,10 +25,10 @@ svast_stringify('compiles a text node', () => { ], }; - assert.is(compile(tree), 'hi'); + expect(compile(tree)).toEqual('hi'); }); -svast_stringify('compiles a expression node', () => { +test('compiles a expression node', () => { const tree = { type: 'root', children: [ @@ -45,10 +42,10 @@ svast_stringify('compiles a expression node', () => { ], }; - assert.is(compile(tree), '{console.log("boo")}'); + expect(compile(tree)).toEqual('{console.log("boo")}'); }); -svast_stringify('compiles a void block', () => { +test('compiles a void block', () => { const tree = { type: 'root', children: [ @@ -63,10 +60,10 @@ svast_stringify('compiles a void block', () => { ], }; - assert.is(compile(tree), '{@html `hello i am an expression`}'); + expect(compile(tree)).toEqual('{@html `hello i am an expression`}'); }); -svast_stringify('compiles a self-closing html element', () => { +test('compiles a self-closing html element', () => { const tree = { type: 'root', children: [ @@ -80,301 +77,277 @@ svast_stringify('compiles a self-closing html element', () => { ], }; - assert.is(compile(tree), ''); + expect(compile(tree)).toEqual(''); }); -svast_stringify( - 'compiles a self-closing html element with short hand boolean attributes', - () => { - const tree = { - type: 'root', - children: [ - { - type: 'svelteElement', - tagName: 'input', - selfClosing: true, - children: [], - properties: [ - { - type: 'svelteProperty', - name: 'hello', - value: [], - shorthand: 'boolean', - modifiers: [], - }, - { - type: 'svelteProperty', - name: 'goodbye', - value: [], - shorthand: 'boolean', - modifiers: [], - }, - ], - }, - ], - }; +test('compiles a self-closing html element with short hand boolean attributes', () => { + const tree = { + type: 'root', + children: [ + { + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + { + type: 'svelteProperty', + name: 'goodbye', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }, + ], + }; - assert.is( - compile(tree), - `` - ); - } -); - -svast_stringify( - 'compiles a self-closing html element with props and a value', - () => { - const tree = { - type: 'root', - children: [ - { - type: 'svelteElement', - tagName: 'input', - selfClosing: true, - children: [], - properties: [ - { - type: 'svelteProperty', - name: 'hello', - value: [ - { - type: 'text', - value: 'value', - }, - ], - shorthand: 'none', - modifiers: [], - }, - ], - }, - ], - }; + ); +}); - assert.is( - compile(tree), - ` { + const tree = { + type: 'root', + children: [ + { + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }, + ], + }; + + expect(compile(tree)).toEqual( + `` - ); - } -); - -svast_stringify( - 'compiles a self-closing html element with props and values', - () => { - const tree = { - type: 'root', - children: [ - { - type: 'svelteElement', - tagName: 'input', - selfClosing: true, - children: [], - properties: [ - { - type: 'svelteProperty', - name: 'hello', - value: [ - { - type: 'text', - value: 'value', - }, - { type: 'text', value: ' ' }, - { - type: 'text', - value: 'value', - }, - ], - shorthand: 'none', - modifiers: [], - }, - ], - }, - ], - }; + ); +}); - assert.is( - compile(tree), - ` { + const tree = { + type: 'root', + children: [ + { + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { type: 'text', value: ' ' }, + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }, + ], + }; + + expect(compile(tree)).toEqual( + `` - ); - } -); - -svast_stringify( - 'compiles a self-closing html element with props and expression values', - () => { - const tree = { - type: 'root', - children: [ - { - type: 'svelteElement', - tagName: 'input', - selfClosing: true, - children: [], - properties: [ - { - type: 'svelteProperty', - name: 'hello', - value: [ - { - type: 'text', - value: 'value', - }, - { - type: 'text', - value: ' ', - }, - { - type: 'text', + ); +}); + +test('compiles a self-closing html element with props and expression values', () => { + const tree = { + type: 'root', + children: [ + { + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { + type: 'text', + value: ' ', + }, + { + type: 'text', + value: 'value', + }, + { + type: 'svelteDynamicContent', + expression: { + type: 'svelteExpression', value: 'value', }, - { - type: 'svelteDynamicContent', - expression: { - type: 'svelteExpression', - value: 'value', - }, - }, - ], - shorthand: 'none', - modifiers: [], - }, - ], - }, - ], - }; + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }, + ], + }; - assert.is( - compile(tree), - `` - ); - } -); - -svast_stringify( - 'compiles a self-closing html element with props and expression values, with empty attr text nodes', - () => { - const tree = { - type: 'root', - children: [ - { - type: 'svelteElement', - tagName: 'input', - selfClosing: true, - children: [], - properties: [ - { - type: 'svelteProperty', - name: 'hello', - value: [ - { - type: 'text', - value: 'value', - }, - { - type: 'text', - value: ' ', - }, - { - type: 'text', + ); +}); + +test('compiles a self-closing html element with props and expression values, with empty attr text nodes', () => { + const tree = { + type: 'root', + children: [ + { + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { + type: 'text', + value: ' ', + }, + { + type: 'text', + value: 'value', + }, + { + type: 'text', + value: ' ', + }, + { + type: 'svelteDynamicContent', + expression: { + type: 'svelteExpression', value: 'value', }, - { - type: 'text', - value: ' ', - }, - { - type: 'svelteDynamicContent', - expression: { - type: 'svelteExpression', - value: 'value', - }, - }, - ], - shorthand: 'none', - modifiers: [], - }, - ], - }, - ], - }; + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }, + ], + }; - assert.is( - compile(tree), - `` - ); - } -); - -svast_stringify( - 'compiles a self-closing html element with props and expression values, with empty attr text nodes', - () => { - const tree = { - type: 'root', - children: [ - { - type: 'svelteElement', - tagName: 'input', - selfClosing: true, - children: [], - properties: [ - { - type: 'svelteProperty', - name: 'hello', - value: [ - { - type: 'text', + ); +}); + +test('compiles a self-closing html element with props and expression values, with empty attr text nodes', () => { + const tree = { + type: 'root', + children: [ + { + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { + type: 'svelteDynamicContent', + expression: { + type: 'svelteExpression', value: 'value', }, - { - type: 'svelteDynamicContent', - expression: { - type: 'svelteExpression', - value: 'value', - }, - }, - { - type: 'svelteDynamicContent', - expression: { - type: 'svelteExpression', - value: 'value', - }, + }, + { + type: 'svelteDynamicContent', + expression: { + type: 'svelteExpression', + value: 'value', }, - { - type: 'svelteDynamicContent', - expression: { - type: 'svelteExpression', - value: 'value', - }, + }, + { + type: 'svelteDynamicContent', + expression: { + type: 'svelteExpression', + value: 'value', }, - ], - shorthand: 'none', - modifiers: [], - }, - ], - }, - ], - }; + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }, + ], + }; - assert.is( - compile(tree), - `` - ); - } -); + ); +}); -svast_stringify('handle a realword set of attrs', () => { +test('handle a realword set of attrs', () => { const tree = { type: 'root', children: [ @@ -416,15 +389,14 @@ svast_stringify('handle a realword set of attrs', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `
` ); }); -svast_stringify('handle a realword set of attrs: more whitespace', () => { +test('handle a realword set of attrs: more whitespace', () => { const tree = { type: 'root', children: [ @@ -466,15 +438,14 @@ svast_stringify('handle a realword set of attrs: more whitespace', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `
` ); }); -svast_stringify('compiles directives', () => { +test('compiles directives', () => { const tree = { type: 'root', children: [ @@ -497,15 +468,14 @@ svast_stringify('compiles directives', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `` ); }); -svast_stringify('compiles directive with a value', () => { +test('compiles directive with a value', () => { const tree = { type: 'root', children: [ @@ -528,15 +498,14 @@ svast_stringify('compiles directive with a value', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `` ); }); -svast_stringify('compiles directive with a value', () => { +test('compiles directive with a value', () => { const tree = { type: 'root', children: [ @@ -563,15 +532,14 @@ svast_stringify('compiles directive with a value', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `` ); }); -svast_stringify('compiles directive with a value', () => { +test('compiles directive with a value', () => { const tree = { type: 'root', children: [ @@ -614,15 +582,14 @@ svast_stringify('compiles directive with a value', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `` ); }); -svast_stringify('compiles directive with a value', () => { +test('compiles directive with a value', () => { const tree = { type: 'root', children: [ @@ -648,15 +615,14 @@ svast_stringify('compiles directive with a value', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `` ); }); -svast_stringify('compiles svelte meta tags', () => { +test('compiles svelte meta tags', () => { const tree = { type: 'root', children: [ @@ -686,15 +652,14 @@ svast_stringify('compiles svelte meta tags', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `` ); }); -svast_stringify('compiles sibling nodes', () => { +test('compiles sibling nodes', () => { const tree = { type: 'root', children: [ @@ -748,8 +713,7 @@ svast_stringify('compiles sibling nodes', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( ` @@ -760,7 +724,7 @@ tag="{null}" ); }); -svast_stringify('compiles child nodes: svelteMeta', () => { +test('compiles child nodes: svelteMeta', () => { const tree = { type: 'root', children: [ @@ -823,8 +787,7 @@ svast_stringify('compiles child nodes: svelteMeta', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( ` { +test('compiles child nodes: svelteElement', () => { const tree = { type: 'root', children: [ @@ -899,8 +862,7 @@ svast_stringify('compiles child nodes: svelteElement', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `
{ +test('compiles branching blocks', () => { const tree = { type: 'root', children: [ @@ -985,8 +947,7 @@ svast_stringify('compiles branching blocks', () => { ], }; - assert.is( - compile(tree), + expect(compile(tree)).toEqual( `{#if x > 10}

x is greater than 10

{:else if x < 5} @@ -995,8 +956,7 @@ svast_stringify('compiles branching blocks', () => { ); }); -svast_stringify('compiles a big thingy', () => { +test('compiles a big thingy', () => { const component = compile(table_without_positions as Root); - assert.is(component, table_output); + expect(component).toEqual(table_output); }); -svast_stringify.run(); diff --git a/packages/svast-utils/CHANGELOG.md b/packages/svast-utils/CHANGELOG.md index 80a1f310..485da9c5 100644 --- a/packages/svast-utils/CHANGELOG.md +++ b/packages/svast-utils/CHANGELOG.md @@ -1,5 +1,14 @@ # svast-utils +## 0.0.6 + +### Patch Changes + +- [#637](https://github.com/pngwn/MDsveX/pull/637) [`9e8165f`](https://github.com/pngwn/MDsveX/commit/9e8165f981f52ef0b05cbb93335a7ac664d9e50c) Thanks [@pngwn](https://github.com/pngwn)! - fix layout path resolution + +- Updated dependencies [[`9e8165f`](https://github.com/pngwn/MDsveX/commit/9e8165f981f52ef0b05cbb93335a7ac664d9e50c)]: + - svast@0.2.1 + ## 0.0.5 ### Patch Changes diff --git a/packages/svast-utils/package.json b/packages/svast-utils/package.json index 9ff24342..2c2a60be 100644 --- a/packages/svast-utils/package.json +++ b/packages/svast-utils/package.json @@ -1,13 +1,13 @@ { "name": "svast-utils", - "version": "0.0.5", + "version": "0.0.6", "description": "Utilisties for working with svast nodes.", "main": "dist/main.cjs.js", "module": "dist/main.es.js", + "type": "module", "scripts": { "build": "rollup -c", - "test:filter": "uvu -r ts-node/register test", - "test": "uvu -r ts-node/register test test.ts$" + "test": "vitest . **/*.spec.ts" }, "repository": { "type": "git", @@ -22,6 +22,6 @@ "author": "pngwn ", "license": "MIT", "dependencies": { - "svast": "workspace:^0.2.0" + "svast": "workspace:^0.2.1" } } diff --git a/packages/svast-utils/rollup.config.js b/packages/svast-utils/rollup.config.js index 53986048..68e6c597 100644 --- a/packages/svast-utils/rollup.config.js +++ b/packages/svast-utils/rollup.config.js @@ -1,7 +1,9 @@ import ts from '@rollup/plugin-typescript'; import dts from 'rollup-plugin-dts'; +import { readFileSync } from 'fs'; +import { resolve } from 'path'; -import pkg from './package.json'; +const pkg = JSON.parse(readFileSync(resolve('package.json'), 'utf-8')); export default [ { diff --git a/packages/svast-utils/test/clean_positions.spec.ts b/packages/svast-utils/test/clean_positions.spec.ts new file mode 100644 index 00000000..3de13079 --- /dev/null +++ b/packages/svast-utils/test/clean_positions.spec.ts @@ -0,0 +1,254 @@ +import { test, expect } from 'vitest'; + +import { Node } from 'svast'; +import { clean_positions } from '../src/clean_positions'; +import { table_with_positions } from './fixtures/table_with_positions'; +import { table_without_positions } from './fixtures/table_without_positions'; + +test('removes the position property from a simple node', () => { + const node = { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }; + + expect(clean_positions(node)).toEqual({ type: 'hi' }); +}); + +test('removes the position property from a node and all children nodes', () => { + const node = { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + children: [ + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + ], + }; + + expect(clean_positions(node)).toEqual({ + type: 'hi', + children: [ + { + type: 'hi', + }, + { + type: 'hi', + }, + ], + }); +}); + +test('removes the position property from a node and all property nodes', () => { + const node = { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + properties: [ + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + ], + }; + + expect(clean_positions(node)).toEqual({ + type: 'hi', + properties: [ + { + type: 'hi', + }, + { + type: 'hi', + }, + ], + }); +}); + +test('removes the position property from a node and all value nodes', () => { + const node = { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + value: [ + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + ], + }; + + expect(clean_positions(node)).toEqual({ + type: 'hi', + value: [ + { + type: 'hi', + }, + { + type: 'hi', + }, + ], + }); +}); + +test('does not fail if value is not an array of node', () => { + const node = { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + value: 'hi', + }; + + expect(clean_positions(node)).toEqual({ + type: 'hi', + value: 'hi', + }); +}); + +test('removes the position property from a node and all modifier nodes', () => { + const node = { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + modifiers: [ + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + ], + }; + + expect(clean_positions(node)).toEqual({ + type: 'hi', + modifiers: [ + { + type: 'hi', + }, + { + type: 'hi', + }, + ], + }); +}); + +test('removes the position property from a node and all branch nodes', () => { + const node = { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + branches: [ + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + ], + }; + + expect(clean_positions(node)).toEqual({ + type: 'hi', + branches: [ + { + type: 'hi', + }, + { + type: 'hi', + }, + ], + }); +}); + +test('removes the position property from a node and all branch nodes', () => { + const node = { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + expression: { + type: 'hi', + position: { + start: { line: 1, column: 1, offset: 1 }, + end: { line: 1, column: 1, offset: 1 }, + }, + }, + }; + + expect(clean_positions(node)).toEqual({ + type: 'hi', + expression: { + type: 'hi', + }, + }); +}); + +test('removes the position properties from a complex node', () => { + expect(clean_positions(table_with_positions)).toEqual( + table_without_positions + ); +}); diff --git a/packages/svast-utils/test/clean_positions.test.ts b/packages/svast-utils/test/clean_positions.test.ts deleted file mode 100644 index 89d76eea..00000000 --- a/packages/svast-utils/test/clean_positions.test.ts +++ /dev/null @@ -1,266 +0,0 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; - -import { Node } from 'svast'; -import { clean_positions } from '../src/clean_positions'; -import { table_with_positions } from './fixtures/table_with_positions'; -import { table_without_positions } from './fixtures/table_without_positions'; - -const clean = suite('clean-positions'); - -clean('removes the position property from a simple node', () => { - const node = { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }; - - assert.equal(clean_positions(node), { type: 'hi' }); -}); - -clean( - 'removes the position property from a node and all children nodes', - () => { - const node = { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - children: [ - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - ], - }; - - assert.equal(clean_positions(node), { - type: 'hi', - children: [ - { - type: 'hi', - }, - { - type: 'hi', - }, - ], - }); - } -); - -clean( - 'removes the position property from a node and all property nodes', - () => { - const node = { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - properties: [ - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - ], - }; - - assert.equal(clean_positions(node), { - type: 'hi', - properties: [ - { - type: 'hi', - }, - { - type: 'hi', - }, - ], - }); - } -); - -clean('removes the position property from a node and all value nodes', () => { - const node = { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - value: [ - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - ], - }; - - assert.equal(clean_positions(node), { - type: 'hi', - value: [ - { - type: 'hi', - }, - { - type: 'hi', - }, - ], - }); -}); - -clean('does not fail if value is not an array of node', () => { - const node = { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - value: 'hi', - }; - - assert.equal(clean_positions(node), { - type: 'hi', - value: 'hi', - }); -}); - -clean( - 'removes the position property from a node and all modifier nodes', - () => { - const node = { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - modifiers: [ - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - ], - }; - - assert.equal(clean_positions(node), { - type: 'hi', - modifiers: [ - { - type: 'hi', - }, - { - type: 'hi', - }, - ], - }); - } -); - -clean('removes the position property from a node and all branch nodes', () => { - const node = { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - branches: [ - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - ], - }; - - assert.equal(clean_positions(node), { - type: 'hi', - branches: [ - { - type: 'hi', - }, - { - type: 'hi', - }, - ], - }); -}); - -clean('removes the position property from a node and all branch nodes', () => { - const node = { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - expression: { - type: 'hi', - position: { - start: { line: 1, column: 1, offset: 1 }, - end: { line: 1, column: 1, offset: 1 }, - }, - }, - }; - - assert.equal(clean_positions(node), { - type: 'hi', - expression: { - type: 'hi', - }, - }); -}); - -clean('removes the position properties from a complex node', () => { - assert.equal(clean_positions(table_with_positions), table_without_positions); -}); - -clean.run(); diff --git a/packages/svast-utils/test/walk.test.ts b/packages/svast-utils/test/walk.spec.ts similarity index 56% rename from packages/svast-utils/test/walk.test.ts rename to packages/svast-utils/test/walk.spec.ts index e7d54266..7f0924db 100644 --- a/packages/svast-utils/test/walk.test.ts +++ b/packages/svast-utils/test/walk.spec.ts @@ -1,11 +1,9 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; +import { test, expect } from 'vitest'; import { Node } from 'svast'; import { walk } from '../src/walk'; -const svast_walk = suite('walk-tree'); -svast_walk('walks a single node', () => { +test('walks a single node', () => { const node = { type: 'hi', }; @@ -17,11 +15,11 @@ svast_walk('walks a single node', () => { _n = node; }); - assert.is(_t, 'hi'); - assert.is(_n, node); + expect(_t).toBe('hi'); + expect(_n).toBe(node); }); -svast_walk('Root node should have an undefined parent', () => { +test('Root node should have an undefined parent', () => { const node = { type: 'hi', }; @@ -31,10 +29,10 @@ svast_walk('Root node should have an undefined parent', () => { _p = parent; }); - assert.is(_p, undefined); + expect(_p).toBe(undefined); }); -svast_walk('walks child nodes', () => { +test('walks child nodes', () => { const tree = { type: 'hi', children: [ @@ -61,10 +59,10 @@ svast_walk('walks child nodes', () => { _t.push(node.type); }); - assert.equal(_t, ['hi', '1', '2', '3', '4', '5']); + expect(_t).toEqual(['hi', '1', '2', '3', '4', '5']); }); -svast_walk('parent is correctly passed', () => { +test('parent is correctly passed', () => { const tree = { type: 'hi', children: [ @@ -91,10 +89,10 @@ svast_walk('parent is correctly passed', () => { if (node.type === '1') _p = parent; }); - assert.is(_p, tree); + expect(_p).toBe(tree); }); -svast_walk('parent is correctly passed and modifier nodes are visited', () => { +test('parent is correctly passed and modifier nodes are visited', () => { const tree = { type: 'hi', modifiers: [ @@ -123,11 +121,11 @@ svast_walk('parent is correctly passed and modifier nodes are visited', () => { _t.push(node.type); }); - assert.is(_p, tree); - assert.equal(_t, ['hi', '1', '2', '3', '4', '5']); + expect(_p).toBe(tree); + expect(_t).toEqual(['hi', '1', '2', '3', '4', '5']); }); -svast_walk('parent is correctly passed and value nodes are visited', () => { +test('parent is correctly passed and value nodes are visited', () => { const tree = { type: 'hi', value: [ @@ -156,11 +154,11 @@ svast_walk('parent is correctly passed and value nodes are visited', () => { _t.push(node.type); }); - assert.is(_p, tree); - assert.equal(_t, ['hi', '1', '2', '3', '4', '5']); + expect(_p).toBe(tree); + expect(_t).toEqual(['hi', '1', '2', '3', '4', '5']); }); -svast_walk('parent is correctly passed and property nodes are visited', () => { +test('parent is correctly passed and property nodes are visited', () => { const tree = { type: 'hi', properties: [ @@ -189,11 +187,11 @@ svast_walk('parent is correctly passed and property nodes are visited', () => { _t.push(node.type); }); - assert.is(_p, tree); - assert.equal(_t, ['hi', '1', '2', '3', '4', '5']); + expect(_p).toBe(tree); + expect(_t).toEqual(['hi', '1', '2', '3', '4', '5']); }); -svast_walk('parent is correctly passed and branch nodes are visited', () => { +test('parent is correctly passed and branch nodes are visited', () => { const tree = { type: 'hi', branches: [ @@ -222,55 +220,49 @@ svast_walk('parent is correctly passed and branch nodes are visited', () => { _t.push(node.type); }); - assert.is(_p, tree); - assert.equal(_t, ['hi', '1', '2', '3', '4', '5']); + expect(_p).toBe(tree); + expect(_t).toEqual(['hi', '1', '2', '3', '4', '5']); }); -svast_walk( - 'parent is correctly passed and expression nodes are visited', - () => { - const tree = { - type: 'hi', - expression: { - type: '1', - }, - }; - - let _p; - const _t: string[] = []; - walk(tree, (node, parent) => { - if (node.type === '1') _p = parent; - _t.push(node.type); - }); - - assert.is(_p, tree); - assert.equal(_t, ['hi', '1']); - } -); - -svast_walk( - 'parent is correctly passed and non-array value nodes are visited', - () => { - const tree = { - type: 'hi', - value: { - type: '1', - }, - }; +test('parent is correctly passed and expression nodes are visited', () => { + const tree = { + type: 'hi', + expression: { + type: '1', + }, + }; - let _p; - const _t: string[] = []; - walk(tree, (node, parent) => { - if (node.type === '1') _p = parent; - _t.push(node.type); - }); + let _p; + const _t: string[] = []; + walk(tree, (node, parent) => { + if (node.type === '1') _p = parent; + _t.push(node.type); + }); - assert.is(_p, tree); - assert.equal(_t, ['hi', '1']); - } -); + expect(_p).toBe(tree); + expect(_t).toEqual(['hi', '1']); +}); -svast_walk('a more complex node', () => { +test('parent is correctly passed and non-array value nodes are visited', () => { + const tree = { + type: 'hi', + value: { + type: '1', + }, + }; + + let _p; + const _t: string[] = []; + walk(tree, (node, parent) => { + if (node.type === '1') _p = parent; + _t.push(node.type); + }); + + expect(_p).toBe(tree); + expect(_t).toEqual(['hi', '1']); +}); + +test('a more complex node', () => { const leaf = { type: 'leaf' }; const has_child = { type: 'haschild1', children: [leaf] }; const has_child2 = { type: 'haschild2', children: [has_child] }; @@ -287,15 +279,11 @@ svast_walk('a more complex node', () => { _t.push(node.type); }); - assert.is(_p[0], undefined); - assert.is(_p[1], tree); - assert.is(_p[2], has_child3); - assert.is(_p[3], has_child2); - assert.is(_p[4], has_child); - assert.equal(_t, ['hi', 'haschild3', 'haschild2', 'haschild1', 'leaf']); + expect(_p).toEqual([undefined, tree, has_child3, has_child2, has_child]); + expect(_t).toEqual(['hi', 'haschild3', 'haschild2', 'haschild1', 'leaf']); }); -svast_walk('returning false prevents child nodes from being walked', () => { +test('returning false prevents child nodes from being walked', () => { const leaf = { type: 'leaf' }; const leaf2 = { type: 'leaf' }; const has_child = { type: 'haschild1', children: [leaf] }; @@ -313,12 +301,7 @@ svast_walk('returning false prevents child nodes from being walked', () => { if (parent === tree) return false; }); - assert.is(_p[0], undefined); - assert.is(_p[1], tree); - assert.is(_p[2], tree); - assert.is(_p.length, 3); - assert.is(_p[3], undefined); - assert.equal(_t, ['hi', 'haschild1', 'haschild2']); -}); + expect(_p).toEqual([undefined, tree, tree]); -svast_walk.run(); + expect(_t).toEqual(['hi', 'haschild1', 'haschild2']); +}); diff --git a/packages/svast/CHANGELOG.md b/packages/svast/CHANGELOG.md index d111ae36..92f46382 100644 --- a/packages/svast/CHANGELOG.md +++ b/packages/svast/CHANGELOG.md @@ -1,5 +1,11 @@ # svast +## 0.2.1 + +### Patch Changes + +- [#637](https://github.com/pngwn/MDsveX/pull/637) [`9e8165f`](https://github.com/pngwn/MDsveX/commit/9e8165f981f52ef0b05cbb93335a7ac664d9e50c) Thanks [@pngwn](https://github.com/pngwn)! - fix layout path resolution + ## 0.2.0 ### Minor Changes diff --git a/packages/svast/package.json b/packages/svast/package.json index 37e53dc9..ca1ff9e4 100644 --- a/packages/svast/package.json +++ b/packages/svast/package.json @@ -1,8 +1,9 @@ { "name": "svast", - "version": "0.2.0", + "version": "0.2.1", "description": "Types for svast, a Svelte AST specification", "main": "index.js", + "type": "module", "repository": { "type": "git", "url": "https://github.com/pngwn/MDsveX/tree/master/packages/svast" diff --git a/packages/svelte-parse/CHANGELOG.md b/packages/svelte-parse/CHANGELOG.md index 873096e9..6a935b80 100644 --- a/packages/svelte-parse/CHANGELOG.md +++ b/packages/svelte-parse/CHANGELOG.md @@ -1,5 +1,14 @@ # svelte-parse +## 0.1.1 + +### Patch Changes + +- [#637](https://github.com/pngwn/MDsveX/pull/637) [`9e8165f`](https://github.com/pngwn/MDsveX/commit/9e8165f981f52ef0b05cbb93335a7ac664d9e50c) Thanks [@pngwn](https://github.com/pngwn)! - fix layout path resolution + +- Updated dependencies [[`9e8165f`](https://github.com/pngwn/MDsveX/commit/9e8165f981f52ef0b05cbb93335a7ac664d9e50c)]: + - svast@0.2.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/svelte-parse/package.json b/packages/svelte-parse/package.json index 20b013ef..290fa32a 100644 --- a/packages/svelte-parse/package.json +++ b/packages/svelte-parse/package.json @@ -1,13 +1,13 @@ { "name": "svelte-parse", - "version": "0.1.0", + "version": "0.1.1", "description": "An increidbly relaxed svelte-parser", "main": "dist/main.cjs.js", "module": "dist/main.es.js", + "type": "module", "scripts": { "build": "rollup -c", - "test:filter": "uvu -r ts-node/register test", - "test": "uvu -r ts-node/register test test.ts$", + "test": "vitest . **/*.spec.ts", "test:watch": "watchlist src test -- pnpm test", "test:generate": "node -r ts-node/register ./test/fixtures/generate.ts" }, @@ -24,6 +24,6 @@ "author": "pngwn ", "license": "MIT", "dependencies": { - "svast": "workspace:^0.2.0" + "svast": "workspace:^0.2.1" } } diff --git a/packages/svelte-parse/test/blocks.test.ts b/packages/svelte-parse/test/blocks.spec.ts similarity index 81% rename from packages/svelte-parse/test/blocks.test.ts rename to packages/svelte-parse/test/blocks.spec.ts index db963e8b..a66d5a14 100644 --- a/packages/svelte-parse/test/blocks.test.ts +++ b/packages/svelte-parse/test/blocks.spec.ts @@ -1,18 +1,15 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; +import { test, expect } from 'vitest'; import { VoidBlock, Root, Node, Point } from 'svast'; import { parseNode, parse } from '../src/main'; -const block = suite('parse-block'); - const childParser: () => [Node[], Point & { index?: number }, number] = () => [ [{ type: 'fake' }], { line: 1, column: 1, offset: 0, index: 0 }, 0, ]; -block('parses a simple void block', () => { +test('parses a simple void block', () => { //@ts-ignore const { parsed } = parseNode({ generatePositions: false, @@ -20,7 +17,7 @@ block('parses a simple void block', () => { value: `{@html boo}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'svelteVoidBlock', name: 'html', expression: { @@ -30,7 +27,7 @@ block('parses a simple void block', () => { }); }); -block('parses a more complex expression within a void block', () => { +test('parses a more complex expression within a void block', () => { //@ts-ignore const { parsed } = parseNode({ generatePositions: false, @@ -38,7 +35,7 @@ block('parses a more complex expression within a void block', () => { value: `{@html (e) => val = val.filter(v => v.map(x => x*2)).reduce(absolutelywhat is this i have no idea) * 2735262 + 123.something("hey")}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'svelteVoidBlock', name: 'html', expression: { @@ -49,7 +46,7 @@ block('parses a more complex expression within a void block', () => { }); }); -block('parses a void Element without an expression', () => { +test('parses a void Element without an expression', () => { //@ts-ignore const { parsed } = parseNode({ generatePositions: false, @@ -57,7 +54,7 @@ block('parses a void Element without an expression', () => { value: `{@htmlfoo}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'svelteVoidBlock', name: 'htmlfoo', expression: { @@ -67,14 +64,14 @@ block('parses a void Element without an expression', () => { }); }); -block('parses a simple if block', () => { +test('parses a simple if block', () => { //@ts-ignore const parsed = parse({ generatePositions: false, value: `{#if condition}hello{/if}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'root', children: [ { @@ -96,14 +93,14 @@ block('parses a simple if block', () => { }); }); -block('parses an if block with an else', () => { +test('parses an if block with an else', () => { //@ts-ignore const parsed = parse({ generatePositions: false, value: `{#if condition}hello{:else}hello2{/if}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'root', children: [ { @@ -134,14 +131,14 @@ block('parses an if block with an else', () => { }); }); -block('parses an if block with an if else and else', () => { +test('parses an if block with an if else and else', () => { //@ts-ignore const parsed = parse({ generatePositions: false, value: `{#if condition}hello{:else if condition2}hello2{:else}hello3{/if}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'root', children: [ { @@ -181,14 +178,14 @@ block('parses an if block with an if else and else', () => { }); }); -block('parses an if block with many if else branches', () => { +test('parses an if block with many if else branches', () => { //@ts-ignore const parsed = parse({ generatePositions: false, value: `{#if condition}hello{:else if condition2}hello2{:else if condition2}hello2{:else if condition2}hello2{:else if condition2}hello2{/if}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'root', children: [ { @@ -246,14 +243,14 @@ block('parses an if block with many if else branches', () => { }); }); -block('parses an await block with all branches', () => { +test('parses an await block with all branches', () => { //@ts-ignore const parsed = parse({ generatePositions: false, value: `{#await somePromise}loading{:then value}{value}{:catch e}{e.value}{/await}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'root', children: [ { @@ -303,14 +300,14 @@ block('parses an await block with all branches', () => { }); }); -block('parses an await block with a shorthand `await then` and a catch', () => { +test('parses an await block with a shorthand `await then` and a catch', () => { //@ts-ignore const parsed = parse({ generatePositions: false, value: `{#await somePromise then value}{value}{:catch e}{e.value}{/await}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'root', children: [ { @@ -351,51 +348,48 @@ block('parses an await block with a shorthand `await then` and a catch', () => { }); }); -block( - 'parses an await block with a shorthand `await then` and no catch', - () => { - //@ts-ignore - const parsed = parse({ - generatePositions: false, - value: `{#await somePromise then value}{value}{/await}`, - }); +test('parses an await block with a shorthand `await then` and no catch', () => { + //@ts-ignore + const parsed = parse({ + generatePositions: false, + value: `{#await somePromise then value}{value}{/await}`, + }); - assert.equal(parsed, { - type: 'root', - children: [ - { - type: 'svelteBranchingBlock', - name: 'await', - branches: [ - { - type: 'svelteBranch', - name: 'await', - expression: { - type: 'svelteExpression', - value: 'somePromise then value', - }, - children: [ - { - type: 'svelteDynamicContent', - expression: { type: 'svelteExpression', value: 'value' }, - }, - ], + expect(parsed).toEqual({ + type: 'root', + children: [ + { + type: 'svelteBranchingBlock', + name: 'await', + branches: [ + { + type: 'svelteBranch', + name: 'await', + expression: { + type: 'svelteExpression', + value: 'somePromise then value', }, - ], - }, - ], - }); - } -); + children: [ + { + type: 'svelteDynamicContent', + expression: { type: 'svelteExpression', value: 'value' }, + }, + ], + }, + ], + }, + ], + }); +}); -block('parses an each block correctly', () => { +test('parses an each block correctly', () => { //@ts-ignore const parsed = parse({ generatePositions: false, value: `{#each array.filter(1, 2, 3, 4) as {hello: {world}}, index (key(23))}{value}{/each}`, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'root', children: [ { @@ -423,14 +417,14 @@ block('parses an each block correctly', () => { }); }); -block('parses an if block with a trailing space character', () => { +test('parses an if block with a trailing space character', () => { const parsed = parse({ value: `{ #if Data.length <= 0 && !isLoading } { /if }`, generatePositions: false, }); - assert.equal(parsed, { + expect(parsed).toEqual({ type: 'root', children: [ { @@ -456,5 +450,3 @@ block('parses an if block with a trailing space character', () => { ], }); }); - -block.run(); diff --git a/packages/svelte-parse/test/element.spec.ts b/packages/svelte-parse/test/element.spec.ts new file mode 100644 index 00000000..6532c9c2 --- /dev/null +++ b/packages/svelte-parse/test/element.spec.ts @@ -0,0 +1,1763 @@ +import { test, expect } from 'vitest'; + +import { + SvelteElement, + SvelteComponent, + Text, + SvelteMeta, + Comment, + Node, + Point, +} from 'svast'; + +import { parseNode, parse } from '../src/main'; +import { void_els } from '../src/void_els'; + +const childParser: () => [Node[], Point & { index?: number }, number] = () => [ + [{ type: 'fake' }], + { line: 1, column: 1, offset: 0, index: 0 }, + 0, +]; + +test('parses a self closing tag without attributes', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [], + }); +}); + +test('parses self closing elements with no whistespace after tagName', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `
`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'div', + selfClosing: true, + children: [], + properties: [], + }); +}); + +test('parses a self closing tag without attributes: space before name', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `< input />`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [], + }); +}); + +test('parses a self closing tag without attributes: space after name', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `< input />`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [], + }); +}); + +test('parses a self closing tag without attributes: space after closeing slash', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `< input / >`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [], + }); +}); + +test('parses a self closing component without attributes', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteComponent', + tagName: 'HelloFriend', + selfClosing: true, + children: [], + properties: [], + }); +}); + +Object.keys(void_els).forEach((el) => { + test(`parses all void tags without attributes: < ${el} >`, () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `<${el} >`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: el, + selfClosing: true, + children: [], + properties: [], + }); + }); +}); + +test('parses attribute values containing colons', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'a', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'href', + value: [ + { + type: 'text', + value: 'https://www.google.com', + }, + ], + modifiers: [], + shorthand: 'none', + }, + ], + }); +}); + +test('parses a self closing tag with shorthand boolean attribute', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a self closing tag with shorthand boolean attribute: weird spacing', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a self closing tag with shorthand boolean attribute: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with shorthand boolean attribute: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with multiple shorthand boolean attributes: trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + { + type: 'svelteProperty', + name: 'goodbye', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with multiple shorthand boolean attributes: weird spacing', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `< input hello goodbye / >`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + { + type: 'svelteProperty', + name: 'goodbye', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with multiple shorthand boolean attributes: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + { + type: 'svelteProperty', + name: 'goodbye', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with multiple shorthand boolean attributes: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + { + type: 'svelteProperty', + name: 'goodbye', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with multiple shorthand boolean attributes: trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + { + type: 'svelteProperty', + name: 'goodbye', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with an unquoted attribute: trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with an unquoted attribute: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with an unquoted attribute: trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with an unquoted attribute: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with a double-quoted attribute: trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with a double-quoted attribute: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with a double-quoted attribute: trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with a double-quoted attribute: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with double-quoted attributes: many values, trailing whitespace', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { + type: 'text', + value: ' ', + }, + { + type: 'text', + value: 'valuetwo', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with double-quoted attributes: many values, no trailing whitespace', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { type: 'text', value: ' ' }, + { + type: 'text', + value: 'valuetwo', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with double-quoted attributes: many values, trailing whitespace', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { type: 'text', value: ' ' }, + { + type: 'text', + value: 'valuetwo', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with double-quoted attributes: many values, no trailing whitespace', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { type: 'text', value: ' ' }, + { + type: 'text', + value: 'valuetwo', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with a single-quoted attribute: trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with a single-quoted attribute: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with a single-quoted attribute: trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with a single-quoted attribute: no trailing space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with single-quoted attributes: many values, trailing whitespace', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { type: 'text', value: ' ' }, + { + type: 'text', + value: 'valuetwo', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with single-quoted attributes: many values, no trailing whitespace', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { type: 'text', value: ' ' }, + { + type: 'text', + value: 'valuetwo', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with single-quoted attributes: many values, trailing whitespace', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { type: 'text', value: ' ' }, + { + type: 'text', + value: 'valuetwo', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with single-quoted attributes: many values, no trailing whitespace', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [ + { + type: 'text', + value: 'value', + }, + { type: 'text', value: ' ' }, + { + type: 'text', + value: 'valuetwo', + }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a void tag with a directive', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with a directive', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a self-closing tag with two directives', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [], + shorthand: 'none', + modifiers: [], + }, + { + type: 'svelteDirective', + name: 'goodbye', + specifier: 'friends', + value: [], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a tag with a directive an a directive value: double-quoted', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [{ type: 'text', value: 'cheese' }], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a tag with a directive an a directive value: double-quoted, two values', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [ + { type: 'text', value: 'cheese' }, + { type: 'text', value: ' ' }, + { type: 'text', value: 'strings' }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a tag with a directive an a directive value: single-quoted, two values', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [ + { type: 'text', value: 'cheese' }, + { type: 'text', value: ' ' }, + { type: 'text', value: 'strings' }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a tag with a directive an a directive value: single-quoted, two values, many spaces', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [ + { type: 'text', value: 'cheese' }, + { type: 'text', value: ' ' }, + { type: 'text', value: 'strings' }, + ], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a tag with a directive an a directive value: unquoted', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [{ type: 'text', value: 'cheese' }], + shorthand: 'none', + modifiers: [], + }, + ], + }); +}); + +test('parses a tag with a directive with modifiers', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [], + shorthand: 'none', + modifiers: [{ type: 'modifier', value: 'modifierval' }], + }, + ], + }); +}); + +test('parses a tag with a directive with modifier but no value', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'a', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'on', + specifier: 'click', + value: [], + shorthand: 'none', + modifiers: [{ type: 'modifier', value: 'preventDefault' }], + }, + { + type: 'svelteProperty', + name: 'booleanAttribute', + value: [], + shorthand: 'boolean', + modifiers: [], + }, + ], + }); +}); + +test('parses a tag with a directive with multiple modifiers', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [], + shorthand: 'none', + modifiers: [ + { type: 'modifier', value: 'modifierval' }, + { type: 'modifier', value: 'modifierval2' }, + ], + }, + ], + }); +}); + +test('parses a tag with a directive with modifiers', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'none', + modifiers: [{ type: 'modifier', value: 'modifierval' }], + }, + ], + }); +}); + +test('parses a tag with a directive with multiple modifiers', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteProperty', + name: 'hello', + value: [], + shorthand: 'none', + modifiers: [ + { type: 'modifier', value: 'modifierval' }, + { type: 'modifier', value: 'modifierval2' }, + ], + }, + ], + }); +}); + +test('parses a tag with an attribute with multiple modifiers and a value', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: ``, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [{ type: 'text', value: 'someval' }], + shorthand: 'none', + modifiers: [ + { type: 'modifier', value: 'modifierval' }, + { type: 'modifier', value: 'modifierval2' }, + ], + }, + ], + }); +}); + +test('parses a tag with an attribute with multiple modifiers and a value: weird spacing', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `< input hello:world|modifierval|modifierval2 = someval / >`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [{ type: 'text', value: 'someval' }], + shorthand: 'none', + modifiers: [ + { type: 'modifier', value: 'modifierval' }, + { type: 'modifier', value: 'modifierval2' }, + ], + }, + ], + }); +}); + +test('parses a tag with an attribute with multiple modifiers and a value: weird spacing, double-quotes', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `< input hello:world|modifierval|modifierval2 = "someval" / >`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [{ type: 'text', value: 'someval' }], + shorthand: 'none', + modifiers: [ + { type: 'modifier', value: 'modifierval' }, + { type: 'modifier', value: 'modifierval2' }, + ], + }, + ], + }); +}); + +test('parses a tag with an attribute with multiple modifiers and a value: weird spacing and newlines', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `< + input + + hello:world|modifierval|modifierval2 + = + "someval" + / + >`, + }); + + expect(parsed).toEqual({ + type: 'svelteElement', + tagName: 'input', + selfClosing: true, + children: [], + properties: [ + { + type: 'svelteDirective', + name: 'hello', + specifier: 'world', + value: [{ type: 'text', value: 'someval' }], + shorthand: 'none', + modifiers: [ + { type: 'modifier', value: 'modifierval' }, + { type: 'modifier', value: 'modifierval2' }, + ], + }, + ], + }); +}); + +test('parses text', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `hail`, + }); + + expect(parsed).toEqual({ + type: 'text', + value: 'hail', + }); +}); + +test('parses quoted attribute expressions with space', () => { + //@ts-ignore + const { parsed } = parseNode({ + generatePositions: false, + childParser, + value: `
', }); - assert.equal(contents, { + expect(contents).toEqual({ type: 'root', children: [ { @@ -346,14 +334,14 @@ siblings('parse should parse deeply nested void elements', () => { }); }); -siblings('parse should parse deeply nested void elements', () => { +test('parse should parse deeply nested void elements', () => { const contents = parse({ generatePositions: false, value: '< div>
hail
Hail
hail
', }); - assert.equal(contents, { + expect(contents).toEqual({ type: 'root', children: [ { @@ -412,13 +400,13 @@ siblings('parse should parse deeply nested void elements', () => { }); }); -siblings('parses script tags ignoring the contents', () => { +test('parses script tags ignoring the contents', () => { const contents = parse({ generatePositions: false, value: ``, }); - assert.equal(contents, { + expect(contents).toEqual({ type: 'root', children: [ { @@ -432,7 +420,7 @@ siblings('parses script tags ignoring the contents', () => { }); }); -siblings('parses script tags with attributes ignoring the contents', () => { +test('parses script tags with attributes ignoring the contents', () => { const contents = parse({ generatePositions: false, value: ``, }); - assert.equal(contents, { + expect(contents).toEqual({ type: 'root', children: [ { @@ -468,7 +456,7 @@ Hello friends`, }); }); -siblings('parses style tags ignoring the contents', () => { +test('parses style tags ignoring the contents', () => { const contents = parse({ generatePositions: false, value: ``, }); - assert.equal(contents, { + expect(contents).toEqual({ type: 'root', children: [ { @@ -504,7 +492,7 @@ Hello friends`, }); }); -siblings('parses style tags ignoring the contents', () => { +test('parses style tags ignoring the contents', () => { const contents = parse({ generatePositions: false, value: ` @@ -512,7 +500,7 @@ siblings('parses style tags ignoring the contents', () => { `, }); - assert.equal(contents, { + expect(contents).toEqual({ type: 'root', children: [ { @@ -556,5 +544,3 @@ siblings('parses style tags ignoring the contents', () => { ], }); }); - -siblings.run(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c406f465..b944cb90 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,30 @@ importers: .: dependencies: + '@rollup/plugin-commonjs': + specifier: ^26.0.1 + version: 26.0.1(rollup@4.20.0) + '@rollup/plugin-json': + specifier: ^6.1.0 + version: 6.1.0(rollup@4.20.0) + '@rollup/plugin-node-resolve': + specifier: ^15.2.3 + version: 15.2.3(rollup@4.20.0) + '@rollup/plugin-replace': + specifier: ^5.0.7 + version: 5.0.7(rollup@4.20.0) + '@rollup/plugin-sucrase': + specifier: ^5.0.2 + version: 5.0.2(rollup@4.20.0) + rollup-plugin-node-globals: + specifier: ^1.4.0 + version: 1.4.0 tslib: specifier: ^2.3.1 version: 2.3.1 + vitest: + specifier: ^2.0.5 + version: 2.0.5(@types/node@14.14.44)(terser@5.9.0) devDependencies: '@changesets/changelog-github': specifier: ^0.4.0 @@ -19,32 +40,23 @@ importers: specifier: ^2.16.0 version: 2.16.0 '@rollup/plugin-typescript': - specifier: ^8.2.1 - version: 8.2.1(rollup@2.79.1)(tslib@2.3.1)(typescript@4.2.4) + specifier: ^11.1.6 + version: 11.1.6(rollup@4.20.0)(tslib@2.3.1)(typescript@4.2.4) '@types/node': specifier: ^14.14.44 version: 14.14.44 - esm: - specifier: ^3.2.25 - version: 3.2.25 prettier: specifier: ^2.2.1 version: 2.2.1 rollup: - specifier: ^2.77.4-1 - version: 2.79.1 + specifier: ^4.20.0 + version: 4.20.0 rollup-plugin-dts: - specifier: ^3.0.1 - version: 3.0.1(rollup@2.79.1)(typescript@4.2.4) - ts-node: - specifier: ^9.1.1 - version: 9.1.1(typescript@4.2.4) + specifier: ^6.1.1 + version: 6.1.1(rollup@4.20.0)(typescript@4.2.4) typescript: specifier: ^4.2.4 version: 4.2.4 - uvu: - specifier: ^0.5.1 - version: 0.5.1 watchlist: specifier: ^0.2.3 version: 0.2.3 @@ -64,18 +76,6 @@ importers: specifier: ^2.0.4 version: 2.0.4 devDependencies: - '@rollup/plugin-commonjs': - specifier: ^25.0.7 - version: 25.0.7(rollup@2.79.1) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@2.79.1) - '@rollup/plugin-replace': - specifier: ^2.4.2 - version: 2.4.2(rollup@2.79.1) - '@rollup/plugin-sucrase': - specifier: ^5.0.2 - version: 5.0.2(rollup@2.79.1) '@starptech/prettyhtml-hast-to-html': specifier: ^0.10.0 version: 0.10.0 @@ -139,18 +139,9 @@ importers: retext-smartypants: specifier: ^4.0.0 version: 4.0.0 - rollup-plugin-json: - specifier: ^4.0.0 - version: 4.0.0 - rollup-plugin-node-builtins: - specifier: ^2.1.2 - version: 2.1.2 - rollup-plugin-node-globals: - specifier: ^1.4.0 - version: 1.4.0 rollup-plugin-svelte: specifier: ^5.1.1 - version: 5.2.3(rollup@2.79.1)(svelte@4.0.0) + version: 5.2.3(rollup@4.20.0)(svelte@4.0.0) shiki: specifier: ^0.9.3 version: 0.9.3 @@ -223,13 +214,13 @@ importers: version: 3.0.0(rollup@2.79.1) '@sveltejs/adapter-auto': specifier: ^3.1.1 - version: 3.1.1(@sveltejs/kit@2.4.1) + version: 3.1.1(@sveltejs/kit@2.4.1(@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)))(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0))) '@sveltejs/kit': specifier: ^2.4.1 - version: 2.4.1(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12) + version: 2.4.1(@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)))(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)) '@sveltejs/vite-plugin-svelte': specifier: ^3.0.1 - version: 3.0.1(svelte@4.2.9)(vite@5.0.12) + version: 3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)) codemirror: specifier: ^5.49.2 version: 5.57.0 @@ -274,7 +265,7 @@ importers: version: 2.0.3 vite: specifier: ^5.0.12 - version: 5.0.12(@types/node@14.14.44) + version: 5.0.12(@types/node@14.14.44)(terser@5.9.0) packages/site/workers-site: dependencies: @@ -291,19 +282,19 @@ importers: packages/svast-stringify: dependencies: svast: - specifier: workspace:^0.2.0 + specifier: workspace:^0.2.1 version: link:../svast packages/svast-utils: dependencies: svast: - specifier: workspace:^0.2.0 + specifier: workspace:^0.2.1 version: link:../svast packages/svelte-parse: dependencies: svast: - specifier: workspace:^0.2.0 + specifier: workspace:^0.2.1 version: link:../svast packages: @@ -312,12 +303,20 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@babel/code-frame@7.10.4': resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} '@babel/code-frame@7.12.13': resolution: {integrity: sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.11.0': resolution: {integrity: sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==} @@ -397,24 +396,26 @@ packages: '@babel/helper-split-export-declaration@7.11.0': resolution: {integrity: sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==} - '@babel/helper-validator-identifier@7.10.4': - resolution: {integrity: sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==} - '@babel/helper-validator-identifier@7.14.0': resolution: {integrity: sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.10.4': resolution: {integrity: sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==} '@babel/helpers@7.10.4': resolution: {integrity: sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==} - '@babel/highlight@7.10.4': - resolution: {integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==} - '@babel/highlight@7.14.0': resolution: {integrity: sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.11.4': resolution: {integrity: sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==} engines: {node: '>=6.0.0'} @@ -422,67 +423,80 @@ packages: '@babel/plugin-proposal-async-generator-functions@7.10.5': resolution: {integrity: sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-class-properties@7.10.4': resolution: {integrity: sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-dynamic-import@7.10.4': resolution: {integrity: sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-export-namespace-from@7.10.4': resolution: {integrity: sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-json-strings@7.10.4': resolution: {integrity: sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-logical-assignment-operators@7.11.0': resolution: {integrity: sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-nullish-coalescing-operator@7.10.4': resolution: {integrity: sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-numeric-separator@7.10.4': resolution: {integrity: sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-object-rest-spread@7.11.0': resolution: {integrity: sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-optional-catch-binding@7.10.4': resolution: {integrity: sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-optional-chaining@7.11.0': resolution: {integrity: sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-private-methods@7.10.4': resolution: {integrity: sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-unicode-property-regex@7.10.4': resolution: {integrity: sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==} engines: {node: '>=4'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -937,6 +951,10 @@ packages: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.0': resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} @@ -945,15 +963,25 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.4.14': resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.18': resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jsdevtools/rehype-toc@3.0.2': resolution: {integrity: sha512-n5JEf16Wr4mdkRMZ8wMP/wN9/sHmTjRPbouXjJH371mZ2LEGDl72t8tEsMRNFerQN/QJtivOxqK1frdGa4QK5Q==} engines: {node: '>=10'} @@ -1000,9 +1028,9 @@ packages: peerDependencies: rollup: ^2.38.3 - '@rollup/plugin-commonjs@25.0.7': - resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} - engines: {node: '>=14.0.0'} + '@rollup/plugin-commonjs@26.0.1': + resolution: {integrity: sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 peerDependenciesMeta: @@ -1014,6 +1042,15 @@ packages: peerDependencies: rollup: ^1.20.0 || ^2.0.0 + '@rollup/plugin-json@6.1.0': + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/plugin-node-resolve@13.0.5': resolution: {integrity: sha512-mVaw6uxtvuGx/XCI4qBQXsDZJUfyx5vp39iE0J/7Hd6wDhEbjHr6aES7Nr9yWbuE0BY+oKp6N7Bq6jX5NCGNmQ==} engines: {node: '>= 10.0.0'} @@ -1029,16 +1066,20 @@ packages: rollup: optional: true - '@rollup/plugin-replace@2.4.2': - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - '@rollup/plugin-replace@3.0.0': resolution: {integrity: sha512-3c7JCbMuYXM4PbPWT4+m/4Y6U60SgsnDT/cCyAyUKwFHg7pTSfsSQzIpETha3a3ig6OdOKzZz87D9ZXIK3qsDg==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 + '@rollup/plugin-replace@5.0.7': + resolution: {integrity: sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/plugin-sucrase@5.0.2': resolution: {integrity: sha512-4MhIVH9Dy2Hwose1/x5QMs0XF7yn9jDd/yozHqzdIrMWIolgFpGnrnVhQkqTaK1RALY/fpyrEKmwH/04vr1THA==} engines: {node: '>=14.0.0'} @@ -1048,13 +1089,18 @@ packages: rollup: optional: true - '@rollup/plugin-typescript@8.2.1': - resolution: {integrity: sha512-Qd2E1pleDR4bwyFxqbjt4eJf+wB0UKVMLc7/BAFDGVdAXQMCsD4DUv5/7/ww47BZCYxWtJqe1Lo0KVNswBJlRw==} - engines: {node: '>=8.0.0'} + '@rollup/plugin-typescript@11.1.6': + resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} + engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^2.14.0 + rollup: ^2.14.0||^3.0.0||^4.0.0 tslib: '*' typescript: '>=3.7.0' + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true '@rollup/pluginutils@3.1.0': resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} @@ -1075,66 +1121,146 @@ packages: rollup: optional: true + '@rollup/rollup-android-arm-eabi@4.20.0': + resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm-eabi@4.9.6': resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} cpu: [arm] os: [android] + '@rollup/rollup-android-arm64@4.20.0': + resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} + cpu: [arm64] + os: [android] + '@rollup/rollup-android-arm64@4.9.6': resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} cpu: [arm64] os: [android] + '@rollup/rollup-darwin-arm64@4.20.0': + resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-arm64@4.9.6': resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-x64@4.20.0': + resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.9.6': resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} cpu: [x64] os: [darwin] + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.9.6': resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.20.0': + resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.9.6': resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.20.0': + resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.9.6': resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.9.6': resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.20.0': + resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.20.0': + resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.9.6': resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.20.0': + resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.9.6': resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} cpu: [x64] os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.20.0': + resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.9.6': resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.20.0': + resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.9.6': resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.20.0': + resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.9.6': resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} cpu: [x64] @@ -1226,8 +1352,23 @@ packages: '@types/unist@2.0.3': resolution: {integrity: sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==} - abstract-leveldown@0.12.4: - resolution: {integrity: sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=} + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + + '@vitest/runner@2.0.5': + resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} + + '@vitest/snapshot@2.0.5': + resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} + + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} acorn@5.7.4: resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} @@ -1245,14 +1386,14 @@ packages: hasBin: true ansi-align@2.0.0: - resolution: {integrity: sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=} + resolution: {integrity: sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==} ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} ansi-regex@3.0.0: - resolution: {integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=} + resolution: {integrity: sha512-wFUFA5bg5dviipbQQ32yOQhl6gcJaJXiHE7dvR8VYPG97+J/GNC5FKGepKdEDUFeXRzDxPF1X/Btc8L+v7oqIQ==} engines: {node: '>=4'} ansi-regex@5.0.0: @@ -1282,9 +1423,6 @@ packages: any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1302,11 +1440,12 @@ packages: engines: {node: '>=8'} arrify@1.0.1: - resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} - asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} @@ -1327,15 +1466,6 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - bl@0.8.2: - resolution: {integrity: sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=} - - bn.js@4.11.9: - resolution: {integrity: sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==} - - bn.js@5.1.3: - resolution: {integrity: sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==} - boxen@1.3.0: resolution: {integrity: sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==} engines: {node: '>=4'} @@ -1353,41 +1483,17 @@ packages: breakword@1.0.5: resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==} - brorand@1.1.0: - resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} - - browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - - browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} - - browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} - - browserify-fs@1.0.0: - resolution: {integrity: sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=} - - browserify-rsa@4.0.1: - resolution: {integrity: sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=} - - browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} - browserslist@4.14.0: resolution: {integrity: sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true buffer-es6@4.9.3: - resolution: {integrity: sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=} + resolution: {integrity: sha512-Ibt+oXxhmeYJSsCkODPqNpPmyegefiD8rfutH1NYGhMZQhSp95Rz7haemgnJ6dxa6LT+JLLbtgOMORRluwKktw==} buffer-from@1.1.1: resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} - buffer-xor@1.0.3: - resolution: {integrity: sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=} - builtin-modules@3.1.0: resolution: {integrity: sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==} engines: {node: '>=6'} @@ -1396,12 +1502,16 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} camelcase@4.1.0: - resolution: {integrity: sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=} + resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} engines: {node: '>=4'} camelcase@5.3.1: @@ -1414,6 +1524,10 @@ packages: ccount@1.0.5: resolution: {integrity: sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==} + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1437,14 +1551,15 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} - cli-boxes@1.0.0: - resolution: {integrity: sha1-T6kXw+WclKAEzWH47lCdplFocUM=} + resolution: {integrity: sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==} engines: {node: '>=0.10.0'} clipboard@2.0.6: @@ -1453,11 +1568,8 @@ packages: cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - clone@0.1.19: - resolution: {integrity: sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=} - clone@1.0.4: - resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=} + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} code-red@1.0.3: @@ -1477,7 +1589,7 @@ packages: engines: {node: '>=7.0.0'} color-name@1.1.3: - resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1496,11 +1608,7 @@ packages: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - - concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} convert-source-map@1.7.0: resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} @@ -1512,23 +1620,8 @@ packages: core-js-compat@3.6.5: resolution: {integrity: sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==} - core-util-is@1.0.2: - resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} - - create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} - - create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} - - create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cross-spawn@5.1.0: - resolution: {integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=} + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} @@ -1538,9 +1631,6 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} - css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -1563,6 +1653,7 @@ packages: debug@4.1.1: resolution: {integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==} + deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -1578,14 +1669,27 @@ packages: supports-color: optional: true + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize-keys@1.1.0: - resolution: {integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=} + resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} engines: {node: '>=0.10.0'} decamelize@1.2.0: - resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deepmerge@4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} @@ -1595,10 +1699,7 @@ packages: engines: {node: '>=0.10.0'} defaults@1.0.3: - resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=} - - deferred-leveldown@0.2.0: - resolution: {integrity: sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=} + resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} define-properties@1.1.3: resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} @@ -1607,17 +1708,10 @@ packages: delegate@3.2.0: resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} - dequal@2.0.2: - resolution: {integrity: sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==} - engines: {node: '>=6'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - des.js@1.0.1: - resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} - detect-indent@6.0.0: resolution: {integrity: sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==} engines: {node: '>=8'} @@ -1625,17 +1719,6 @@ packages: devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - - diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1650,11 +1733,8 @@ packages: electron-to-chromium@1.3.539: resolution: {integrity: sha512-rM0LWDIstdqfaRUADZetNrL6+zd/0NBmavbMEhBXgc2u/CC1d1GaDyN5hho29fFvBiOVFwrSWZkzmNcZnCEDog==} - elliptic@6.5.3: - resolution: {integrity: sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==} - emoji-regex@6.1.1: - resolution: {integrity: sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=} + resolution: {integrity: sha512-WfVwM9e+M9B/4Qjh9SRnPX2A74Tom3WlVfWF9QWJ8f2BPa1u+/q4aEp1tizZ3vBKAZTg7B6yxn3t9iMjT+dv4w==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1666,10 +1746,6 @@ packages: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} - errno@0.1.7: - resolution: {integrity: sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==} - hasBin: true - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1780,19 +1856,15 @@ packages: engines: {node: '>=6'} escape-html@1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} escape-string-regexp@1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -1817,13 +1889,14 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - execa@0.7.0: - resolution: {integrity: sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=} + resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} engines: {node: '>=4'} + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -1859,15 +1932,12 @@ packages: find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - foreach@2.0.5: - resolution: {integrity: sha1-C+4AUBiusmDQo6865ljdATbsG5k=} - foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} format@0.2.2: - resolution: {integrity: sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=} + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} front-matter@4.0.2: @@ -1882,7 +1952,7 @@ packages: engines: {node: '>=6 <7 || >=8'} fs.realpath@1.0.0: - resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -1895,9 +1965,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - fwd-stream@1.0.4: - resolution: {integrity: sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=} - gensync@1.0.0-beta.1: resolution: {integrity: sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==} engines: {node: '>=6.9.0'} @@ -1906,10 +1973,17 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + get-stream@3.0.0: - resolution: {integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=} + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} engines: {node: '>=4'} + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + github-slugger@1.3.0: resolution: {integrity: sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==} @@ -1917,17 +1991,13 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -1944,7 +2014,7 @@ packages: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} good-listener@1.2.2: - resolution: {integrity: sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=} + resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} graceful-fs@4.2.4: resolution: {integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==} @@ -1960,7 +2030,7 @@ packages: engines: {node: '>=6'} has-flag@3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} has-flag@4.0.0: @@ -1975,13 +2045,6 @@ packages: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} - hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} - - hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} @@ -2004,9 +2067,6 @@ packages: hastscript@5.1.2: resolution: {integrity: sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==} - hmac-drbg@1.0.1: - resolution: {integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=} - hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -2019,13 +2079,14 @@ packages: human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - idb-wrapper@1.7.2: - resolution: {integrity: sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==} - ignore@5.1.8: resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} engines: {node: '>= 4'} @@ -2037,11 +2098,9 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - indexof@0.0.1: - resolution: {integrity: sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=} - inflight@1.0.6: - resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2060,7 +2119,7 @@ packages: resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} is-arrayish@0.2.1: - resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-buffer@2.0.4: resolution: {integrity: sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==} @@ -2092,11 +2151,11 @@ packages: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} is-extglob@2.1.1: - resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} is-fullwidth-code-point@3.0.0: @@ -2117,11 +2176,8 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-object@0.1.2: - resolution: {integrity: sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=} - is-plain-obj@1.1.0: - resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=} + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} is-plain-obj@2.1.0: @@ -2139,9 +2195,13 @@ packages: engines: {node: '>= 0.4'} is-stream@1.1.0: - resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=} + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} @@ -2160,24 +2220,11 @@ packages: is-word-character@1.0.4: resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} - is@0.2.7: - resolution: {integrity: sha1-OzSixI81mXLzUEKEkZOucmS2NWI=} - - isarray@0.0.1: - resolution: {integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=} - - isarray@1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - - isbuffer@0.0.0: - resolution: {integrity: sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=} - isexe@2.0.0: - resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} jest-worker@26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} @@ -2195,7 +2242,7 @@ packages: hasBin: true jsesc@0.5.0: - resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=} + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true jsesc@2.5.2: @@ -2215,47 +2262,16 @@ packages: hasBin: true jsonfile@4.0.0: - resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - kleur@4.1.4: - resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==} - engines: {node: '>=6'} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - level-blobs@0.1.7: - resolution: {integrity: sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=} - - level-filesystem@1.2.0: - resolution: {integrity: sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=} - - level-fix-range@1.0.2: - resolution: {integrity: sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=} - - level-fix-range@2.0.0: - resolution: {integrity: sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=} - - level-hooks@4.5.0: - resolution: {integrity: sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=} - - level-js@2.2.4: - resolution: {integrity: sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=} - - level-peek@1.0.6: - resolution: {integrity: sha1-vsUccqgu5GTTNkNMfIdsP8vM538=} - - level-sublevel@5.2.3: - resolution: {integrity: sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=} - - levelup@0.18.6: - resolution: {integrity: sha1-5qAcsIlhbI7MApHCqb0/DETj5es=} - leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -2268,7 +2284,7 @@ packages: resolution: {integrity: sha512-8ZmlJFVK9iCmtLz19HpSsR8HaAMWBT284VMNednLwlIMDP2hJDCIhUp0IZ2xUcZ+Ob6BM0VvCSJwzASDM45NLQ==} load-json-file@4.0.0: - resolution: {integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=} + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} load-yaml-file@0.2.0: @@ -2287,7 +2303,7 @@ packages: engines: {node: '>=10'} lodash.startcase@4.4.0: - resolution: {integrity: sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=} + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} lodash@4.17.20: resolution: {integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==} @@ -2299,9 +2315,11 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -2309,9 +2327,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - ltgt@2.2.1: - resolution: {integrity: sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=} - magic-string@0.22.5: resolution: {integrity: sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==} @@ -2322,15 +2337,15 @@ packages: resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} engines: {node: '>=12'} + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - map-obj@1.0.1: - resolution: {integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=} + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} map-obj@4.2.1: @@ -2340,9 +2355,6 @@ packages: markdown-escapes@1.0.4: resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} - md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - mdast-util-definitions@2.0.1: resolution: {integrity: sha512-Co+DQ6oZlUzvUR7JCpP249PcexxygiaKk9axJh+eRzHDZJk2julbIdKB4PXHVxdBuLzvJ1Izb+YDpj2deGMOuA==} @@ -2367,7 +2379,7 @@ packages: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} memorystream@0.3.1: - resolution: {integrity: sha1-htcJCzDORV1j+64S3aUaR93K+bI=} + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} meow@6.1.1: @@ -2385,34 +2397,24 @@ packages: resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} engines: {node: '>=8.6'} - miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true - mime@2.4.6: resolution: {integrity: sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==} engines: {node: '>=4.0.0'} hasBin: true + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - - minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=} - minimatch@3.0.4: resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} minimist-options@4.1.0: @@ -2422,8 +2424,8 @@ packages: minimist@1.2.5: resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} mixme@0.5.1: @@ -2479,9 +2481,13 @@ packages: hasBin: true npm-run-path@2.0.2: - resolution: {integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=} + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -2489,13 +2495,6 @@ packages: object-inspect@1.8.0: resolution: {integrity: sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==} - object-keys@0.2.0: - resolution: {integrity: sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=} - deprecated: Please update to the latest object-keys - - object-keys@0.4.0: - resolution: {integrity: sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=} - object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -2504,17 +2503,18 @@ packages: resolution: {integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==} engines: {node: '>= 0.4'} - octal@1.0.0: - resolution: {integrity: sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=} - once@1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} onigasm@2.2.5: resolution: {integrity: sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==} os-tmpdir@1.0.2: - resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=} + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} outdent@0.5.0: @@ -2525,7 +2525,7 @@ packages: engines: {node: '>=8'} p-finally@1.0.0: - resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} p-limit@2.3.0: @@ -2552,8 +2552,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - parse-asn1@5.1.6: - resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} parse-entities@1.2.2: resolution: {integrity: sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==} @@ -2562,7 +2562,7 @@ packages: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} parse-json@4.0.0: - resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=} + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} parse-json@5.2.0: @@ -2577,26 +2577,30 @@ packages: engines: {node: '>=8'} path-is-absolute@1.0.1: - resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} path-key@2.0.1: - resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=} + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.6: resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} @@ -2606,9 +2610,12 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pbkdf2@3.1.1: - resolution: {integrity: sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==} - engines: {node: '>=0.12'} + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -2630,7 +2637,7 @@ packages: hasBin: true pify@3.0.0: - resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} pify@4.0.1: @@ -2676,25 +2683,13 @@ packages: resolution: {integrity: sha512-uGdSIu1nk3kej2iZsLyDoJ7e9bnPzIgY0naW/HdknGj61zScaprVEVGHrPoXqI+M9sP0NDnTK2jpkvmldpuqDw==} process-es6@0.11.6: - resolution: {integrity: sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + resolution: {integrity: sha512-GYBRQtL4v3wgigq10Pv58jmTbFXlIiTbSfgnNqZLY0ldUPqy1rRxDI5fCjoCpnM6TqmHQI8ydzTBXW86OYc0gA==} property-information@5.5.0: resolution: {integrity: sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA==} - prr@0.0.0: - resolution: {integrity: sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=} - - prr@1.0.1: - resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=} - pseudomap@1.0.2: - resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} - - public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -2706,15 +2701,12 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} - read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} read-pkg@3.0.0: - resolution: {integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=} + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} engines: {node: '>=4'} read-pkg@5.2.0: @@ -2725,19 +2717,6 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} - readable-stream@1.0.34: - resolution: {integrity: sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=} - - readable-stream@1.1.14: - resolution: {integrity: sha1-fPTFTvZI44EwhMY23SB54WbAgdk=} - - readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - - readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} - redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -2807,22 +2786,22 @@ packages: resolution: {integrity: sha512-nKNKCX6v6QlFoize2PTdiVVjDv8TH3DBfq7kDehLo0e8lNPv3V/AowB+5foxXNhjqeqQR92hJckjq9WWzFBSag==} repeat-string@1.6.1: - resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=} + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} replace-ext@1.0.0: - resolution: {integrity: sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=} + resolution: {integrity: sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==} engines: {node: '>= 0.10'} require-directory@2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} require-relative@0.8.7: - resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} + resolution: {integrity: sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==} resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -2858,22 +2837,12 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - - rollup-plugin-dts@3.0.1: - resolution: {integrity: sha512-sdTsd0tEIV1b5Bio1k4Ei3N4/7jbwcVRdlYotGYdJOKR59JH7DzqKTSCbfaKPzuAcKTp7k317z2BzYJ3bkhDTw==} - engines: {node: '>=12'} + rollup-plugin-dts@6.1.1: + resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} + engines: {node: '>=16'} peerDependencies: - rollup: ^2.40.0 - typescript: ^4.2.3 - - rollup-plugin-json@4.0.0: - resolution: {integrity: sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==} - deprecated: This module has been deprecated and is no longer maintained. Please use @rollup/plugin-json. - - rollup-plugin-node-builtins@2.1.2: - resolution: {integrity: sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=} + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 rollup-plugin-node-globals@1.4.0: resolution: {integrity: sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==} @@ -2893,6 +2862,7 @@ packages: rollup-plugin-terser@7.0.2: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser peerDependencies: rollup: ^2.0.0 @@ -2904,6 +2874,11 @@ packages: engines: {node: '>=10.0.0'} hasBin: true + rollup@4.20.0: + resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rollup@4.9.6: resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -2912,10 +2887,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - sade@1.7.4: - resolution: {integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==} - engines: {node: '>= 6'} - sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -2930,11 +2901,7 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} select@1.1.2: - resolution: {integrity: sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=} - - semver@2.3.2: - resolution: {integrity: sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=} - hasBin: true + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} @@ -2948,17 +2915,13 @@ packages: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} set-blocking@2.0.0: - resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true - shebang-command@1.2.0: - resolution: {integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=} + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} shebang-command@2.0.0: @@ -2966,7 +2929,7 @@ packages: engines: {node: '>=8'} shebang-regex@1.0.0: - resolution: {integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=} + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} shebang-regex@3.0.0: @@ -2979,6 +2942,9 @@ packages: shiki@0.9.3: resolution: {integrity: sha512-NEjg1mVbAUrzRv2eIcUt3TG7X9svX7l3n3F5/3OdFq+/BxUdmBOeKGiH4icZJBLHy354Shnj6sfBTemea2e7XA==} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.3: resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} @@ -3003,14 +2969,11 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - source-map-support@0.5.19: - resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} - source-map-support@0.5.20: resolution: {integrity: sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==} source-map@0.5.7: - resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} source-map@0.6.1: @@ -3023,6 +2986,7 @@ packages: sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} @@ -3043,17 +3007,20 @@ packages: resolution: {integrity: sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==} sprintf-js@1.0.3: - resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} state-toggle@1.0.3: resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + stream-transform@2.1.0: resolution: {integrity: sha512-bwQO+75rzQbug7e5OOHnOR3FgbJ0fCjHmDIdynkwUaFzleBXugGmv2dx3sX3aIHUQRLjrcisRPgN9BWl63uGgw==} - string-range@1.2.2: - resolution: {integrity: sha1-qJPtNH5yKZvIO++78qaSqNI51d0=} - string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} engines: {node: '>=4'} @@ -3076,20 +3043,11 @@ packages: string.prototype.trimstart@1.0.1: resolution: {integrity: sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==} - string_decoder@0.10.31: - resolution: {integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@2.0.0: resolution: {integrity: sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==} strip-ansi@4.0.0: - resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=} + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} strip-ansi@6.0.0: @@ -3105,13 +3063,17 @@ packages: engines: {node: '>=12'} strip-bom@3.0.0: - resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} strip-eof@1.0.0: - resolution: {integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=} + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -3153,7 +3115,7 @@ packages: engines: {node: '>=16'} term-size@1.2.0: - resolution: {integrity: sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=} + resolution: {integrity: sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==} engines: {node: '>=4'} term-size@2.2.1: @@ -3178,12 +3140,27 @@ packages: tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinypool@1.0.0: + resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.0: + resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} + engines: {node: '>=14.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} to-fast-properties@2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} to-regex-range@5.0.1: @@ -3193,10 +3170,6 @@ packages: toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - totalist@2.0.0: - resolution: {integrity: sha512-+Y17F0YzxfACxTyjfhnJQEe7afPA0GSpYlFkl2VFMxYP7jshQf9gXV7cH47EfToBumFThfKBvfAcoUn6fdNeRQ==} - engines: {node: '>=6'} - totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -3209,7 +3182,8 @@ packages: resolution: {integrity: sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==} trim@0.0.1: - resolution: {integrity: sha1-WFhUf2spB1fulczMZm+1AITEYN0=} + resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} + deprecated: Use String.prototype.trim() instead trough@1.0.5: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} @@ -3217,13 +3191,6 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-node@9.1.1: - resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} - engines: {node: '>=10.0.0'} - hasBin: true - peerDependencies: - typescript: '>=2.7' - tslib@2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} @@ -3244,12 +3211,6 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - typedarray-to-buffer@1.0.4: - resolution: {integrity: sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=} - - typedarray@0.0.6: - resolution: {integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=} - typeface-catamaran@0.0.72: resolution: {integrity: sha512-6l9gq/IPseoC40lv/etxdUlIR2RHBKpAm+vu3lwt03Jd4i2+VOhKS/fOz1n0YpRjkz8QyG2qFwYjcoLT02/2qw==} @@ -3332,14 +3293,6 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - util-deprecate@1.0.2: - resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} - - uvu@0.5.1: - resolution: {integrity: sha512-JGxttnOGDFs77FaZ0yMUHIzczzQ5R1IlDeNW6Wymw6gAscwMdAffVOP6TlxLIfReZyK8tahoGwWZaTCJzNFDkg==} - engines: {node: '>=8'} - hasBin: true - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -3352,6 +3305,11 @@ packages: vfile@4.2.0: resolution: {integrity: sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==} + vite-node@2.0.5: + resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + vite@5.0.12: resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3388,6 +3346,31 @@ packages: vite: optional: true + vitest@2.0.5: + resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.0.5 + '@vitest/ui': 2.0.5 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vlq@0.2.3: resolution: {integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==} @@ -3400,10 +3383,10 @@ packages: hasBin: true wcwidth@1.0.1: - resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} which-module@2.0.0: - resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=} + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} which-pm@2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} @@ -3418,6 +3401,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + widest-line@2.0.1: resolution: {integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==} engines: {node: '>=4'} @@ -3435,23 +3423,7 @@ packages: engines: {node: '>=12'} wrappy@1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - - xtend@2.0.6: - resolution: {integrity: sha1-XqZXptukRwacLlnFihE4ywxebO4=} - engines: {node: '>=0.4'} - - xtend@2.1.2: - resolution: {integrity: sha1-bv7MKk2tjmlixJAbM3znuoe10os=} - engines: {node: '>=0.4'} - - xtend@2.2.0: - resolution: {integrity: sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=} - engines: {node: '>=0.4'} - - xtend@3.0.0: - resolution: {integrity: sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=} - engines: {node: '>=0.4'} + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} @@ -3461,7 +3433,7 @@ packages: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} yallist@2.1.2: - resolution: {integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=} + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -3474,10 +3446,6 @@ packages: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -3492,14 +3460,25 @@ snapshots: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@babel/code-frame@7.10.4': dependencies: - '@babel/highlight': 7.10.4 + '@babel/highlight': 7.14.0 '@babel/code-frame@7.12.13': dependencies: '@babel/highlight': 7.14.0 + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.0 + optional: true + '@babel/compat-data@7.11.0': dependencies: browserslist: 4.14.0 @@ -3655,10 +3634,11 @@ snapshots: dependencies: '@babel/types': 7.11.0 - '@babel/helper-validator-identifier@7.10.4': {} - '@babel/helper-validator-identifier@7.14.0': {} + '@babel/helper-validator-identifier@7.24.7': + optional: true + '@babel/helper-wrap-function@7.10.4': dependencies: '@babel/helper-function-name': 7.10.4 @@ -3676,17 +3656,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/highlight@7.10.4': + '@babel/highlight@7.14.0': dependencies: - '@babel/helper-validator-identifier': 7.10.4 + '@babel/helper-validator-identifier': 7.14.0 chalk: 2.4.2 js-tokens: 4.0.0 - '@babel/highlight@7.14.0': + '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.14.0 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 + optional: true '@babel/parser@7.11.4': dependencies: @@ -4141,13 +4123,13 @@ snapshots: '@babel/template@7.10.4': dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.12.13 '@babel/parser': 7.11.4 '@babel/types': 7.11.0 '@babel/traverse@7.11.0': dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.12.13 '@babel/generator': 7.11.4 '@babel/helper-function-name': 7.10.4 '@babel/helper-split-export-declaration': 7.11.0 @@ -4403,19 +4385,34 @@ snapshots: '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/resolve-uri@3.1.0': {} '@jridgewell/set-array@1.1.2': {} + '@jridgewell/set-array@1.2.1': {} + '@jridgewell/sourcemap-codec@1.4.14': {} '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.18': dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jsdevtools/rehype-toc@3.0.2': {} '@manypkg/find-root@1.1.0': @@ -4468,21 +4465,28 @@ snapshots: resolve: 1.20.0 rollup: 2.79.1 - '@rollup/plugin-commonjs@25.0.7(rollup@2.79.1)': + '@rollup/plugin-commonjs@26.0.1(rollup@4.20.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) commondir: 1.0.1 estree-walker: 2.0.2 - glob: 8.1.0 + glob: 10.4.5 is-reference: 1.2.1 - magic-string: 0.30.5 - rollup: 2.79.1 + magic-string: 0.30.11 + optionalDependencies: + rollup: 4.20.0 '@rollup/plugin-json@4.1.0(rollup@2.79.1)': dependencies: '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 + '@rollup/plugin-json@6.1.0(rollup@4.20.0)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + optionalDependencies: + rollup: 4.20.0 + '@rollup/plugin-node-resolve@13.0.5(rollup@2.79.1)': dependencies: '@rollup/pluginutils': 3.1.0(rollup@2.79.1) @@ -4493,41 +4497,45 @@ snapshots: resolve: 1.20.0 rollup: 2.79.1 - '@rollup/plugin-node-resolve@15.2.3(rollup@2.79.1)': + '@rollup/plugin-node-resolve@15.2.3(rollup@4.20.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 2.79.1 + optionalDependencies: + rollup: 4.20.0 - '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': + '@rollup/plugin-replace@3.0.0(rollup@2.79.1)': dependencies: '@rollup/pluginutils': 3.1.0(rollup@2.79.1) magic-string: 0.25.7 rollup: 2.79.1 - '@rollup/plugin-replace@3.0.0(rollup@2.79.1)': + '@rollup/plugin-replace@5.0.7(rollup@4.20.0)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.7 - rollup: 2.79.1 + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + magic-string: 0.30.11 + optionalDependencies: + rollup: 4.20.0 - '@rollup/plugin-sucrase@5.0.2(rollup@2.79.1)': + '@rollup/plugin-sucrase@5.0.2(rollup@4.20.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) - rollup: 2.79.1 + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) sucrase: 3.35.0 + optionalDependencies: + rollup: 4.20.0 - '@rollup/plugin-typescript@8.2.1(rollup@2.79.1)(tslib@2.3.1)(typescript@4.2.4)': + '@rollup/plugin-typescript@11.1.6(rollup@4.20.0)(tslib@2.3.1)(typescript@4.2.4)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - resolve: 1.20.0 - rollup: 2.79.1 - tslib: 2.3.1 + '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + resolve: 1.22.8 typescript: 4.2.4 + optionalDependencies: + rollup: 4.20.0 + tslib: 2.3.1 '@rollup/pluginutils@3.1.0(rollup@2.79.1)': dependencies: @@ -4541,49 +4549,98 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.2.3 - '@rollup/pluginutils@5.1.0(rollup@2.79.1)': + '@rollup/pluginutils@5.1.0(rollup@4.20.0)': dependencies: '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 2.79.1 + optionalDependencies: + rollup: 4.20.0 + + '@rollup/rollup-android-arm-eabi@4.20.0': + optional: true '@rollup/rollup-android-arm-eabi@4.9.6': optional: true + '@rollup/rollup-android-arm64@4.20.0': + optional: true + '@rollup/rollup-android-arm64@4.9.6': optional: true + '@rollup/rollup-darwin-arm64@4.20.0': + optional: true + '@rollup/rollup-darwin-arm64@4.9.6': optional: true + '@rollup/rollup-darwin-x64@4.20.0': + optional: true + '@rollup/rollup-darwin-x64@4.9.6': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.9.6': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.20.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.20.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.9.6': optional: true + '@rollup/rollup-linux-arm64-musl@4.20.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.9.6': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.20.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.9.6': optional: true + '@rollup/rollup-linux-s390x-gnu@4.20.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.20.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.9.6': optional: true + '@rollup/rollup-linux-x64-musl@4.20.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.9.6': optional: true + '@rollup/rollup-win32-arm64-msvc@4.20.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.9.6': optional: true + '@rollup/rollup-win32-ia32-msvc@4.20.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.9.6': optional: true + '@rollup/rollup-win32-x64-msvc@4.20.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.9.6': optional: true @@ -4602,14 +4659,14 @@ snapshots: unist-util-is: 2.1.3 xtend: 4.0.2 - '@sveltejs/adapter-auto@3.1.1(@sveltejs/kit@2.4.1)': + '@sveltejs/adapter-auto@3.1.1(@sveltejs/kit@2.4.1(@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)))(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)))': dependencies: - '@sveltejs/kit': 2.4.1(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12) + '@sveltejs/kit': 2.4.1(@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)))(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)) import-meta-resolve: 4.0.0 - '@sveltejs/kit@2.4.1(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12)': + '@sveltejs/kit@2.4.1(@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)))(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.9)(vite@5.0.12) + '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 4.3.2 @@ -4623,28 +4680,28 @@ snapshots: sirv: 2.0.4 svelte: 4.2.9 tiny-glob: 0.2.9 - vite: 5.0.12(@types/node@14.14.44) + vite: 5.0.12(@types/node@14.14.44)(terser@5.9.0) - '@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12)': + '@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)))(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.9)(vite@5.0.12) + '@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)) debug: 4.3.4 svelte: 4.2.9 - vite: 5.0.12(@types/node@14.14.44) + vite: 5.0.12(@types/node@14.14.44)(terser@5.9.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12)': + '@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.9)(vite@5.0.12) + '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)))(svelte@4.2.9)(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 svelte: 4.2.9 svelte-hmr: 0.15.3(svelte@4.2.9) - vite: 5.0.12(@types/node@14.14.44) - vitefu: 0.2.5(vite@5.0.12) + vite: 5.0.12(@types/node@14.14.44)(terser@5.9.0) + vitefu: 0.2.5(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)) transitivePeerDependencies: - supports-color @@ -4692,9 +4749,38 @@ snapshots: '@types/unist@2.0.3': {} - abstract-leveldown@0.12.4: + '@vitest/expect@2.0.5': + dependencies: + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@2.0.5': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.0.5': + dependencies: + '@vitest/utils': 2.0.5 + pathe: 1.1.2 + + '@vitest/snapshot@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + magic-string: 0.30.11 + pathe: 1.1.2 + + '@vitest/spy@2.0.5': dependencies: - xtend: 3.0.0 + tinyspy: 3.0.0 + + '@vitest/utils@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + estree-walker: 3.0.3 + loupe: 3.1.1 + tinyrainbow: 1.2.0 acorn@5.7.4: {} @@ -4728,8 +4814,6 @@ snapshots: any-promise@1.3.0: {} - arg@4.1.3: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -4748,12 +4832,7 @@ snapshots: arrify@1.0.1: {} - asn1.js@5.4.1: - dependencies: - bn.js: 4.11.9 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - safer-buffer: 2.1.2 + assertion-error@2.0.1: {} axobject-query@3.2.1: dependencies: @@ -4775,14 +4854,6 @@ snapshots: dependencies: is-windows: 1.0.2 - bl@0.8.2: - dependencies: - readable-stream: 1.0.34 - - bn.js@4.11.9: {} - - bn.js@5.1.3: {} - boxen@1.3.0: dependencies: ansi-align: 2.0.0 @@ -4810,53 +4881,6 @@ snapshots: dependencies: wcwidth: 1.0.1 - brorand@1.1.0: {} - - browserify-aes@1.2.0: - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.4 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.4 - safe-buffer: 5.2.1 - - browserify-cipher@1.0.1: - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - - browserify-des@1.0.2: - dependencies: - cipher-base: 1.0.4 - des.js: 1.0.1 - inherits: 2.0.4 - safe-buffer: 5.2.1 - - browserify-fs@1.0.0: - dependencies: - level-filesystem: 1.2.0 - level-js: 2.2.4 - levelup: 0.18.6 - - browserify-rsa@4.0.1: - dependencies: - bn.js: 4.11.9 - randombytes: 2.1.0 - - browserify-sign@4.2.1: - dependencies: - bn.js: 5.1.3 - browserify-rsa: 4.0.1 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.5.3 - inherits: 2.0.4 - parse-asn1: 5.1.6 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - browserslist@4.14.0: dependencies: caniuse-lite: 1.0.30001116 @@ -4868,12 +4892,12 @@ snapshots: buffer-from@1.1.1: {} - buffer-xor@1.0.3: {} - builtin-modules@3.1.0: {} builtin-modules@3.3.0: {} + cac@6.7.14: {} + camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 @@ -4888,6 +4912,14 @@ snapshots: ccount@1.0.5: {} + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -4909,12 +4941,9 @@ snapshots: chardet@0.7.0: {} - ci-info@2.0.0: {} + check-error@2.1.1: {} - cipher-base@1.0.4: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 + ci-info@2.0.0: {} cli-boxes@1.0.0: {} @@ -4931,8 +4960,6 @@ snapshots: strip-ansi: 6.0.0 wrap-ansi: 6.2.0 - clone@0.1.19: {} - clone@1.0.4: {} code-red@1.0.3: @@ -4969,13 +4996,6 @@ snapshots: concat-map@0.0.1: {} - concat-stream@1.6.2: - dependencies: - buffer-from: 1.1.1 - inherits: 2.0.4 - readable-stream: 2.3.7 - typedarray: 0.0.6 - convert-source-map@1.7.0: dependencies: safe-buffer: 5.1.2 @@ -4987,32 +5007,6 @@ snapshots: browserslist: 4.14.0 semver: 7.0.0 - core-util-is@1.0.2: {} - - create-ecdh@4.0.4: - dependencies: - bn.js: 4.11.9 - elliptic: 6.5.3 - - create-hash@1.2.0: - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - - create-hmac@1.1.7: - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - - create-require@1.1.1: {} - cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -5033,20 +5027,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crypto-browserify@3.12.0: - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.2.1 - create-ecdh: 4.0.4 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - inherits: 2.0.4 - pbkdf2: 3.1.1 - public-encrypt: 4.0.3 - randombytes: 2.1.0 - randomfill: 1.0.4 - css-tree@2.3.1: dependencies: mdn-data: 2.0.30 @@ -5075,6 +5055,10 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.6: + dependencies: + ms: 2.1.2 + decamelize-keys@1.1.0: dependencies: decamelize: 1.2.0 @@ -5082,6 +5066,8 @@ snapshots: decamelize@1.2.0: {} + deep-eql@5.0.2: {} + deepmerge@4.2.2: {} deepmerge@4.3.1: {} @@ -5090,10 +5076,6 @@ snapshots: dependencies: clone: 1.0.4 - deferred-leveldown@0.2.0: - dependencies: - abstract-leveldown: 0.12.4 - define-properties@1.1.3: dependencies: object-keys: 1.1.1 @@ -5101,29 +5083,12 @@ snapshots: delegate@3.2.0: optional: true - dequal@2.0.2: {} - dequal@2.0.3: {} - des.js@1.0.1: - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - detect-indent@6.0.0: {} devalue@4.3.2: {} - diff@4.0.2: {} - - diff@5.0.0: {} - - diffie-hellman@5.0.3: - dependencies: - bn.js: 4.11.9 - miller-rabin: 4.0.1 - randombytes: 2.1.0 - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -5134,16 +5099,6 @@ snapshots: electron-to-chromium@1.3.539: {} - elliptic@6.5.3: - dependencies: - bn.js: 4.11.9 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - emoji-regex@6.1.1: {} emoji-regex@8.0.0: {} @@ -5154,10 +5109,6 @@ snapshots: dependencies: ansi-colors: 4.1.1 - errno@0.1.7: - dependencies: - prr: 1.0.1 - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -5287,8 +5238,6 @@ snapshots: esm-env@1.0.0: {} - esm@3.2.25: {} - esprima@4.0.1: {} estree-walker@0.5.2: {} @@ -5305,11 +5254,6 @@ snapshots: esutils@2.0.3: {} - evp_bytestokey@1.0.3: - dependencies: - md5.js: 1.3.5 - safe-buffer: 5.2.1 - execa@0.7.0: dependencies: cross-spawn: 5.1.0 @@ -5320,6 +5264,18 @@ snapshots: signal-exit: 3.0.3 strip-eof: 1.0.0 + execa@8.0.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + extend@3.0.2: {} extendable-error@0.1.7: {} @@ -5366,8 +5322,6 @@ snapshots: micromatch: 4.0.4 pkg-dir: 4.2.0 - foreach@2.0.5: {} - foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 @@ -5400,16 +5354,16 @@ snapshots: function-bind@1.1.2: {} - fwd-stream@1.0.4: - dependencies: - readable-stream: 1.0.34 - gensync@1.0.0-beta.1: {} get-caller-file@2.0.5: {} + get-func-name@2.0.2: {} + get-stream@3.0.0: {} + get-stream@8.0.1: {} + github-slugger@1.3.0: dependencies: emoji-regex: 6.1.1 @@ -5418,13 +5372,14 @@ snapshots: dependencies: is-glob: 4.0.1 - glob@10.3.10: + glob@10.4.5: dependencies: foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 glob@7.1.7: dependencies: @@ -5435,14 +5390,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - globals@11.12.0: {} globalyzer@0.1.0: {} @@ -5481,17 +5428,6 @@ snapshots: dependencies: function-bind: 1.1.1 - hash-base@3.1.0: - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - safe-buffer: 5.2.1 - - hash.js@1.1.7: - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - hasown@2.0.0: dependencies: function-bind: 1.1.2 @@ -5513,12 +5449,6 @@ snapshots: property-information: 5.5.0 space-separated-tokens: 1.1.5 - hmac-drbg@1.0.1: - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - hosted-git-info@2.8.9: {} html-void-elements@1.0.5: {} @@ -5527,20 +5457,18 @@ snapshots: human-id@1.0.2: {} + human-signals@5.0.0: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - idb-wrapper@1.7.2: {} - ignore@5.1.8: {} import-meta-resolve@4.0.0: {} indent-string@4.0.0: {} - indexof@0.0.1: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -5603,8 +5531,6 @@ snapshots: is-number@7.0.0: {} - is-object@0.1.2: {} - is-plain-obj@1.1.0: {} is-plain-obj@2.1.0: {} @@ -5623,6 +5549,8 @@ snapshots: is-stream@1.1.0: {} + is-stream@3.0.0: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 @@ -5637,17 +5565,9 @@ snapshots: is-word-character@1.0.4: {} - is@0.2.7: {} - - isarray@0.0.1: {} - - isarray@1.0.0: {} - - isbuffer@0.0.0: {} - isexe@2.0.0: {} - jackspeak@2.3.6: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -5689,68 +5609,8 @@ snapshots: kind-of@6.0.3: {} - kleur@4.1.4: {} - kleur@4.1.5: {} - level-blobs@0.1.7: - dependencies: - level-peek: 1.0.6 - once: 1.4.0 - readable-stream: 1.1.14 - - level-filesystem@1.2.0: - dependencies: - concat-stream: 1.6.2 - errno: 0.1.7 - fwd-stream: 1.0.4 - level-blobs: 0.1.7 - level-peek: 1.0.6 - level-sublevel: 5.2.3 - octal: 1.0.0 - once: 1.4.0 - xtend: 2.2.0 - - level-fix-range@1.0.2: {} - - level-fix-range@2.0.0: - dependencies: - clone: 0.1.19 - - level-hooks@4.5.0: - dependencies: - string-range: 1.2.2 - - level-js@2.2.4: - dependencies: - abstract-leveldown: 0.12.4 - idb-wrapper: 1.7.2 - isbuffer: 0.0.0 - ltgt: 2.2.1 - typedarray-to-buffer: 1.0.4 - xtend: 2.1.2 - - level-peek@1.0.6: - dependencies: - level-fix-range: 1.0.2 - - level-sublevel@5.2.3: - dependencies: - level-fix-range: 2.0.0 - level-hooks: 4.5.0 - string-range: 1.2.2 - xtend: 2.0.6 - - levelup@0.18.6: - dependencies: - bl: 0.8.2 - deferred-leveldown: 0.2.0 - errno: 0.1.7 - prr: 0.0.0 - readable-stream: 1.0.34 - semver: 2.3.2 - xtend: 3.0.0 - leven@3.1.0: {} levenary@1.1.1: @@ -5793,7 +5653,11 @@ snapshots: dependencies: js-tokens: 4.0.0 - lru-cache@10.1.0: {} + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 + + lru-cache@10.4.3: {} lru-cache@4.1.5: dependencies: @@ -5804,8 +5668,6 @@ snapshots: dependencies: yallist: 3.1.1 - ltgt@2.2.1: {} - magic-string@0.22.5: dependencies: vlq: 0.2.3 @@ -5818,24 +5680,20 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.5: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - make-error@1.3.6: {} - map-obj@1.0.1: {} map-obj@4.2.1: {} markdown-escapes@1.0.4: {} - md5.js@1.3.5: - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - mdast-util-definitions@2.0.1: dependencies: unist-util-visit: 2.0.3 @@ -5891,28 +5749,17 @@ snapshots: braces: 3.0.2 picomatch: 2.2.3 - miller-rabin@4.0.1: - dependencies: - bn.js: 4.11.9 - brorand: 1.1.0 - mime@2.4.6: {} - min-indent@1.0.1: {} - - minimalistic-assert@1.0.1: {} + mimic-fn@4.0.0: {} - minimalistic-crypto-utils@1.0.1: {} + min-indent@1.0.1: {} minimatch@3.0.4: dependencies: brace-expansion: 1.1.11 - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - minimatch@9.0.3: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -5924,7 +5771,7 @@ snapshots: minimist@1.2.5: {} - minipass@7.0.4: {} + minipass@7.1.2: {} mixme@0.5.1: {} @@ -5977,18 +5824,14 @@ snapshots: dependencies: path-key: 2.0.1 + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + object-assign@4.1.1: {} object-inspect@1.8.0: {} - object-keys@0.2.0: - dependencies: - foreach: 2.0.5 - indexof: 0.0.1 - is: 0.2.7 - - object-keys@0.4.0: {} - object-keys@1.1.1: {} object.assign@4.1.0: @@ -5998,12 +5841,14 @@ snapshots: has-symbols: 1.0.1 object-keys: 1.1.1 - octal@1.0.0: {} - once@1.4.0: dependencies: wrappy: 1.0.2 + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + onigasm@2.2.5: dependencies: lru-cache: 5.1.1 @@ -6038,13 +5883,7 @@ snapshots: p-try@2.2.0: {} - parse-asn1@5.1.6: - dependencies: - asn1.js: 5.4.1 - browserify-aes: 1.2.0 - evp_bytestokey: 1.0.3 - pbkdf2: 3.1.1 - safe-buffer: 5.2.1 + package-json-from-dist@1.0.0: {} parse-entities@1.2.2: dependencies: @@ -6090,14 +5929,16 @@ snapshots: path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.6: {} path-parse@1.0.7: {} - path-scurry@1.10.1: + path-scurry@1.11.1: dependencies: - lru-cache: 10.1.0 - minipass: 7.0.4 + lru-cache: 10.4.3 + minipass: 7.1.2 path-type@3.0.0: dependencies: @@ -6105,13 +5946,9 @@ snapshots: path-type@4.0.0: {} - pbkdf2@3.1.1: - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 + pathe@1.1.2: {} + + pathval@2.0.0: {} periscopic@3.1.0: dependencies: @@ -6170,27 +6007,12 @@ snapshots: process-es6@0.11.6: {} - process-nextick-args@2.0.1: {} - property-information@5.5.0: dependencies: xtend: 4.0.2 - prr@0.0.0: {} - - prr@1.0.1: {} - pseudomap@1.0.2: {} - public-encrypt@4.0.3: - dependencies: - bn.js: 4.11.9 - browserify-rsa: 4.0.1 - create-hash: 1.2.0 - parse-asn1: 5.1.6 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - queue-microtask@1.2.3: {} quick-lru@4.0.1: {} @@ -6199,11 +6021,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - randomfill@1.0.4: - dependencies: - randombytes: 2.1.0 - safe-buffer: 5.2.1 - read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 @@ -6230,36 +6047,6 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 - readable-stream@1.0.34: - dependencies: - core-util-is: 1.0.2 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - - readable-stream@1.1.14: - dependencies: - core-util-is: 1.0.2 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - - readable-stream@2.3.7: - dependencies: - core-util-is: 1.0.2 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - readable-stream@3.6.0: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -6429,29 +6216,13 @@ snapshots: reusify@1.0.4: {} - ripemd160@2.0.2: - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - - rollup-plugin-dts@3.0.1(rollup@2.79.1)(typescript@4.2.4): + rollup-plugin-dts@6.1.1(rollup@4.20.0)(typescript@4.2.4): dependencies: - magic-string: 0.25.7 - rollup: 2.79.1 + magic-string: 0.30.11 + rollup: 4.20.0 typescript: 4.2.4 optionalDependencies: - '@babel/code-frame': 7.12.13 - - rollup-plugin-json@4.0.0: - dependencies: - rollup-pluginutils: 2.8.2 - - rollup-plugin-node-builtins@2.1.2: - dependencies: - browserify-fs: 1.0.0 - buffer-es6: 4.9.3 - crypto-browserify: 3.12.0 - process-es6: 0.11.6 + '@babel/code-frame': 7.24.7 rollup-plugin-node-globals@1.4.0: dependencies: @@ -6462,10 +6233,10 @@ snapshots: process-es6: 0.11.6 rollup-pluginutils: 2.8.2 - rollup-plugin-svelte@5.2.3(rollup@2.79.1)(svelte@4.0.0): + rollup-plugin-svelte@5.2.3(rollup@4.20.0)(svelte@4.0.0): dependencies: require-relative: 0.8.7 - rollup: 2.79.1 + rollup: 4.20.0 rollup-pluginutils: 2.8.2 sourcemap-codec: 1.4.8 svelte: 4.0.0 @@ -6493,6 +6264,28 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + rollup@4.20.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.20.0 + '@rollup/rollup-android-arm64': 4.20.0 + '@rollup/rollup-darwin-arm64': 4.20.0 + '@rollup/rollup-darwin-x64': 4.20.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 + '@rollup/rollup-linux-arm-musleabihf': 4.20.0 + '@rollup/rollup-linux-arm64-gnu': 4.20.0 + '@rollup/rollup-linux-arm64-musl': 4.20.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 + '@rollup/rollup-linux-riscv64-gnu': 4.20.0 + '@rollup/rollup-linux-s390x-gnu': 4.20.0 + '@rollup/rollup-linux-x64-gnu': 4.20.0 + '@rollup/rollup-linux-x64-musl': 4.20.0 + '@rollup/rollup-win32-arm64-msvc': 4.20.0 + '@rollup/rollup-win32-ia32-msvc': 4.20.0 + '@rollup/rollup-win32-x64-msvc': 4.20.0 + fsevents: 2.3.3 + rollup@4.9.6: dependencies: '@types/estree': 1.0.5 @@ -6516,10 +6309,6 @@ snapshots: dependencies: queue-microtask: 1.2.3 - sade@1.7.4: - dependencies: - mri: 1.1.6 - sade@1.8.1: dependencies: mri: 1.1.6 @@ -6533,8 +6322,6 @@ snapshots: select@1.1.2: optional: true - semver@2.3.2: {} - semver@5.7.1: {} semver@7.0.0: {} @@ -6547,11 +6334,6 @@ snapshots: set-cookie-parser@2.6.0: {} - sha.js@2.4.11: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 @@ -6571,6 +6353,8 @@ snapshots: onigasm: 2.2.5 vscode-textmate: 5.2.0 + siginfo@2.0.0: {} + signal-exit@3.0.3: {} signal-exit@4.1.0: {} @@ -6593,11 +6377,6 @@ snapshots: source-map-js@1.0.2: {} - source-map-support@0.5.19: - dependencies: - buffer-from: 1.1.1 - source-map: 0.6.1 - source-map-support@0.5.20: dependencies: buffer-from: 1.1.1 @@ -6634,14 +6413,16 @@ snapshots: sprintf-js@1.0.3: {} + stackback@0.0.2: {} + state-toggle@1.0.3: {} + std-env@3.7.0: {} + stream-transform@2.1.0: dependencies: mixme: 0.5.1 - string-range@1.2.2: {} - string-width@2.1.1: dependencies: is-fullwidth-code-point: 2.0.0 @@ -6674,16 +6455,6 @@ snapshots: define-properties: 1.1.3 es-abstract: 1.17.6 - string_decoder@0.10.31: {} - - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - stringify-entities@2.0.0: dependencies: character-entities-html4: 1.1.4 @@ -6712,15 +6483,17 @@ snapshots: strip-eof@1.0.0: {} + strip-final-newline@3.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.10 + glob: 10.4.5 lines-and-columns: 1.1.6 mz: 2.7.0 pirates: 4.0.1 @@ -6806,6 +6579,14 @@ snapshots: globalyzer: 0.1.0 globrex: 0.1.2 + tinybench@2.9.0: {} + + tinypool@1.0.0: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.0: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -6818,8 +6599,6 @@ snapshots: toml@3.0.0: {} - totalist@2.0.0: {} - totalist@3.0.1: {} trim-newlines@3.0.0: {} @@ -6832,16 +6611,6 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@9.1.1(typescript@4.2.4): - dependencies: - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - source-map-support: 0.5.19 - typescript: 4.2.4 - yn: 3.1.1 - tslib@2.3.1: {} tty-table@2.8.13: @@ -6859,10 +6628,6 @@ snapshots: type-fest@0.8.1: {} - typedarray-to-buffer@1.0.4: {} - - typedarray@0.0.6: {} - typeface-catamaran@0.0.72: {} typeface-roboto@0.0.75: {} @@ -6951,16 +6716,6 @@ snapshots: universalify@0.1.2: {} - util-deprecate@1.0.2: {} - - uvu@0.5.1: - dependencies: - dequal: 2.0.2 - diff: 5.0.0 - kleur: 4.1.4 - sade: 1.7.4 - totalist: 2.0.0 - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.1.1 @@ -6981,18 +6736,68 @@ snapshots: unist-util-stringify-position: 2.0.3 vfile-message: 2.0.4 - vite@5.0.12(@types/node@14.14.44): + vite-node@2.0.5(@types/node@14.14.44)(terser@5.9.0): + dependencies: + cac: 6.7.14 + debug: 4.3.6 + pathe: 1.1.2 + tinyrainbow: 1.2.0 + vite: 5.0.12(@types/node@14.14.44)(terser@5.9.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vite@5.0.12(@types/node@14.14.44)(terser@5.9.0): dependencies: - '@types/node': 14.14.44 esbuild: 0.19.11 postcss: 8.4.33 rollup: 4.9.6 optionalDependencies: + '@types/node': 14.14.44 fsevents: 2.3.3 + terser: 5.9.0 - vitefu@0.2.5(vite@5.0.12): - dependencies: - vite: 5.0.12(@types/node@14.14.44) + vitefu@0.2.5(vite@5.0.12(@types/node@14.14.44)(terser@5.9.0)): + optionalDependencies: + vite: 5.0.12(@types/node@14.14.44)(terser@5.9.0) + + vitest@2.0.5(@types/node@14.14.44)(terser@5.9.0): + dependencies: + '@ampproject/remapping': 2.3.0 + '@vitest/expect': 2.0.5 + '@vitest/pretty-format': 2.0.5 + '@vitest/runner': 2.0.5 + '@vitest/snapshot': 2.0.5 + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.1 + debug: 4.3.6 + execa: 8.0.1 + magic-string: 0.30.11 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinypool: 1.0.0 + tinyrainbow: 1.2.0 + vite: 5.0.12(@types/node@14.14.44)(terser@5.9.0) + vite-node: 2.0.5(@types/node@14.14.44)(terser@5.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 14.14.44 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser vlq@0.2.3: {} @@ -7021,6 +6826,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + widest-line@2.0.1: dependencies: string-width: 2.1.1 @@ -7045,19 +6855,6 @@ snapshots: wrappy@1.0.2: {} - xtend@2.0.6: - dependencies: - is-object: 0.1.2 - object-keys: 0.2.0 - - xtend@2.1.2: - dependencies: - object-keys: 0.4.0 - - xtend@2.2.0: {} - - xtend@3.0.0: {} - xtend@4.0.2: {} y18n@4.0.3: {} @@ -7085,8 +6882,6 @@ snapshots: y18n: 4.0.3 yargs-parser: 18.1.3 - yn@3.1.1: {} - yocto-queue@0.1.0: {} yootils@0.0.15: {}