From dc565fe6a5554eb8bf51803ccda218365d341293 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Sat, 23 Sep 2023 23:02:39 +0800 Subject: [PATCH 01/21] chore: release v0.0.1 (#14) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8a5101c..5b736a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unplugin-vue-source", - "version": "0.0.1-beta.1", + "version": "0.0.1", "packageManager": "pnpm@8.6.8", "description": "Add a __source prop to all Elements", "author": "zjxxxxxxxxx <954270063@qq.com>", @@ -103,4 +103,4 @@ "typescript": "^5.2.2", "vitest": "^0.34.5" } -} \ No newline at end of file +} From 40637ad5407d9f4872e528e1648c3a4c12b882ab Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Tue, 21 Nov 2023 20:29:05 +0800 Subject: [PATCH 02/21] chore: update playgrounds (#15) --- README.md | 93 +++++-------------------------------------------------- 1 file changed, 7 insertions(+), 86 deletions(-) diff --git a/README.md b/README.md index 88967aa..c0c4d67 100644 --- a/README.md +++ b/README.md @@ -221,89 +221,10 @@ VueSource({ }); ``` -## Playground - - - - - - - - - - - - - - - - - - - - - -
Rollup + Vue2 - - Source - - - - CodeSandbox - - - - StackBlitz - -
Vite + Vue3 - - Source - - - - CodeSandbox - - - - StackBlitz - -
Webpack + Vue3 - - Source - - - - CodeSandbox - - - - StackBlitz - -
+## Playgrounds + +| Source code | Online trial | +| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | +| [Rollup + Vue2](https://github.com/zjxxxxxxxxx/unplugin-vue-source/tree/main/examples/rollup) | [StackBlitz](https://stackblitz.com/github/zjxxxxxxxxx/unplugin-vue-source/tree/main/examples/rollup) | +| [Vite + Vue3](https://github.com/zjxxxxxxxxx/unplugin-vue-source/tree/main/examples/vite) | [StackBlitz](https://stackblitz.com/github/zjxxxxxxxxx/unplugin-vue-source/tree/main/examples/vite) | +| [Webpack + Vue3](https://github.com/zjxxxxxxxxx/unplugin-vue-source/tree/main/examples/webpack) | [StackBlitz](https://stackblitz.com/github/zjxxxxxxxxx/unplugin-vue-source/tree/main/examples/webpack) | From 01c438da1d02b0af0139f7510c5f18abd6385e0e Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Tue, 28 Nov 2023 19:12:51 +0800 Subject: [PATCH 03/21] feat: Customize `include` and `exclude` options (#16) --- README.md | 26 +++++++++++++++++------- package.json | 1 + pnpm-lock.yaml | 18 ++++++++++++++++- src/core/filter_ID.ts | 26 ------------------------ src/core/index.ts | 42 +++++++++++++++++++++++++++++---------- src/core/parse_ID.ts | 20 ++++++++----------- src/core/transform.ts | 14 +++++-------- src/core/transform_JSX.ts | 1 + src/core/transform_SFC.ts | 8 ++++---- src/types.ts | 7 +++++++ 10 files changed, 94 insertions(+), 69 deletions(-) delete mode 100644 src/core/filter_ID.ts diff --git a/README.md b/README.md index c0c4d67..ef0154b 100644 --- a/README.md +++ b/README.md @@ -212,13 +212,25 @@ build({ The following show the default values of the configuration ```ts -VueSource({ - // source root path - root: process.cwd(), - - // generate sourceMap - sourceMap: false, -}); +interface Options { + /** + * source root path + * + * @default process.cwd() + */ + root?: string; + /** + * generate sourceMap + * + * @default false + */ + sourceMap?: boolean; + + /** @default '**\/*.{vue,jsx.tsx}' */ + include?: string | RegExp | (string | RegExp)[]; + /** @default 'node_modules/**' */ + exclude?: string | RegExp | (string | RegExp)[]; +} ``` ## Playgrounds diff --git a/package.json b/package.json index 5b736a5..8ef9fd3 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "@babel/parser": "^7.22.16", "@babel/plugin-syntax-jsx": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5", + "@rollup/pluginutils": "^5.0.5", "@vue/compiler-dom": "^3.3.4", "magic-string": "^0.30.3", "unplugin": "^1.4.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8440705..ea7ee5e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@babel/plugin-syntax-typescript': specifier: ^7.22.5 version: 7.22.5(@babel/core@7.22.17) + '@rollup/pluginutils': + specifier: ^5.0.5 + version: 5.0.5 '@vue/compiler-dom': specifier: ^3.3.4 version: 3.3.4 @@ -2783,6 +2786,20 @@ packages: rollup: 3.29.1 dev: true + /@rollup/pluginutils@5.0.5: + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.1 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: false + /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -2904,7 +2921,6 @@ packages: /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - dev: true /@types/express-serve-static-core@4.17.36: resolution: {integrity: sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==} diff --git a/src/core/filter_ID.ts b/src/core/filter_ID.ts deleted file mode 100644 index 3f7bcaf..0000000 --- a/src/core/filter_ID.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { TRACE_ID } from './constants'; -import { parse_ID } from './parse_ID'; - -export function filter_ID(id: string) { - const parsed = parse_ID(id); - - if (parsed.isJsx) { - return true; - } - - if (parsed.isSfc) { - const { query } = parsed; - // vue cli | vue-loader - if (query.type === 'template') { - return true; - } - return ( - // vite-plugin-vue - !query[TRACE_ID] && - // rollup-plugin-vue - !query['rollup-plugin-vue'] - ); - } - - return false; -} diff --git a/src/core/index.ts b/src/core/index.ts index 9ed92fc..2788708 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -1,8 +1,9 @@ -import type { UnpluginFactory } from 'unplugin'; -import { createUnplugin } from 'unplugin'; -import type { Options } from '../types'; -import { filter_ID } from './filter_ID'; +import { type UnpluginFactory, createUnplugin } from 'unplugin'; +import { createFilter } from '@rollup/pluginutils'; +import { type ResolvedOptions, type Options } from '../types'; +import { TRACE_ID } from './constants'; import { transform } from './transform'; +import { parse_ID } from './parse_ID'; export const unpluginFactory: UnpluginFactory = (options = {}) => { if (process.env.NODE_ENV !== 'development') { @@ -12,23 +13,44 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { } const opts = resolveOptions(options); + const filter = createFilter(opts.include, opts.exclude); return { name: 'unplugin-vue-source', enforce: 'pre', - transformInclude: filter_ID, + transformInclude(id) { + if (filter(id)) { + const parsed = parse_ID(id); + + if (parsed.isSfc) { + const { query } = parsed; + // vue cli | vue-loader + if (query.type === 'template') { + return true; + } + return ( + // vite-plugin-vue + !query[TRACE_ID] && + // rollup-plugin-vue + !query['rollup-plugin-vue'] + ); + } + + return true; + } + }, transform(code, id) { return transform(code, id, opts); }, }; }; -function resolveOptions(options: Options): Required { - const { root = process.cwd(), sourceMap = false } = options; - +function resolveOptions(opts: Options): ResolvedOptions { return { - root, - sourceMap, + root: opts.root ?? process.cwd(), + sourceMap: opts.sourceMap ?? false, + include: opts.include ?? '**/*.{vue,jsx.tsx}', + exclude: opts.exclude ?? 'node_modules/**', }; } diff --git a/src/core/parse_ID.ts b/src/core/parse_ID.ts index 6ba18be..bbf2d64 100644 --- a/src/core/parse_ID.ts +++ b/src/core/parse_ID.ts @@ -2,29 +2,25 @@ import { extname } from 'path'; import { TRACE_ID } from './constants'; export interface VueQuery extends Record { - vue?: boolean; type?: 'script' | 'template' | 'style' | 'custom'; [TRACE_ID]?: string; } export function parse_ID(id: string, root = '') { const [file, rawQuery] = id.split('?', 2); - const ext = extname(file).slice(1); - const isSfc = ext === 'vue'; - const isTsx = ext === 'tsx'; - const isJsx = isTsx || ext === 'jsx'; - const query = Object.fromEntries(new URLSearchParams(rawQuery)) as VueQuery; - if (query.vue != null) { - query.vue = true; + if (ext === 'vue') { + return { + file: file.replace(root, ''), + isSfc: true, + query: Object.fromEntries(new URLSearchParams(rawQuery)) as VueQuery, + }; } return { file: file.replace(root, ''), - isSfc, - isTsx, - isJsx, - query, + isJsx: true, + isTsx: ext.includes('ts'), }; } diff --git a/src/core/transform.ts b/src/core/transform.ts index dc5c38b..f1cc962 100644 --- a/src/core/transform.ts +++ b/src/core/transform.ts @@ -1,24 +1,20 @@ -import type { Position } from '@vue/compiler-dom'; +import { type Position } from '@vue/compiler-dom'; import MagicString from 'magic-string'; -import type { Options } from '../types'; +import { type ResolvedOptions } from '../types'; import { TRACE_ID } from './constants'; import { parse_ID } from './parse_ID'; import { transform_SFC } from './transform_SFC'; import { transform_JSX } from './transform_JSX'; -export function transform( - code: string, - id: string, - options: Required, -) { +export function transform(code: string, id: string, options: ResolvedOptions) { const { root, sourceMap } = options; const s = new MagicString(code); - const parsed = parse_ID(id, root); + if (parsed.isSfc) { transform_SFC(code, replace); - } else if (parsed.isJsx) { + } else { transform_JSX(code, replace, parsed); } diff --git a/src/core/transform_JSX.ts b/src/core/transform_JSX.ts index a5d03dc..bbbba1e 100644 --- a/src/core/transform_JSX.ts +++ b/src/core/transform_JSX.ts @@ -35,6 +35,7 @@ export function transform_JSX( const { start } = node.loc!; const name = getJSXElementName(nameNode); const offset = start.index + startIndex + name.length + 1; + cb({ ...start, // babel starts at 0, so we need to add 1 diff --git a/src/core/transform_SFC.ts b/src/core/transform_SFC.ts index f9fdbd5..4518657 100644 --- a/src/core/transform_SFC.ts +++ b/src/core/transform_SFC.ts @@ -20,10 +20,8 @@ export function transform_SFC(code: string, cb: (pos: Position) => void) { ) { const { start } = node.loc; const offset = start.offset + node.tag.length + 1; - cb({ - ...start, - offset, - }); + + cb({ ...start, offset }); } }, ], @@ -49,6 +47,8 @@ function resolveJsxOptions(ast: RootNode) { ) as AttributeNode; if (!langProp) return; + // + // const lang = langProp.value?.content; const isTsx = lang === 'tsx'; const isJsx = isTsx || lang === 'jsx'; diff --git a/src/types.ts b/src/types.ts index f749929..c85d956 100644 --- a/src/types.ts +++ b/src/types.ts @@ -11,4 +11,11 @@ export interface Options { * @default false */ sourceMap?: boolean; + + /** @default '**\/*.{vue,jsx.tsx}' */ + include?: string | RegExp | (string | RegExp)[]; + /** @default 'node_modules/**' */ + exclude?: string | RegExp | (string | RegExp)[]; } + +export type ResolvedOptions = Required; From 6168d9c4997b0c1a32b5565e7c2a20ee9ebddc63 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Tue, 28 Nov 2023 19:46:35 +0800 Subject: [PATCH 04/21] fix: webpack filter error (#17) --- README.md | 2 +- src/core/index.ts | 19 ++++++++----------- src/types.ts | 2 +- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index ef0154b..4bbefd4 100644 --- a/README.md +++ b/README.md @@ -226,7 +226,7 @@ interface Options { */ sourceMap?: boolean; - /** @default '**\/*.{vue,jsx.tsx}' */ + /** @default '**\/*.{vue,jsx,tsx}' */ include?: string | RegExp | (string | RegExp)[]; /** @default 'node_modules/**' */ exclude?: string | RegExp | (string | RegExp)[]; diff --git a/src/core/index.ts b/src/core/index.ts index 2788708..d6727a0 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -2,8 +2,8 @@ import { type UnpluginFactory, createUnplugin } from 'unplugin'; import { createFilter } from '@rollup/pluginutils'; import { type ResolvedOptions, type Options } from '../types'; import { TRACE_ID } from './constants'; -import { transform } from './transform'; import { parse_ID } from './parse_ID'; +import { transform } from './transform'; export const unpluginFactory: UnpluginFactory = (options = {}) => { if (process.env.NODE_ENV !== 'development') { @@ -18,16 +18,12 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { return { name: 'unplugin-vue-source', enforce: 'pre', + transformInclude(id) { - if (filter(id)) { - const parsed = parse_ID(id); - - if (parsed.isSfc) { - const { query } = parsed; - // vue cli | vue-loader - if (query.type === 'template') { - return true; - } + const { file, isSfc, query } = parse_ID(id); + + if (filter(file)) { + if (isSfc && query.type !== 'template') { return ( // vite-plugin-vue !query[TRACE_ID] && @@ -36,6 +32,7 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { ); } + // vue cli | vue-loader | tsx | jsx return true; } }, @@ -49,7 +46,7 @@ function resolveOptions(opts: Options): ResolvedOptions { return { root: opts.root ?? process.cwd(), sourceMap: opts.sourceMap ?? false, - include: opts.include ?? '**/*.{vue,jsx.tsx}', + include: opts.include ?? '**/*.{vue,jsx,tsx}', exclude: opts.exclude ?? 'node_modules/**', }; } diff --git a/src/types.ts b/src/types.ts index c85d956..5371bc9 100644 --- a/src/types.ts +++ b/src/types.ts @@ -12,7 +12,7 @@ export interface Options { */ sourceMap?: boolean; - /** @default '**\/*.{vue,jsx.tsx}' */ + /** @default '**\/*.{vue,jsx,tsx}' */ include?: string | RegExp | (string | RegExp)[]; /** @default 'node_modules/**' */ exclude?: string | RegExp | (string | RegExp)[]; From 60f75236ced0e89ded6bf03172ad66a91a5eda71 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:22:55 +0800 Subject: [PATCH 05/21] chore: release v0.0.2 (#18) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ef9fd3..12eea3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unplugin-vue-source", - "version": "0.0.1", + "version": "0.0.2", "packageManager": "pnpm@8.6.8", "description": "Add a __source prop to all Elements", "author": "zjxxxxxxxxx <954270063@qq.com>", From 24f53db28e531116d933c78954dc2c5e58d6483a Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Sat, 9 Dec 2023 10:30:49 +0800 Subject: [PATCH 06/21] fix: `process.env.NODE_ENV` is undefined (#19) --- src/core/index.ts | 3 ++- src/core/isDev.ts | 3 +++ src/vue.ts | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 src/core/isDev.ts diff --git a/src/core/index.ts b/src/core/index.ts index d6727a0..04969fc 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -2,11 +2,12 @@ import { type UnpluginFactory, createUnplugin } from 'unplugin'; import { createFilter } from '@rollup/pluginutils'; import { type ResolvedOptions, type Options } from '../types'; import { TRACE_ID } from './constants'; +import { isDev } from './isDev'; import { parse_ID } from './parse_ID'; import { transform } from './transform'; export const unpluginFactory: UnpluginFactory = (options = {}) => { - if (process.env.NODE_ENV !== 'development') { + if (!isDev()) { return { name: 'unplugin-vue-source', }; diff --git a/src/core/isDev.ts b/src/core/isDev.ts new file mode 100644 index 0000000..c56b541 --- /dev/null +++ b/src/core/isDev.ts @@ -0,0 +1,3 @@ +export function isDev() { + return !(process.env.NODE_ENV && process.env.NODE_ENV !== 'development'); +} diff --git a/src/vue.ts b/src/vue.ts index 4f2baa4..660a315 100644 --- a/src/vue.ts +++ b/src/vue.ts @@ -1,7 +1,8 @@ import { TRACE_ID } from './core/constants'; +import { isDev } from './core/isDev'; export default { install(app: any) { - if (process.env.NODE_ENV === 'development') { + if (isDev()) { app.mixin({ props: { [TRACE_ID]: String, From ce946cab65496582b68ec08541d7cd82e7aa4b79 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Sat, 9 Dec 2023 10:34:08 +0800 Subject: [PATCH 07/21] fix: Filter files with `raw` (#20) --- src/core/index.ts | 2 +- src/core/parse_ID.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/index.ts b/src/core/index.ts index 04969fc..379fecb 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -23,7 +23,7 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { transformInclude(id) { const { file, isSfc, query } = parse_ID(id); - if (filter(file)) { + if (query.raw == null && filter(file)) { if (isSfc && query.type !== 'template') { return ( // vite-plugin-vue diff --git a/src/core/parse_ID.ts b/src/core/parse_ID.ts index bbf2d64..fc5039c 100644 --- a/src/core/parse_ID.ts +++ b/src/core/parse_ID.ts @@ -3,18 +3,20 @@ import { TRACE_ID } from './constants'; export interface VueQuery extends Record { type?: 'script' | 'template' | 'style' | 'custom'; + raw?: string; [TRACE_ID]?: string; } export function parse_ID(id: string, root = '') { const [file, rawQuery] = id.split('?', 2); const ext = extname(file).slice(1); + const query = Object.fromEntries(new URLSearchParams(rawQuery)) as VueQuery; if (ext === 'vue') { return { file: file.replace(root, ''), isSfc: true, - query: Object.fromEntries(new URLSearchParams(rawQuery)) as VueQuery, + query, }; } @@ -22,5 +24,6 @@ export function parse_ID(id: string, root = '') { file: file.replace(root, ''), isJsx: true, isTsx: ext.includes('ts'), + query, }; } From 13d1ee0056fc583ea883cc27a1a5e584b952de20 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:11:11 +0800 Subject: [PATCH 08/21] chore: release v0.0.3 (#21) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 12eea3f..53c9825 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unplugin-vue-source", - "version": "0.0.2", + "version": "0.0.3", "packageManager": "pnpm@8.6.8", "description": "Add a __source prop to all Elements", "author": "zjxxxxxxxxx <954270063@qq.com>", From d117d0fb3e8b3249b13fcfa59afbc8f81fe1830c Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Mon, 11 Dec 2023 19:09:01 +0800 Subject: [PATCH 09/21] feat: Add option `babelParserPlugins` (#22) --- README.md | 17 +++++++---- examples/rollup/src/components/Github.vue | 16 +++++++++++ examples/rollup/src/components/HelloWorld.tsx | 8 ++---- examples/vite/src/components/Github.vue | 16 +++++++++++ examples/vite/src/components/HelloWorld.tsx | 9 ++---- examples/vite/vite.config.ts | 3 ++ examples/webpack/src/components/Github.vue | 16 +++++++++++ .../webpack/src/components/HelloWorld.tsx | 9 ++---- examples/webpack/vue.config.js | 9 ++++-- src/core/index.ts | 23 ++++----------- src/core/parse_ID.ts | 12 ++------ src/core/transform.ts | 12 +++++--- src/core/transform_JSX.ts | 11 +++++--- src/core/transform_SFC.ts | 28 +++++++++++-------- src/types.ts | 17 ++++++++--- test/fixtures.test.ts | 10 +++++-- test/fixtures/vue-skip/input.vue | 3 ++ test/fixtures/vue-skip/options.ts | 4 +++ test/fixtures/vue-skip/output.vue | 3 ++ 19 files changed, 146 insertions(+), 80 deletions(-) create mode 100644 examples/rollup/src/components/Github.vue create mode 100644 examples/vite/src/components/Github.vue create mode 100644 examples/webpack/src/components/Github.vue create mode 100644 test/fixtures/vue-skip/input.vue create mode 100644 test/fixtures/vue-skip/options.ts create mode 100644 test/fixtures/vue-skip/output.vue diff --git a/README.md b/README.md index 4bbefd4..6fe6fc9 100644 --- a/README.md +++ b/README.md @@ -212,7 +212,12 @@ build({ The following show the default values of the configuration ```ts -interface Options { +export interface Options { + /** @default '**\/*.{vue,jsx,tsx}' */ + include?: string | RegExp | (string | RegExp)[]; + /** @default 'node_modules/**' */ + exclude?: string | RegExp | (string | RegExp)[]; + /** * source root path * @@ -226,10 +231,12 @@ interface Options { */ sourceMap?: boolean; - /** @default '**\/*.{vue,jsx,tsx}' */ - include?: string | RegExp | (string | RegExp)[]; - /** @default 'node_modules/**' */ - exclude?: string | RegExp | (string | RegExp)[]; + /** + * Array containing the plugins that you want to enable. + * + * @default ['jsx', 'typescript'] + */ + babelParserPlugins?: ParserPlugin[]; } ``` diff --git a/examples/rollup/src/components/Github.vue b/examples/rollup/src/components/Github.vue new file mode 100644 index 0000000..b7787c9 --- /dev/null +++ b/examples/rollup/src/components/Github.vue @@ -0,0 +1,16 @@ + diff --git a/examples/rollup/src/components/HelloWorld.tsx b/examples/rollup/src/components/HelloWorld.tsx index 9902618..2ee292d 100644 --- a/examples/rollup/src/components/HelloWorld.tsx +++ b/examples/rollup/src/components/HelloWorld.tsx @@ -1,4 +1,5 @@ import { defineComponent } from 'vue'; +import Github from './Github.vue'; export default defineComponent({ props: { msg: String }, @@ -10,12 +11,7 @@ export default defineComponent({ Inspect the element to see the __source

- - Github - +

); diff --git a/examples/vite/src/components/Github.vue b/examples/vite/src/components/Github.vue new file mode 100644 index 0000000..b7787c9 --- /dev/null +++ b/examples/vite/src/components/Github.vue @@ -0,0 +1,16 @@ + diff --git a/examples/vite/src/components/HelloWorld.tsx b/examples/vite/src/components/HelloWorld.tsx index 5f6c5e6..b09dbcc 100644 --- a/examples/vite/src/components/HelloWorld.tsx +++ b/examples/vite/src/components/HelloWorld.tsx @@ -1,3 +1,5 @@ +import Github from './Github.vue'; + export default function HelloWorld({ msg }: { msg: string }) { return ( <> @@ -6,12 +8,7 @@ export default function HelloWorld({ msg }: { msg: string }) { Inspect the element to see the __source

- - Github - +

); diff --git a/examples/vite/vite.config.ts b/examples/vite/vite.config.ts index 106ea9f..79778ce 100644 --- a/examples/vite/vite.config.ts +++ b/examples/vite/vite.config.ts @@ -11,4 +11,7 @@ export default defineConfig({ jsxFragment: 'Fragment', jsxInject: "import { h, Fragment } from 'vue';", }, + server: { + port: 3000, + }, }); diff --git a/examples/webpack/src/components/Github.vue b/examples/webpack/src/components/Github.vue new file mode 100644 index 0000000..b7787c9 --- /dev/null +++ b/examples/webpack/src/components/Github.vue @@ -0,0 +1,16 @@ + diff --git a/examples/webpack/src/components/HelloWorld.tsx b/examples/webpack/src/components/HelloWorld.tsx index 5f6c5e6..b09dbcc 100644 --- a/examples/webpack/src/components/HelloWorld.tsx +++ b/examples/webpack/src/components/HelloWorld.tsx @@ -1,3 +1,5 @@ +import Github from './Github.vue'; + export default function HelloWorld({ msg }: { msg: string }) { return ( <> @@ -6,12 +8,7 @@ export default function HelloWorld({ msg }: { msg: string }) { Inspect the element to see the __source

- - Github - +

); diff --git a/examples/webpack/vue.config.js b/examples/webpack/vue.config.js index 108b8ab..3d2c4a3 100644 --- a/examples/webpack/vue.config.js +++ b/examples/webpack/vue.config.js @@ -1,9 +1,12 @@ -const { defineConfig } = require("@vue/cli-service"); +const { defineConfig } = require('@vue/cli-service'); module.exports = defineConfig({ configureWebpack: { plugins: [ - require("unplugin-vue-source/webpack")(), - require("unplugin-vue-jsx/webpack")(), + require('unplugin-vue-source/webpack')(), + require('unplugin-vue-jsx/webpack')(), ], }, + devServer: { + port: 3000, + }, }); diff --git a/src/core/index.ts b/src/core/index.ts index 379fecb..648a0fc 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -1,7 +1,6 @@ import { type UnpluginFactory, createUnplugin } from 'unplugin'; import { createFilter } from '@rollup/pluginutils'; import { type ResolvedOptions, type Options } from '../types'; -import { TRACE_ID } from './constants'; import { isDev } from './isDev'; import { parse_ID } from './parse_ID'; import { transform } from './transform'; @@ -21,21 +20,8 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { enforce: 'pre', transformInclude(id) { - const { file, isSfc, query } = parse_ID(id); - - if (query.raw == null && filter(file)) { - if (isSfc && query.type !== 'template') { - return ( - // vite-plugin-vue - !query[TRACE_ID] && - // rollup-plugin-vue - !query['rollup-plugin-vue'] - ); - } - - // vue cli | vue-loader | tsx | jsx - return true; - } + const { file, query } = parse_ID(id); + return query.raw == null && filter(file); }, transform(code, id) { return transform(code, id, opts); @@ -45,10 +31,11 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { function resolveOptions(opts: Options): ResolvedOptions { return { - root: opts.root ?? process.cwd(), - sourceMap: opts.sourceMap ?? false, include: opts.include ?? '**/*.{vue,jsx,tsx}', exclude: opts.exclude ?? 'node_modules/**', + root: opts.root ?? process.cwd(), + sourceMap: opts.sourceMap ?? false, + babelParserPlugins: opts.babelParserPlugins ?? [], }; } diff --git a/src/core/parse_ID.ts b/src/core/parse_ID.ts index fc5039c..befb97c 100644 --- a/src/core/parse_ID.ts +++ b/src/core/parse_ID.ts @@ -12,18 +12,10 @@ export function parse_ID(id: string, root = '') { const ext = extname(file).slice(1); const query = Object.fromEntries(new URLSearchParams(rawQuery)) as VueQuery; - if (ext === 'vue') { - return { - file: file.replace(root, ''), - isSfc: true, - query, - }; - } - return { file: file.replace(root, ''), - isJsx: true, - isTsx: ext.includes('ts'), + isSfc: ext === 'vue', + isTsx: ext.startsWith('ts'), query, }; } diff --git a/src/core/transform.ts b/src/core/transform.ts index f1cc962..1142272 100644 --- a/src/core/transform.ts +++ b/src/core/transform.ts @@ -6,16 +6,20 @@ import { parse_ID } from './parse_ID'; import { transform_SFC } from './transform_SFC'; import { transform_JSX } from './transform_JSX'; -export function transform(code: string, id: string, options: ResolvedOptions) { - const { root, sourceMap } = options; +const skipRE = new RegExp(` ${TRACE_ID}=['"].+:[0-9]+:[0-9]+['"]`); + +export function transform(code: string, id: string, opts: ResolvedOptions) { + if (skipRE.test(code)) return; + + const { root, sourceMap } = opts; const s = new MagicString(code); const parsed = parse_ID(id, root); if (parsed.isSfc) { - transform_SFC(code, replace); + transform_SFC(code, replace, opts); } else { - transform_JSX(code, replace, parsed); + transform_JSX(code, replace, parsed, opts); } function replace(pos: Position) { diff --git a/src/core/transform_JSX.ts b/src/core/transform_JSX.ts index bbbba1e..0c66c47 100644 --- a/src/core/transform_JSX.ts +++ b/src/core/transform_JSX.ts @@ -1,6 +1,7 @@ -import type { Position } from '@vue/compiler-dom'; +import { type Position } from '@vue/compiler-dom'; import { traverse, types as t } from '@babel/core'; import { parse, ParserPlugin } from '@babel/parser'; +import { type ResolvedOptions } from '../types'; export function transform_JSX( code: string, @@ -11,17 +12,19 @@ export function transform_JSX( startLine?: number; startColumn?: number; }, + opts: ResolvedOptions, ) { const { isTsx, startIndex = 0, startLine = 1, startColumn = 1 } = options; - const plugins: ParserPlugin[] = ['jsx']; + const pluginSet = new Set(opts.babelParserPlugins); + pluginSet.add('jsx'); if (isTsx) { - plugins.push('typescript'); + pluginSet.add('typescript'); } const ast = parse(code, { sourceType: 'unambiguous', - plugins, + plugins: [...pluginSet] as ParserPlugin[], startLine, // babel start at 0 startColumn: startColumn - 1, diff --git a/src/core/transform_SFC.ts b/src/core/transform_SFC.ts index 4518657..5e2b6ae 100644 --- a/src/core/transform_SFC.ts +++ b/src/core/transform_SFC.ts @@ -1,15 +1,21 @@ -import type { - ElementNode, - AttributeNode, - Position, - RootNode, - TextNode, +import { + type ElementNode, + type AttributeNode, + type Position, + type RootNode, + type TextNode, + parse, + transform, } from '@vue/compiler-dom'; -import { parse, transform } from '@vue/compiler-dom'; +import { type ResolvedOptions } from '../types'; import { NodeTypes, TagTypes } from './constants'; import { transform_JSX } from './transform_JSX'; -export function transform_SFC(code: string, cb: (pos: Position) => void) { +export function transform_SFC( + code: string, + cb: (pos: Position) => void, + opts: ResolvedOptions, +) { const ast = parse(code); transform(ast, { nodeTransforms: [ @@ -27,13 +33,13 @@ export function transform_SFC(code: string, cb: (pos: Position) => void) { ], }); - const jsxOpts = resolveJsxOptions(ast); + const jsxOpts = resolveJsxOptsByScript(ast); if (jsxOpts) { - transform_JSX(jsxOpts.code, cb, jsxOpts); + transform_JSX(jsxOpts.code, cb, jsxOpts, opts); } } -function resolveJsxOptions(ast: RootNode) { +function resolveJsxOptsByScript(ast: RootNode) { const scriptNode = (ast.children as ElementNode[]).find( (node) => node.tag === 'script', ); diff --git a/src/types.ts b/src/types.ts index 5371bc9..9bc3dda 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,11 @@ +import { ParserPlugin } from '@babel/parser'; + export interface Options { + /** @default '**\/*.{vue,jsx,tsx}' */ + include?: string | RegExp | (string | RegExp)[]; + /** @default 'node_modules/**' */ + exclude?: string | RegExp | (string | RegExp)[]; + /** * source root path * @@ -12,10 +19,12 @@ export interface Options { */ sourceMap?: boolean; - /** @default '**\/*.{vue,jsx,tsx}' */ - include?: string | RegExp | (string | RegExp)[]; - /** @default 'node_modules/**' */ - exclude?: string | RegExp | (string | RegExp)[]; + /** + * Array containing the plugins that you want to enable. + * + * @default ['jsx', 'typescript'] + */ + babelParserPlugins?: ParserPlugin[]; } export type ResolvedOptions = Required; diff --git a/test/fixtures.test.ts b/test/fixtures.test.ts index e02b09d..07274c8 100644 --- a/test/fixtures.test.ts +++ b/test/fixtures.test.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'node:fs'; -import { extname, join, resolve } from 'node:path'; +import { basename, dirname, extname, join, resolve } from 'node:path'; import { expect, test } from 'vitest'; import { format, Options } from 'prettier'; import fg from 'fast-glob'; @@ -19,7 +19,11 @@ test.each(fixtures)('transform %s', async (name) => { const input = readCodeString(filename); const output = readCodeString(filename, `output${extname(filename)}`); - const result = transform(input, filename, options); + const result = transform(input, filename, options)!; + + if (basename(dirname(name)) === 'vue-skip') { + return expect(result).toBeUndefined(); + } expect( await formatCode(result.code, { @@ -35,7 +39,7 @@ test.each(fixtures)('transform %s', async (name) => { }), ).toEqual(sourceMap); } else { - expect(result.map).toBe(null); + expect(result.map).toBeNull(); } }); diff --git a/test/fixtures/vue-skip/input.vue b/test/fixtures/vue-skip/input.vue new file mode 100644 index 0000000..a1364ce --- /dev/null +++ b/test/fixtures/vue-skip/input.vue @@ -0,0 +1,3 @@ + diff --git a/test/fixtures/vue-skip/options.ts b/test/fixtures/vue-skip/options.ts new file mode 100644 index 0000000..19d8e2b --- /dev/null +++ b/test/fixtures/vue-skip/options.ts @@ -0,0 +1,4 @@ +export default { + root: process.cwd(), + sourceMap: false, +}; diff --git a/test/fixtures/vue-skip/output.vue b/test/fixtures/vue-skip/output.vue new file mode 100644 index 0000000..a1364ce --- /dev/null +++ b/test/fixtures/vue-skip/output.vue @@ -0,0 +1,3 @@ + From 0d62cef0a9f4528878c045d243d994e034ae0405 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Tue, 12 Dec 2023 22:22:05 +0800 Subject: [PATCH 10/21] feat: Transform `mdx` (#23) --- package.json | 2 + pnpm-lock.yaml | 836 +++++++++++++++++++++++++++++++++++ src/core/parse_ID.ts | 1 + src/core/transform.ts | 3 + src/core/transform_MDX.ts | 25 ++ test/fixtures.test.ts | 7 +- test/fixtures/md/input.md | 5 + test/fixtures/md/options.ts | 4 + test/fixtures/md/output.md | 5 + test/fixtures/mdx/input.mdx | 7 + test/fixtures/mdx/options.ts | 4 + test/fixtures/mdx/output.mdx | 7 + tsup.config.ts | 2 + 13 files changed, 907 insertions(+), 1 deletion(-) create mode 100644 src/core/transform_MDX.ts create mode 100644 test/fixtures/md/input.md create mode 100644 test/fixtures/md/options.ts create mode 100644 test/fixtures/md/output.md create mode 100644 test/fixtures/mdx/input.mdx create mode 100644 test/fixtures/mdx/options.ts create mode 100644 test/fixtures/mdx/output.mdx diff --git a/package.json b/package.json index 53c9825..fe7686e 100644 --- a/package.json +++ b/package.json @@ -88,9 +88,11 @@ "@babel/parser": "^7.22.16", "@babel/plugin-syntax-jsx": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5", + "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.5", "@vue/compiler-dom": "^3.3.4", "magic-string": "^0.30.3", + "unist-util-visit": "^5.0.0", "unplugin": "^1.4.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea7ee5e..2399fcb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@babel/plugin-syntax-typescript': specifier: ^7.22.5 version: 7.22.5(@babel/core@7.22.17) + '@mdx-js/mdx': + specifier: ^3.0.0 + version: 3.0.0 '@rollup/pluginutils': specifier: ^5.0.5 version: 5.0.5 @@ -29,6 +32,9 @@ importers: magic-string: specifier: ^0.30.3 version: 0.30.3 + unist-util-visit: + specifier: ^5.0.0 + version: 5.0.0 unplugin: specifier: ^1.4.0 version: 1.4.0 @@ -2669,6 +2675,36 @@ packages: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: true + /@mdx-js/mdx@3.0.0: + resolution: {integrity: sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==} + dependencies: + '@types/estree': 1.0.1 + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + '@types/mdx': 2.0.10 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-build-jsx: 3.0.1 + estree-util-is-identifier-name: 3.0.0 + estree-util-to-js: 2.0.0 + estree-walker: 3.0.3 + hast-util-to-estree: 3.1.0 + hast-util-to-jsx-runtime: 2.3.0 + markdown-extensions: 2.0.0 + periscopic: 3.1.0 + remark-mdx: 3.0.0 + remark-parse: 11.0.0 + remark-rehype: 11.0.0 + source-map: 0.7.4 + unified: 11.0.4 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: false + /@node-ipc/js-queue@2.0.3: resolution: {integrity: sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==} engines: {node: '>=1.0.0'} @@ -2840,6 +2876,12 @@ packages: engines: {node: '>=10.13.0'} dev: true + /@types/acorn@4.0.6: + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 1.0.1 + dev: false + /@types/babel__core@7.20.2: resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} dependencies: @@ -2905,6 +2947,12 @@ packages: '@types/node': 20.6.0 dev: true + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: false + /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -2919,6 +2967,12 @@ packages: '@types/json-schema': 7.0.12 dev: true + /@types/estree-jsx@1.0.3: + resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} + dependencies: + '@types/estree': 1.0.1 + dev: false + /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} @@ -2940,6 +2994,12 @@ packages: '@types/serve-static': 1.15.2 dev: true + /@types/hast@3.0.3: + resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + /@types/html-minifier-terser@6.1.0: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} dev: true @@ -2958,6 +3018,16 @@ packages: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true + /@types/mdast@4.0.3: + resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /@types/mdx@2.0.10: + resolution: {integrity: sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==} + dev: false + /@types/mime@1.3.2: resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} dev: true @@ -2970,6 +3040,10 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + /@types/node@20.6.0: resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==} dev: true @@ -3025,6 +3099,14 @@ packages: '@types/node': 20.6.0 dev: true + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: false + + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + dev: false + /@types/webpack-env@1.18.1: resolution: {integrity: sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==} dev: true @@ -3035,6 +3117,10 @@ packages: '@types/node': 20.6.0 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: false + /@vitejs/plugin-vue@4.2.3(vite@4.4.5)(vue@3.3.4): resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3781,6 +3867,14 @@ packages: acorn: 8.10.0 dev: true + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: false + /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} @@ -3968,6 +4062,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /astring@1.8.6: + resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + hasBin: true + dev: false + /async-each@1.0.6: resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} dev: true @@ -4116,6 +4215,10 @@ packages: esutils: 2.0.3 dev: true + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -4430,6 +4533,10 @@ packages: engines: {node: '>=4'} dev: true + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: false + /chai@4.3.8: resolution: {integrity: sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==} engines: {node: '>=4'} @@ -4507,6 +4614,22 @@ packages: - supports-color dev: true + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: false + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: false + + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: false + /check-error@1.0.2: resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} dev: true @@ -4640,6 +4763,10 @@ packages: engines: {node: '>=0.8'} dev: true + /collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + dev: false + /collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -4680,6 +4807,10 @@ packages: engines: {node: '>=0.1.90'} dev: true + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: false + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -5237,6 +5368,12 @@ packages: dependencies: ms: 2.1.2 + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -5345,6 +5482,11 @@ packages: engines: {node: '>= 0.8'} dev: true + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + /destr@1.2.2: resolution: {integrity: sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA==} dev: true @@ -5362,6 +5504,12 @@ packages: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: false + /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5575,6 +5723,40 @@ packages: engines: {node: '>=4.0'} dev: true + /estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + dependencies: + '@types/estree': 1.0.1 + dev: false + + /estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + dependencies: + '@types/estree-jsx': 1.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + dev: false + + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + dev: false + + /estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + dependencies: + '@types/estree-jsx': 1.0.3 + astring: 1.8.6 + source-map: 0.7.4 + dev: false + + /estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/unist': 3.0.2 + dev: false + /estree-walker@0.2.1: resolution: {integrity: sha512-6/I1dwNKk0N9iGOU3ydzAAurz4NPo/ttxZNCqgIVbWFvWyzWBSNonRrJ5CpjDuyBfmM7ENN7WCzUi9aT/UPXXQ==} dev: true @@ -5586,6 +5768,12 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.1 + dev: false + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -5762,6 +5950,10 @@ packages: is-extendable: 1.0.1 dev: true + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + /extglob@2.0.4: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} @@ -6230,6 +6422,57 @@ packages: resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} dev: true + /hast-util-to-estree@3.1.0: + resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} + dependencies: + '@types/estree': 1.0.1 + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.0.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.4.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.4 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /hast-util-to-jsx-runtime@2.3.0: + resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + dependencies: + '@types/estree': 1.0.1 + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.0.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.4.0 + space-separated-tokens: 2.0.2 + style-to-object: 1.0.5 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.3 + dev: false + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -6463,6 +6706,14 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: false + + /inline-style-parser@0.2.2: + resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==} + dev: false + /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -6487,6 +6738,17 @@ packages: kind-of: 6.0.3 dev: true + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: false + + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + dev: false + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -6542,6 +6804,10 @@ packages: kind-of: 6.0.3 dev: true + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: false + /is-descriptor@0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} @@ -6617,6 +6883,10 @@ packages: dependencies: is-extglob: 2.1.1 + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: false + /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -6650,6 +6920,11 @@ packages: engines: {node: '>=10'} dev: true + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -6668,6 +6943,12 @@ packages: '@types/estree': 1.0.1 dev: true + /is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + dependencies: + '@types/estree': 1.0.1 + dev: false + /is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} @@ -7016,6 +7297,10 @@ packages: wrap-ansi: 3.0.1 dev: true + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: false + /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: @@ -7083,6 +7368,127 @@ packages: object-visit: 1.0.1 dev: true + /markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + dev: false + + /mdast-util-from-markdown@2.0.0: + resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-expression@2.0.0: + resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-jsx@3.0.0: + resolution: {integrity: sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.3 + unist-util-remove-position: 5.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + dependencies: + mdast-util-from-markdown: 2.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.0.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-phrasing@4.0.0: + resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==} + dependencies: + '@types/mdast': 4.0.3 + unist-util-is: 6.0.0 + dev: false + + /mdast-util-to-hast@13.0.2: + resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} + dependencies: + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + dev: false + + /mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.0.0 + mdast-util-to-string: 4.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + dev: false + + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + dependencies: + '@types/mdast': 4.0.3 + dev: false + /mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: true @@ -7123,6 +7529,268 @@ packages: engines: {node: '>= 0.6'} dev: true + /micromark-core-commonmark@2.0.0: + resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-mdx-expression@3.0.0: + resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} + dependencies: + '@types/estree': 1.0.1 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-mdx-jsx@3.0.0: + resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.1 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + dev: false + + /micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + dependencies: + '@types/estree': 1.0.1 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 + dev: false + + /micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + micromark-extension-mdx-expression: 3.0.0 + micromark-extension-mdx-jsx: 3.0.0 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-mdx-expression@2.0.1: + resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} + dependencies: + '@types/estree': 1.0.1 + devlop: 1.1.0 + micromark-util-character: 2.0.1 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 + dev: false + + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-character@2.0.1: + resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: false + + /micromark-util-events-to-acorn@2.0.2: + resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.1 + '@types/unist': 3.0.2 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + dev: false + + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + dev: false + + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-subtokenize@2.0.0: + resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: false + + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: false + + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /micromatch@3.1.10: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} @@ -7695,6 +8363,19 @@ packages: callsites: 3.1.0 dev: true + /parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + dependencies: + '@types/unist': 2.0.10 + character-entities: 2.0.2 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + dev: false + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -7796,6 +8477,14 @@ packages: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} dev: true + /periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + dependencies: + '@types/estree': 1.0.1 + estree-walker: 3.0.3 + is-reference: 3.0.2 + dev: false + /picocolors@0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} dev: true @@ -8321,6 +9010,10 @@ packages: sisteransi: 1.0.5 dev: true + /property-information@6.4.0: + resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} + dev: false + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -8504,6 +9197,36 @@ packages: engines: {node: '>= 0.10'} dev: true + /remark-mdx@3.0.0: + resolution: {integrity: sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==} + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + micromark-util-types: 2.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-rehype@11.0.0: + resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==} + dependencies: + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + mdast-util-to-hast: 13.0.2 + unified: 11.0.4 + vfile: 6.0.1 + dev: false + /remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} dev: true @@ -8991,6 +9714,11 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: false + /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -8998,6 +9726,10 @@ packages: whatwg-url: 7.1.0 dev: true + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: false + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -9150,6 +9882,13 @@ packages: safe-buffer: 5.2.1 dev: true + /stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: false + /strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} @@ -9194,6 +9933,18 @@ packages: resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} dev: true + /style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + + /style-to-object@1.0.5: + resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==} + dependencies: + inline-style-parser: 0.2.2 + dev: false + /stylehacks@5.1.1(postcss@8.4.29): resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} @@ -9434,6 +10185,14 @@ packages: hasBin: true dev: true + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false + + /trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true @@ -9572,6 +10331,18 @@ packages: engines: {node: '>=4'} dev: true + /unified@11.0.4: + resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + dependencies: + '@types/unist': 3.0.2 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 6.0.1 + dev: false + /union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} @@ -9582,6 +10353,52 @@ packages: set-value: 2.0.1 dev: true + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + dependencies: + '@types/unist': 3.0.2 + unist-util-visit: 5.0.0 + dev: false + + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + dev: false + + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false + /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -9716,6 +10533,21 @@ packages: engines: {node: '>= 0.8'} dev: true + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + dev: false + + /vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + dev: false + /vite-node@0.34.5(@types/node@20.6.0): resolution: {integrity: sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==} engines: {node: '>=v14.18.0'} @@ -10325,3 +11157,7 @@ packages: normalize-path: 1.0.0 strip-indent: 2.0.0 dev: true + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false diff --git a/src/core/parse_ID.ts b/src/core/parse_ID.ts index befb97c..6a0e0dd 100644 --- a/src/core/parse_ID.ts +++ b/src/core/parse_ID.ts @@ -16,6 +16,7 @@ export function parse_ID(id: string, root = '') { file: file.replace(root, ''), isSfc: ext === 'vue', isTsx: ext.startsWith('ts'), + isMdx: ext.startsWith('md'), query, }; } diff --git a/src/core/transform.ts b/src/core/transform.ts index 1142272..f533b58 100644 --- a/src/core/transform.ts +++ b/src/core/transform.ts @@ -4,6 +4,7 @@ import { type ResolvedOptions } from '../types'; import { TRACE_ID } from './constants'; import { parse_ID } from './parse_ID'; import { transform_SFC } from './transform_SFC'; +import { transform_MDX } from './transform_MDX'; import { transform_JSX } from './transform_JSX'; const skipRE = new RegExp(` ${TRACE_ID}=['"].+:[0-9]+:[0-9]+['"]`); @@ -18,6 +19,8 @@ export function transform(code: string, id: string, opts: ResolvedOptions) { if (parsed.isSfc) { transform_SFC(code, replace, opts); + } else if (parsed.isMdx) { + transform_MDX(code, replace); } else { transform_JSX(code, replace, parsed, opts); } diff --git a/src/core/transform_MDX.ts b/src/core/transform_MDX.ts new file mode 100644 index 0000000..70a7341 --- /dev/null +++ b/src/core/transform_MDX.ts @@ -0,0 +1,25 @@ +import { type Position } from '@vue/compiler-dom'; +import { type Processor } from '@mdx-js/mdx/internal-create-format-aware-processors'; +import { createProcessor } from '@mdx-js/mdx'; +import { visit } from 'unist-util-visit'; + +const mdxJsxRE = /^mdxJsx/; + +let processor: Processor; +export function transform_MDX(code: string, cb: (pos: Position) => void) { + processor ||= createProcessor({}); + + const ast = processor.parse(code); + visit( + ast, + (node) => mdxJsxRE.test(node.type), + (node) => { + if ('name' in node && node.name != null) { + const { start } = node.position!; + const offset = start.offset! + node.name.length + 1; + + cb({ ...start, offset }); + } + }, + ); +} diff --git a/test/fixtures.test.ts b/test/fixtures.test.ts index 07274c8..8715f87 100644 --- a/test/fixtures.test.ts +++ b/test/fixtures.test.ts @@ -27,7 +27,12 @@ test.each(fixtures)('transform %s', async (name) => { expect( await formatCode(result.code, { - parser: extname(filename) === '.vue' ? 'vue' : 'babel', + parser: + extname(filename) === '.vue' + ? 'vue' + : extname(filename).startsWith('.md') + ? 'mdx' + : 'babel', }), ).toBe(output); diff --git a/test/fixtures/md/input.md b/test/fixtures/md/input.md new file mode 100644 index 0000000..5788468 --- /dev/null +++ b/test/fixtures/md/input.md @@ -0,0 +1,5 @@ +# MD + +
+
test
+
diff --git a/test/fixtures/md/options.ts b/test/fixtures/md/options.ts new file mode 100644 index 0000000..19d8e2b --- /dev/null +++ b/test/fixtures/md/options.ts @@ -0,0 +1,4 @@ +export default { + root: process.cwd(), + sourceMap: false, +}; diff --git a/test/fixtures/md/output.md b/test/fixtures/md/output.md new file mode 100644 index 0000000..8cefa00 --- /dev/null +++ b/test/fixtures/md/output.md @@ -0,0 +1,5 @@ +# MD + +
+
test
+
diff --git a/test/fixtures/mdx/input.mdx b/test/fixtures/mdx/input.mdx new file mode 100644 index 0000000..f3c9551 --- /dev/null +++ b/test/fixtures/mdx/input.mdx @@ -0,0 +1,7 @@ +import Mdx from 'mdx'; + +# MDX + + +
test
+
diff --git a/test/fixtures/mdx/options.ts b/test/fixtures/mdx/options.ts new file mode 100644 index 0000000..19d8e2b --- /dev/null +++ b/test/fixtures/mdx/options.ts @@ -0,0 +1,4 @@ +export default { + root: process.cwd(), + sourceMap: false, +}; diff --git a/test/fixtures/mdx/output.mdx b/test/fixtures/mdx/output.mdx new file mode 100644 index 0000000..e94de47 --- /dev/null +++ b/test/fixtures/mdx/output.mdx @@ -0,0 +1,7 @@ +import Mdx from 'mdx'; + +# MDX + + +
test
+
diff --git a/tsup.config.ts b/tsup.config.ts index 6f26702..af1d64f 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -14,5 +14,7 @@ export const tsup: Options = { '@babel/plugin-syntax-jsx', '@babel/plugin-syntax-typescript', '@vue/compiler-dom', + '@mdx-js/mdx', + 'unist-util-visit', ], }; From 0c92007eefd1827496d9b1b39ad8f4f8e9082fa7 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Wed, 13 Dec 2023 20:04:09 +0800 Subject: [PATCH 11/21] chore: Replace `mdx` ast library (#24) --- package.json | 6 +- pnpm-lock.yaml | 362 ++++---------------------------------- src/core/parse_ID.ts | 6 +- src/core/transform.ts | 15 +- src/core/transform_MDX.ts | 13 +- tsup.config.ts | 5 +- 6 files changed, 67 insertions(+), 340 deletions(-) diff --git a/package.json b/package.json index fe7686e..24542ae 100644 --- a/package.json +++ b/package.json @@ -88,12 +88,14 @@ "@babel/parser": "^7.22.16", "@babel/plugin-syntax-jsx": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5", - "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.5", "@vue/compiler-dom": "^3.3.4", "magic-string": "^0.30.3", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0", "unist-util-visit": "^5.0.0", - "unplugin": "^1.4.0" + "unplugin": "^1.5.1" }, "devDependencies": { "@types/babel__core": "^7.20.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2399fcb..92bd184 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,9 +20,6 @@ importers: '@babel/plugin-syntax-typescript': specifier: ^7.22.5 version: 7.22.5(@babel/core@7.22.17) - '@mdx-js/mdx': - specifier: ^3.0.0 - version: 3.0.0 '@rollup/pluginutils': specifier: ^5.0.5 version: 5.0.5 @@ -32,12 +29,21 @@ importers: magic-string: specifier: ^0.30.3 version: 0.30.3 + mdast-util-from-markdown: + specifier: ^2.0.0 + version: 2.0.0 + mdast-util-mdx-jsx: + specifier: ^3.0.0 + version: 3.0.0 + micromark-extension-mdxjs: + specifier: ^3.0.0 + version: 3.0.0 unist-util-visit: specifier: ^5.0.0 version: 5.0.0 unplugin: - specifier: ^1.4.0 - version: 1.4.0 + specifier: ^1.5.1 + version: 1.5.1 devDependencies: '@types/babel__core': specifier: ^7.20.2 @@ -2675,36 +2681,6 @@ packages: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: true - /@mdx-js/mdx@3.0.0: - resolution: {integrity: sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==} - dependencies: - '@types/estree': 1.0.1 - '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.3 - '@types/mdx': 2.0.10 - collapse-white-space: 2.1.0 - devlop: 1.1.0 - estree-util-build-jsx: 3.0.1 - estree-util-is-identifier-name: 3.0.0 - estree-util-to-js: 2.0.0 - estree-walker: 3.0.3 - hast-util-to-estree: 3.1.0 - hast-util-to-jsx-runtime: 2.3.0 - markdown-extensions: 2.0.0 - periscopic: 3.1.0 - remark-mdx: 3.0.0 - remark-parse: 11.0.0 - remark-rehype: 11.0.0 - source-map: 0.7.4 - unified: 11.0.4 - unist-util-position-from-estree: 2.0.0 - unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.1 - transitivePeerDependencies: - - supports-color - dev: false - /@node-ipc/js-queue@2.0.3: resolution: {integrity: sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==} engines: {node: '>=1.0.0'} @@ -3024,10 +3000,6 @@ packages: '@types/unist': 3.0.2 dev: false - /@types/mdx@2.0.10: - resolution: {integrity: sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==} - dev: false - /@types/mime@1.3.2: resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} dev: true @@ -3117,10 +3089,6 @@ packages: '@types/node': 20.6.0 dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: false - /@vitejs/plugin-vue@4.2.3(vite@4.4.5)(vue@3.3.4): resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3867,12 +3835,12 @@ packages: acorn: 8.10.0 dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.2 dev: false /acorn-walk@8.2.0: @@ -3884,6 +3852,12 @@ packages: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -4062,11 +4036,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} - hasBin: true - dev: false - /async-each@1.0.6: resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} dev: true @@ -4215,10 +4184,6 @@ packages: esutils: 2.0.3 dev: true - /bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - dev: false - /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -4763,10 +4728,6 @@ packages: engines: {node: '>=0.8'} dev: true - /collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - dev: false - /collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -4807,10 +4768,6 @@ packages: engines: {node: '>=0.1.90'} dev: true - /comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - dev: false - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -5723,33 +5680,10 @@ packages: engines: {node: '>=4.0'} dev: true - /estree-util-attach-comments@3.0.0: - resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} - dependencies: - '@types/estree': 1.0.1 - dev: false - - /estree-util-build-jsx@3.0.1: - resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} - dependencies: - '@types/estree-jsx': 1.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-walker: 3.0.3 - dev: false - /estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} dev: false - /estree-util-to-js@2.0.0: - resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} - dependencies: - '@types/estree-jsx': 1.0.3 - astring: 1.8.6 - source-map: 0.7.4 - dev: false - /estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} dependencies: @@ -5768,12 +5702,6 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - dependencies: - '@types/estree': 1.0.1 - dev: false - /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -5950,10 +5878,6 @@ packages: is-extendable: 1.0.1 dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: false - /extglob@2.0.4: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} @@ -6422,57 +6346,6 @@ packages: resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} dev: true - /hast-util-to-estree@3.1.0: - resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} - dependencies: - '@types/estree': 1.0.1 - '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-attach-comments: 3.0.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.0.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.4.0 - space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 - unist-util-position: 5.0.0 - zwitch: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /hast-util-to-jsx-runtime@2.3.0: - resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} - dependencies: - '@types/estree': 1.0.1 - '@types/hast': 3.0.3 - '@types/unist': 3.0.2 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.0.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.4.0 - space-separated-tokens: 2.0.2 - style-to-object: 1.0.5 - unist-util-position: 5.0.0 - vfile-message: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: false - - /hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - dependencies: - '@types/hast': 3.0.3 - dev: false - /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -6706,14 +6579,6 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - dev: false - - /inline-style-parser@0.2.2: - resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==} - dev: false - /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -6920,11 +6785,6 @@ packages: engines: {node: '>=10'} dev: true - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: false - /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -6943,12 +6803,6 @@ packages: '@types/estree': 1.0.1 dev: true - /is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - dependencies: - '@types/estree': 1.0.1 - dev: false - /is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} @@ -7368,11 +7222,6 @@ packages: object-visit: 1.0.1 dev: true - /markdown-extensions@2.0.0: - resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} - engines: {node: '>=16'} - dev: false - /mdast-util-from-markdown@2.0.0: resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} dependencies: @@ -7392,19 +7241,6 @@ packages: - supports-color dev: false - /mdast-util-mdx-expression@2.0.0: - resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} - dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.3 - '@types/mdast': 4.0.3 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - dev: false - /mdast-util-mdx-jsx@3.0.0: resolution: {integrity: sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==} dependencies: @@ -7425,31 +7261,6 @@ packages: - supports-color dev: false - /mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} - dependencies: - mdast-util-from-markdown: 2.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.0.0 - mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - dev: false - - /mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.3 - '@types/mdast': 4.0.3 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 - transitivePeerDependencies: - - supports-color - dev: false - /mdast-util-phrasing@4.0.0: resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==} dependencies: @@ -7457,19 +7268,6 @@ packages: unist-util-is: 6.0.0 dev: false - /mdast-util-to-hast@13.0.2: - resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} - dependencies: - '@types/hast': 3.0.3 - '@types/mdast': 4.0.3 - '@ungap/structured-clone': 1.2.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.0 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - dev: false - /mdast-util-to-markdown@2.1.0: resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} dependencies: @@ -7601,8 +7399,8 @@ packages: /micromark-extension-mdxjs@3.0.0: resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -7929,7 +7727,7 @@ packages: /mlly@1.4.2: resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: - acorn: 8.10.0 + acorn: 8.11.2 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.3.0 @@ -8477,14 +8275,6 @@ packages: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} dev: true - /periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - dependencies: - '@types/estree': 1.0.1 - estree-walker: 3.0.3 - is-reference: 3.0.2 - dev: false - /picocolors@0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} dev: true @@ -9010,10 +8800,6 @@ packages: sisteransi: 1.0.5 dev: true - /property-information@6.4.0: - resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} - dev: false - /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -9197,36 +8983,6 @@ packages: engines: {node: '>= 0.10'} dev: true - /remark-mdx@3.0.0: - resolution: {integrity: sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==} - dependencies: - mdast-util-mdx: 3.0.0 - micromark-extension-mdxjs: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 - micromark-util-types: 2.0.0 - unified: 11.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /remark-rehype@11.0.0: - resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==} - dependencies: - '@types/hast': 3.0.3 - '@types/mdast': 4.0.3 - mdast-util-to-hast: 13.0.2 - unified: 11.0.4 - vfile: 6.0.1 - dev: false - /remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} dev: true @@ -9714,11 +9470,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: false - /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -9726,10 +9477,6 @@ packages: whatwg-url: 7.1.0 dev: true - /space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - dev: false - /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -9933,18 +9680,6 @@ packages: resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} dev: true - /style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - dependencies: - inline-style-parser: 0.1.1 - dev: false - - /style-to-object@1.0.5: - resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==} - dependencies: - inline-style-parser: 0.2.2 - dev: false - /stylehacks@5.1.1(postcss@8.4.29): resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} @@ -10066,7 +9801,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 + acorn: 8.11.2 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -10185,14 +9920,6 @@ packages: hasBin: true dev: true - /trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - dev: false - - /trough@2.1.0: - resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} - dev: false - /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true @@ -10331,18 +10058,6 @@ packages: engines: {node: '>=4'} dev: true - /unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} - dependencies: - '@types/unist': 3.0.2 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.1.0 - vfile: 6.0.1 - dev: false - /union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} @@ -10365,12 +10080,6 @@ packages: '@types/unist': 3.0.2 dev: false - /unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - dependencies: - '@types/unist': 3.0.2 - dev: false - /unist-util-remove-position@5.0.0: resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} dependencies: @@ -10451,6 +10160,16 @@ packages: chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 + dev: true + + /unplugin@1.5.1: + resolution: {integrity: sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==} + dependencies: + acorn: 8.11.2 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + dev: false /unset-value@1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} @@ -10540,14 +10259,6 @@ packages: unist-util-stringify-position: 4.0.0 dev: false - /vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 - dev: false - /vite-node@0.34.5(@types/node@20.6.0): resolution: {integrity: sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==} engines: {node: '>=v14.18.0'} @@ -10837,7 +10548,7 @@ packages: hasBin: true dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.10.0 + acorn: 8.11.2 acorn-walk: 8.2.0 commander: 7.2.0 escape-string-regexp: 4.0.0 @@ -10949,6 +10660,11 @@ packages: /webpack-virtual-modules@0.5.0: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: true + + /webpack-virtual-modules@0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + dev: false /webpack@5.88.2(esbuild@0.18.20): resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} diff --git a/src/core/parse_ID.ts b/src/core/parse_ID.ts index 6a0e0dd..e0d3f37 100644 --- a/src/core/parse_ID.ts +++ b/src/core/parse_ID.ts @@ -1,7 +1,7 @@ import { extname } from 'path'; import { TRACE_ID } from './constants'; -export interface VueQuery extends Record { +export interface Query extends Record { type?: 'script' | 'template' | 'style' | 'custom'; raw?: string; [TRACE_ID]?: string; @@ -10,7 +10,9 @@ export interface VueQuery extends Record { export function parse_ID(id: string, root = '') { const [file, rawQuery] = id.split('?', 2); const ext = extname(file).slice(1); - const query = Object.fromEntries(new URLSearchParams(rawQuery)) as VueQuery; + const query = ( + rawQuery ? Object.fromEntries(new URLSearchParams(rawQuery)) : {} + ) as Query; return { file: file.replace(root, ''), diff --git a/src/core/transform.ts b/src/core/transform.ts index f533b58..3eb63a7 100644 --- a/src/core/transform.ts +++ b/src/core/transform.ts @@ -14,7 +14,7 @@ export function transform(code: string, id: string, opts: ResolvedOptions) { const { root, sourceMap } = opts; - const s = new MagicString(code); + let s: MagicString; const parsed = parse_ID(id, root); if (parsed.isSfc) { @@ -26,12 +26,17 @@ export function transform(code: string, id: string, opts: ResolvedOptions) { } function replace(pos: Position) { + s ||= new MagicString(code); + const { offset, line, column } = pos; s.prependLeft(offset, ` ${TRACE_ID}="${parsed.file}:${line}:${column}"`); } - return { - code: s.toString(), - map: sourceMap ? s.generateMap() : null, - }; + // @ts-ignore + if (s) { + return { + code: s.toString(), + map: sourceMap ? s.generateMap() : null, + }; + } } diff --git a/src/core/transform_MDX.ts b/src/core/transform_MDX.ts index 70a7341..4180f99 100644 --- a/src/core/transform_MDX.ts +++ b/src/core/transform_MDX.ts @@ -1,15 +1,16 @@ import { type Position } from '@vue/compiler-dom'; -import { type Processor } from '@mdx-js/mdx/internal-create-format-aware-processors'; -import { createProcessor } from '@mdx-js/mdx'; +import { fromMarkdown } from 'mdast-util-from-markdown'; +import { mdxJsxFromMarkdown } from 'mdast-util-mdx-jsx'; +import { mdxjs } from 'micromark-extension-mdxjs'; import { visit } from 'unist-util-visit'; const mdxJsxRE = /^mdxJsx/; -let processor: Processor; export function transform_MDX(code: string, cb: (pos: Position) => void) { - processor ||= createProcessor({}); - - const ast = processor.parse(code); + const ast = fromMarkdown(code, 'utf-8', { + extensions: [mdxjs()], + mdastExtensions: [mdxJsxFromMarkdown()], + }); visit( ast, (node) => mdxJsxRE.test(node.type), diff --git a/tsup.config.ts b/tsup.config.ts index af1d64f..fb1c027 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -6,7 +6,6 @@ export const tsup: Options = { dts: true, splitting: true, clean: true, - shims: false, cjsInterop: true, external: [ '@babel/core', @@ -14,7 +13,9 @@ export const tsup: Options = { '@babel/plugin-syntax-jsx', '@babel/plugin-syntax-typescript', '@vue/compiler-dom', - '@mdx-js/mdx', + 'mdast-util-from-markdown', + 'mdast-util-mdx-jsx', + 'micromark-extension-mdxjs', 'unist-util-visit', ], }; From f00e2c3451ce535a7c69433eabee24b773f70c7d Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Tue, 2 Jan 2024 18:17:43 +0800 Subject: [PATCH 12/21] chore: Lower dependency version (#25) --- global.d.ts | 2 + package.json | 8 +- pnpm-lock.yaml | 570 +++++++++----------------------------- src/core/transform_MDX.ts | 28 +- 4 files changed, 154 insertions(+), 454 deletions(-) create mode 100644 global.d.ts diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 0000000..079f3ff --- /dev/null +++ b/global.d.ts @@ -0,0 +1,2 @@ +declare module 'mdast-util-mdx-jsx'; +declare module 'micromark-extension-mdxjs'; diff --git a/package.json b/package.json index 24542ae..cb2ae96 100644 --- a/package.json +++ b/package.json @@ -91,10 +91,10 @@ "@rollup/pluginutils": "^5.0.5", "@vue/compiler-dom": "^3.3.4", "magic-string": "^0.30.3", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0", - "unist-util-visit": "^5.0.0", + "mdast-util-from-markdown": "^0.8.5", + "mdast-util-mdx-jsx": "^0.1.4", + "micromark-extension-mdxjs": "^0.3.0", + "unist-util-visit": "^2.0.3", "unplugin": "^1.5.1" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92bd184..ca6bb55 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,17 +30,17 @@ importers: specifier: ^0.30.3 version: 0.30.3 mdast-util-from-markdown: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^0.8.5 + version: 0.8.5 mdast-util-mdx-jsx: - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^0.1.4 + version: 0.1.4 micromark-extension-mdxjs: - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^0.3.0 + version: 0.3.0 unist-util-visit: - specifier: ^5.0.0 - version: 5.0.0 + specifier: ^2.0.3 + version: 2.0.3 unplugin: specifier: ^1.5.1 version: 1.5.1 @@ -2852,12 +2852,6 @@ packages: engines: {node: '>=10.13.0'} dev: true - /@types/acorn@4.0.6: - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - dependencies: - '@types/estree': 1.0.1 - dev: false - /@types/babel__core@7.20.2: resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} dependencies: @@ -2923,12 +2917,6 @@ packages: '@types/node': 20.6.0 dev: true - /@types/debug@4.1.12: - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - dependencies: - '@types/ms': 0.7.34 - dev: false - /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: @@ -2943,12 +2931,6 @@ packages: '@types/json-schema': 7.0.12 dev: true - /@types/estree-jsx@1.0.3: - resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} - dependencies: - '@types/estree': 1.0.1 - dev: false - /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} @@ -2970,12 +2952,6 @@ packages: '@types/serve-static': 1.15.2 dev: true - /@types/hast@3.0.3: - resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==} - dependencies: - '@types/unist': 3.0.2 - dev: false - /@types/html-minifier-terser@6.1.0: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} dev: true @@ -2994,10 +2970,10 @@ packages: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true - /@types/mdast@4.0.3: - resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 2.0.10 dev: false /@types/mime@1.3.2: @@ -3012,10 +2988,6 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/ms@0.7.34: - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - dev: false - /@types/node@20.6.0: resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==} dev: true @@ -3075,10 +3047,6 @@ packages: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} dev: false - /@types/unist@3.0.2: - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} - dev: false - /@types/webpack-env@1.18.1: resolution: {integrity: sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==} dev: true @@ -4498,10 +4466,6 @@ packages: engines: {node: '>=4'} dev: true - /ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - dev: false - /chai@4.3.8: resolution: {integrity: sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==} engines: {node: '>=4'} @@ -4579,20 +4543,20 @@ packages: - supports-color dev: true - /character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + /character-entities-html4@1.1.4: + resolution: {integrity: sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==} dev: false - /character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + /character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} dev: false - /character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + /character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} dev: false - /character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + /character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: false /check-error@1.0.2: @@ -5325,12 +5289,6 @@ packages: dependencies: ms: 2.1.2 - /decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - dependencies: - character-entities: 2.0.2 - dev: false - /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -5439,11 +5397,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: false - /destr@1.2.2: resolution: {integrity: sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA==} dev: true @@ -5461,12 +5414,6 @@ packages: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true - /devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - dependencies: - dequal: 2.0.3 - dev: false - /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5680,15 +5627,8 @@ packages: engines: {node: '>=4.0'} dev: true - /estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - dev: false - - /estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - dependencies: - '@types/estree-jsx': 1.0.3 - '@types/unist': 3.0.2 + /estree-util-is-identifier-name@1.1.0: + resolution: {integrity: sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==} dev: false /estree-walker@0.2.1: @@ -6603,15 +6543,15 @@ packages: kind-of: 6.0.3 dev: true - /is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + /is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} dev: false - /is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + /is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 dev: false /is-arrayish@0.2.1: @@ -6669,8 +6609,8 @@ packages: kind-of: 6.0.3 dev: true - /is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + /is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} dev: false /is-descriptor@0.1.6: @@ -6748,8 +6688,8 @@ packages: dependencies: is-extglob: 2.1.1 - /is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + /is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: false /is-inside-container@1.0.0: @@ -7151,8 +7091,8 @@ packages: wrap-ansi: 3.0.1 dev: true - /longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + /longest-streak@2.0.4: + resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} dev: false /loupe@2.3.6: @@ -7222,69 +7162,42 @@ packages: object-visit: 1.0.1 dev: true - /mdast-util-from-markdown@2.0.0: - resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} - dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 - decode-named-character-reference: 1.0.2 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-decode-string: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /mdast-util-mdx-jsx@3.0.0: - resolution: {integrity: sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==} - dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 3.0.3 - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 - parse-entities: 4.0.1 - stringify-entities: 4.0.3 - unist-util-remove-position: 5.0.0 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + /mdast-util-from-markdown@0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-string: 2.0.0 + micromark: 2.11.4 + parse-entities: 2.0.0 + unist-util-stringify-position: 2.0.3 transitivePeerDependencies: - supports-color dev: false - /mdast-util-phrasing@4.0.0: - resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==} + /mdast-util-mdx-jsx@0.1.4: + resolution: {integrity: sha512-67KOAvCmypBSpr+AJEAVQg1Obig5Wnguo4ETTxASe5WVP4TLt57bZjDX/9EW5sWYQsO4gPqLxkUOlypVn5rkhg==} dependencies: - '@types/mdast': 4.0.3 - unist-util-is: 6.0.0 + mdast-util-to-markdown: 0.6.5 + parse-entities: 2.0.0 + stringify-entities: 3.1.0 + unist-util-remove-position: 3.0.0 + unist-util-stringify-position: 2.0.3 + vfile-message: 2.0.4 dev: false - /mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} - dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.0.0 - mdast-util-to-string: 4.0.0 - micromark-util-decode-string: 2.0.0 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 + /mdast-util-to-markdown@0.6.5: + resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} + dependencies: + '@types/unist': 2.0.10 + longest-streak: 2.0.4 + mdast-util-to-string: 2.0.0 + parse-entities: 2.0.0 + repeat-string: 1.6.1 + zwitch: 1.0.5 dev: false - /mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - dependencies: - '@types/mdast': 4.0.3 + /mdast-util-to-string@2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} dev: false /mdn-data@2.0.14: @@ -7327,264 +7240,59 @@ packages: engines: {node: '>= 0.6'} dev: true - /micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} - dependencies: - decode-named-character-reference: 1.0.2 - devlop: 1.1.0 - micromark-factory-destination: 2.0.0 - micromark-factory-label: 2.0.0 - micromark-factory-space: 2.0.0 - micromark-factory-title: 2.0.0 - micromark-factory-whitespace: 2.0.0 - micromark-util-character: 2.0.1 - micromark-util-chunked: 2.0.0 - micromark-util-classify-character: 2.0.0 - micromark-util-html-tag-name: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-subtokenize: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-extension-mdx-expression@3.0.0: - resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} + /micromark-extension-mdx-expression@0.3.2: + resolution: {integrity: sha512-Sh8YHLSAlbm/7TZkVKEC4wDcJE8XhVpZ9hUXBue1TcAicrrzs/oXu7PHH3NcyMemjGyMkiVS34Y0AHC5KG3y4A==} dependencies: - '@types/estree': 1.0.1 - devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark: 2.11.4 + vfile-message: 2.0.4 + transitivePeerDependencies: + - supports-color dev: false - /micromark-extension-mdx-jsx@3.0.0: - resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} + /micromark-extension-mdx-jsx@0.3.3: + resolution: {integrity: sha512-kG3VwaJlzAPdtIVDznfDfBfNGMTIzsHqKpTmMlew/iPnUCDRNkX+48ElpaOzXAtK5axtpFKE3Hu3VBriZDnRTQ==} dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.1 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - vfile-message: 4.0.2 + estree-util-is-identifier-name: 1.1.0 + micromark: 2.11.4 + micromark-extension-mdx-expression: 0.3.2 + vfile-message: 2.0.4 + transitivePeerDependencies: + - supports-color dev: false - /micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} - dependencies: - micromark-util-types: 2.0.0 + /micromark-extension-mdx-md@0.1.1: + resolution: {integrity: sha512-emlFQEyfx/2aPhwyEqeNDfKE6jPH1cvLTb5ANRo4qZBjaUObnzjLRdzK8RJ4Xc8+/dOmKN8TTRxFnOYF5/EAwQ==} dev: false - /micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + /micromark-extension-mdxjs-esm@0.3.1: + resolution: {integrity: sha512-tuLgcELrgY1a5tPxjk+MrI3BdYtwW67UaHZdzKiDYD8loNbxwIscfdagI6A2BKuAkrfeyHF6FW3B8KuDK3ZMXw==} dependencies: - '@types/estree': 1.0.1 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 - micromark-util-character: 2.0.1 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + micromark: 2.11.4 + micromark-extension-mdx-expression: 0.3.2 + vfile-message: 2.0.4 + transitivePeerDependencies: + - supports-color dev: false - /micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + /micromark-extension-mdxjs@0.3.0: + resolution: {integrity: sha512-NQuiYA0lw+eFDtSG4+c7ao3RG9dM4P0Kx/sn8OLyPhxtIc6k+9n14k5VfLxRKfAxYRTo8c5PLZPaRNmslGWxJw==} dependencies: acorn: 8.11.2 acorn-jsx: 5.3.2(acorn@8.11.2) - micromark-extension-mdx-expression: 3.0.0 - micromark-extension-mdx-jsx: 3.0.0 - micromark-extension-mdx-md: 2.0.0 - micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} - dependencies: - micromark-util-character: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-factory-mdx-expression@2.0.1: - resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} - dependencies: - '@types/estree': 1.0.1 - devlop: 1.1.0 - micromark-util-character: 2.0.1 - micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 - dev: false - - /micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} - dependencies: - micromark-util-character: 2.0.1 - micromark-util-types: 2.0.0 - dev: false - - /micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} - dependencies: - micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} - dependencies: - micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-util-character@2.0.1: - resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} - dependencies: - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} - dependencies: - micromark-util-symbol: 2.0.0 - dev: false - - /micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} - dependencies: - micromark-util-character: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} - dependencies: - micromark-util-chunked: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} - dependencies: - micromark-util-symbol: 2.0.0 - dev: false - - /micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} - dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-symbol: 2.0.0 - dev: false - - /micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} - dev: false - - /micromark-util-events-to-acorn@2.0.2: - resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} - dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.1 - '@types/unist': 3.0.2 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - vfile-message: 4.0.2 - dev: false - - /micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} - dev: false - - /micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} - dependencies: - micromark-util-symbol: 2.0.0 - dev: false - - /micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} - dependencies: - micromark-util-types: 2.0.0 - dev: false - - /micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} - dependencies: - micromark-util-character: 2.0.1 - micromark-util-encode: 2.0.0 - micromark-util-symbol: 2.0.0 - dev: false - - /micromark-util-subtokenize@2.0.0: - resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - dev: false - - /micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - dev: false - - /micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + micromark: 2.11.4 + micromark-extension-mdx-expression: 0.3.2 + micromark-extension-mdx-jsx: 0.3.3 + micromark-extension-mdx-md: 0.1.1 + micromark-extension-mdxjs-esm: 0.3.1 + transitivePeerDependencies: + - supports-color dev: false - /micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + /micromark@2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: - '@types/debug': 4.1.12 debug: 4.3.4 - decode-named-character-reference: 1.0.2 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.0.1 - micromark-util-chunked: 2.0.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-encode: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-subtokenize: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + parse-entities: 2.0.0 transitivePeerDependencies: - supports-color dev: false @@ -8161,17 +7869,15 @@ packages: callsites: 3.1.0 dev: true - /parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + /parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} dependencies: - '@types/unist': 2.0.10 - character-entities: 2.0.2 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.0.2 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 dev: false /parse-json@5.2.0: @@ -9005,7 +8711,6 @@ packages: /repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} - dev: true /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -9629,11 +9334,12 @@ packages: safe-buffer: 5.2.1 dev: true - /stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + /stringify-entities@3.1.0: + resolution: {integrity: sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==} dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 + character-entities-html4: 1.1.4 + character-entities-legacy: 1.1.4 + xtend: 4.0.2 dev: false /strip-ansi@4.0.0: @@ -10068,44 +9774,35 @@ packages: set-value: 2.0.1 dev: true - /unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - dependencies: - '@types/unist': 3.0.2 - dev: false - - /unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} - dependencies: - '@types/unist': 3.0.2 + /unist-util-is@4.1.0: + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} dev: false - /unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + /unist-util-remove-position@3.0.0: + resolution: {integrity: sha512-17kIOuolVuK16LMb9KyMJlqdfCtlfQY5FjY3Sdo9iC7F5wqdXhNjMq0PBvMpkVNNnAmHxXssUW+rZ9T2zbP0Rg==} dependencies: - '@types/unist': 3.0.2 - unist-util-visit: 5.0.0 + unist-util-visit: 2.0.3 dev: false - /unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + /unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 2.0.10 dev: false - /unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + /unist-util-visit-parents@3.1.1: + resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 + '@types/unist': 2.0.10 + unist-util-is: 4.1.0 dev: false - /unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + /unist-util-visit@2.0.3: + resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} dependencies: - '@types/unist': 3.0.2 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + '@types/unist': 2.0.10 + unist-util-is: 4.1.0 + unist-util-visit-parents: 3.1.1 dev: false /universalify@2.0.0: @@ -10252,11 +9949,11 @@ packages: engines: {node: '>= 0.8'} dev: true - /vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + /vfile-message@2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 + '@types/unist': 2.0.10 + unist-util-stringify-position: 2.0.3 dev: false /vite-node@0.34.5(@types/node@20.6.0): @@ -10814,6 +10511,11 @@ packages: optional: true dev: true + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -10874,6 +10576,6 @@ packages: strip-indent: 2.0.0 dev: true - /zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + /zwitch@1.0.5: + resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} dev: false diff --git a/src/core/transform_MDX.ts b/src/core/transform_MDX.ts index 4180f99..31e706d 100644 --- a/src/core/transform_MDX.ts +++ b/src/core/transform_MDX.ts @@ -1,26 +1,22 @@ import { type Position } from '@vue/compiler-dom'; -import { fromMarkdown } from 'mdast-util-from-markdown'; -import { mdxJsxFromMarkdown } from 'mdast-util-mdx-jsx'; -import { mdxjs } from 'micromark-extension-mdxjs'; -import { visit } from 'unist-util-visit'; +import fromMarkdown from 'mdast-util-from-markdown'; +import { fromMarkdown as mdxJsxFromMarkdown } from 'mdast-util-mdx-jsx'; +import mdxjs from 'micromark-extension-mdxjs'; +import visit from 'unist-util-visit'; const mdxJsxRE = /^mdxJsx/; export function transform_MDX(code: string, cb: (pos: Position) => void) { const ast = fromMarkdown(code, 'utf-8', { extensions: [mdxjs()], - mdastExtensions: [mdxJsxFromMarkdown()], + mdastExtensions: [mdxJsxFromMarkdown], }); - visit( - ast, - (node) => mdxJsxRE.test(node.type), - (node) => { - if ('name' in node && node.name != null) { - const { start } = node.position!; - const offset = start.offset! + node.name.length + 1; + visit(ast, (node) => { + if (mdxJsxRE.test(node.type) && 'name' in node && node.name != null) { + const { start } = node.position!; + const offset = start.offset! + (node.name as any).length + 1; - cb({ ...start, offset }); - } - }, - ); + cb({ ...start, offset }); + } + }); } From 11795bc5ab872ec59273c3f22632ab213b2a6e73 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Tue, 2 Jan 2024 20:17:08 +0800 Subject: [PATCH 13/21] chore: release v0.0.4 (#26) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cb2ae96..1b9d992 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unplugin-vue-source", - "version": "0.0.3", + "version": "0.0.4", "packageManager": "pnpm@8.6.8", "description": "Add a __source prop to all Elements", "author": "zjxxxxxxxxx <954270063@qq.com>", From 923d82f2f18a8076d79cb6b043755b1a26743dab Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Thu, 6 Jun 2024 20:33:52 +0800 Subject: [PATCH 14/21] fix: `sfc` error (#27) --- README.md | 16 +++++++++------- src/core/index.ts | 4 ++-- src/core/transform.ts | 8 ++++---- src/core/transform_JSX.ts | 4 ++-- src/types.ts | 14 ++++++++------ test/fixtures/vue-skip/input.vue | 3 --- test/fixtures/vue-skip/options.ts | 4 ---- test/fixtures/vue-skip/output.vue | 3 --- 8 files changed, 25 insertions(+), 31 deletions(-) delete mode 100644 test/fixtures/vue-skip/input.vue delete mode 100644 test/fixtures/vue-skip/options.ts delete mode 100644 test/fixtures/vue-skip/output.vue diff --git a/README.md b/README.md index 6fe6fc9..360d70f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Add a \_\_source prop to all Elements. - 🌈 Supports `Vue2` and `Vue3`. - 🪐 Support add to ``. -- ✨ JSX support in `.vue`, `.jsx`, `.tsx`. +- ✨ JSX support in `.vue`, `.jsx`, `.tsx`, `.mdx`. - 😃 Supports `Vite`, `Webpack`, `Rspack`, `Vue CLI`, `Rollup`, `esbuild`. > For development only @@ -213,11 +213,6 @@ The following show the default values of the configuration ```ts export interface Options { - /** @default '**\/*.{vue,jsx,tsx}' */ - include?: string | RegExp | (string | RegExp)[]; - /** @default 'node_modules/**' */ - exclude?: string | RegExp | (string | RegExp)[]; - /** * source root path * @@ -230,13 +225,20 @@ export interface Options { * @default false */ sourceMap?: boolean; - /** * Array containing the plugins that you want to enable. * * @default ['jsx', 'typescript'] */ babelParserPlugins?: ParserPlugin[]; + /** + * @default '\/**\/*.{vue,jsx,tsx}' + */ + include?: string | RegExp | (string | RegExp)[]; + /** + * @default '\/node_modules\/**\/*' + */ + exclude?: string | RegExp | (string | RegExp)[]; } ``` diff --git a/src/core/index.ts b/src/core/index.ts index 648a0fc..1018a4c 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -31,11 +31,11 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { function resolveOptions(opts: Options): ResolvedOptions { return { - include: opts.include ?? '**/*.{vue,jsx,tsx}', - exclude: opts.exclude ?? 'node_modules/**', root: opts.root ?? process.cwd(), sourceMap: opts.sourceMap ?? false, babelParserPlugins: opts.babelParserPlugins ?? [], + include: opts.include ?? '/**/*.{vue,jsx,tsx}', + exclude: opts.exclude ?? '/node_modules/**/*', }; } diff --git a/src/core/transform.ts b/src/core/transform.ts index 3eb63a7..3b1359b 100644 --- a/src/core/transform.ts +++ b/src/core/transform.ts @@ -7,16 +7,16 @@ import { transform_SFC } from './transform_SFC'; import { transform_MDX } from './transform_MDX'; import { transform_JSX } from './transform_JSX'; -const skipRE = new RegExp(` ${TRACE_ID}=['"].+:[0-9]+:[0-9]+['"]`); - export function transform(code: string, id: string, opts: ResolvedOptions) { - if (skipRE.test(code)) return; - const { root, sourceMap } = opts; let s: MagicString; const parsed = parse_ID(id, root); + if (parsed.query[TRACE_ID]) { + return; + } + if (parsed.isSfc) { transform_SFC(code, replace, opts); } else if (parsed.isMdx) { diff --git a/src/core/transform_JSX.ts b/src/core/transform_JSX.ts index 0c66c47..04a8169 100644 --- a/src/core/transform_JSX.ts +++ b/src/core/transform_JSX.ts @@ -1,6 +1,6 @@ import { type Position } from '@vue/compiler-dom'; import { traverse, types as t } from '@babel/core'; -import { parse, ParserPlugin } from '@babel/parser'; +import { parse } from '@babel/parser'; import { type ResolvedOptions } from '../types'; export function transform_JSX( @@ -24,7 +24,7 @@ export function transform_JSX( const ast = parse(code, { sourceType: 'unambiguous', - plugins: [...pluginSet] as ParserPlugin[], + plugins: Array.from(pluginSet), startLine, // babel start at 0 startColumn: startColumn - 1, diff --git a/src/types.ts b/src/types.ts index 9bc3dda..fa7b55c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,11 +1,6 @@ import { ParserPlugin } from '@babel/parser'; export interface Options { - /** @default '**\/*.{vue,jsx,tsx}' */ - include?: string | RegExp | (string | RegExp)[]; - /** @default 'node_modules/**' */ - exclude?: string | RegExp | (string | RegExp)[]; - /** * source root path * @@ -18,13 +13,20 @@ export interface Options { * @default false */ sourceMap?: boolean; - /** * Array containing the plugins that you want to enable. * * @default ['jsx', 'typescript'] */ babelParserPlugins?: ParserPlugin[]; + /** + * @default '\/**\/*.{vue,jsx,tsx}' + */ + include?: string | RegExp | (string | RegExp)[]; + /** + * @default '\/node_modules\/**\/*' + */ + exclude?: string | RegExp | (string | RegExp)[]; } export type ResolvedOptions = Required; diff --git a/test/fixtures/vue-skip/input.vue b/test/fixtures/vue-skip/input.vue deleted file mode 100644 index a1364ce..0000000 --- a/test/fixtures/vue-skip/input.vue +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/test/fixtures/vue-skip/options.ts b/test/fixtures/vue-skip/options.ts deleted file mode 100644 index 19d8e2b..0000000 --- a/test/fixtures/vue-skip/options.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default { - root: process.cwd(), - sourceMap: false, -}; diff --git a/test/fixtures/vue-skip/output.vue b/test/fixtures/vue-skip/output.vue deleted file mode 100644 index a1364ce..0000000 --- a/test/fixtures/vue-skip/output.vue +++ /dev/null @@ -1,3 +0,0 @@ - From 08c0f4593a25c90982db6a601df6edb677ed96f6 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Thu, 6 Jun 2024 21:02:14 +0800 Subject: [PATCH 15/21] fix: Uncompiled `SFC` under `webpack` (#28) --- src/core/index.ts | 8 ++++++-- src/core/transform.ts | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/core/index.ts b/src/core/index.ts index 1018a4c..f32acac 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -5,7 +5,10 @@ import { isDev } from './isDev'; import { parse_ID } from './parse_ID'; import { transform } from './transform'; -export const unpluginFactory: UnpluginFactory = (options = {}) => { +export const unpluginFactory: UnpluginFactory = ( + options = {}, + meta, +) => { if (!isDev()) { return { name: 'unplugin-vue-source', @@ -14,6 +17,7 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { const opts = resolveOptions(options); const filter = createFilter(opts.include, opts.exclude); + const isWebpack = meta.framework === 'webpack'; return { name: 'unplugin-vue-source', @@ -24,7 +28,7 @@ export const unpluginFactory: UnpluginFactory = (options = {}) => { return query.raw == null && filter(file); }, transform(code, id) { - return transform(code, id, opts); + return transform(code, id, opts, isWebpack); }, }; }; diff --git a/src/core/transform.ts b/src/core/transform.ts index 3b1359b..a2695e2 100644 --- a/src/core/transform.ts +++ b/src/core/transform.ts @@ -7,13 +7,18 @@ import { transform_SFC } from './transform_SFC'; import { transform_MDX } from './transform_MDX'; import { transform_JSX } from './transform_JSX'; -export function transform(code: string, id: string, opts: ResolvedOptions) { +export function transform( + code: string, + id: string, + opts: ResolvedOptions, + isWebpack = false, +) { const { root, sourceMap } = opts; let s: MagicString; const parsed = parse_ID(id, root); - if (parsed.query[TRACE_ID]) { + if (!isWebpack && parsed.query[TRACE_ID]) { return; } From c00a0cc40f49f8c23b5330b6ad3cf14973503fb2 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Mon, 10 Jun 2024 13:03:03 +0800 Subject: [PATCH 16/21] chore: Modify default values for options (#29) --- README.md | 4 ++-- src/core/index.ts | 4 ++-- src/core/transform_SFC.ts | 4 ++-- src/types.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 360d70f..b13954d 100644 --- a/README.md +++ b/README.md @@ -232,11 +232,11 @@ export interface Options { */ babelParserPlugins?: ParserPlugin[]; /** - * @default '\/**\/*.{vue,jsx,tsx}' + * @default /\.(vue|jsx|tsx|mdx)$/ */ include?: string | RegExp | (string | RegExp)[]; /** - * @default '\/node_modules\/**\/*' + * @default /\/node_modules\// */ exclude?: string | RegExp | (string | RegExp)[]; } diff --git a/src/core/index.ts b/src/core/index.ts index f32acac..90d20be 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -38,8 +38,8 @@ function resolveOptions(opts: Options): ResolvedOptions { root: opts.root ?? process.cwd(), sourceMap: opts.sourceMap ?? false, babelParserPlugins: opts.babelParserPlugins ?? [], - include: opts.include ?? '/**/*.{vue,jsx,tsx}', - exclude: opts.exclude ?? '/node_modules/**/*', + include: opts.include ?? /\.(vue|jsx|tsx|mdx)$/, + exclude: opts.exclude ?? /\/node_modules\//, }; } diff --git a/src/core/transform_SFC.ts b/src/core/transform_SFC.ts index 5e2b6ae..e8308c7 100644 --- a/src/core/transform_SFC.ts +++ b/src/core/transform_SFC.ts @@ -33,13 +33,13 @@ export function transform_SFC( ], }); - const jsxOpts = resolveJsxOptsByScript(ast); + const jsxOpts = resolveJsxOptsForScript(ast); if (jsxOpts) { transform_JSX(jsxOpts.code, cb, jsxOpts, opts); } } -function resolveJsxOptsByScript(ast: RootNode) { +function resolveJsxOptsForScript(ast: RootNode) { const scriptNode = (ast.children as ElementNode[]).find( (node) => node.tag === 'script', ); diff --git a/src/types.ts b/src/types.ts index fa7b55c..23b7e48 100644 --- a/src/types.ts +++ b/src/types.ts @@ -20,11 +20,11 @@ export interface Options { */ babelParserPlugins?: ParserPlugin[]; /** - * @default '\/**\/*.{vue,jsx,tsx}' + * @default /\.(vue|jsx|tsx|mdx)$/ */ include?: string | RegExp | (string | RegExp)[]; /** - * @default '\/node_modules\/**\/*' + * @default /\/node_modules\// */ exclude?: string | RegExp | (string | RegExp)[]; } From 6ab47eded51d69937c2ef70b950ff12d67b52f42 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Mon, 10 Jun 2024 13:31:12 +0800 Subject: [PATCH 17/21] chore: release v0.0.5 (#30) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1b9d992..69c97db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unplugin-vue-source", - "version": "0.0.4", + "version": "0.0.5", "packageManager": "pnpm@8.6.8", "description": "Add a __source prop to all Elements", "author": "zjxxxxxxxxx <954270063@qq.com>", From 217cf07cbdc264c6a1ca0e68c68a4e43a3e4c237 Mon Sep 17 00:00:00 2001 From: zjxxxxxxxxx <43126836+zjxxxxxxxxx@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:14:26 +0800 Subject: [PATCH 18/21] fix: Remove the slash before the relative path (#31) --- src/core/parse_ID.ts | 5 ++++- test/fixtures/jsx/output.tsx | 2 +- test/fixtures/md/output.md | 4 ++-- test/fixtures/mdx/output.mdx | 4 ++-- test/fixtures/root/output.vue | 4 ++-- test/fixtures/source-map/output.vue | 4 ++-- test/fixtures/source-map/source-map.json | 2 +- test/fixtures/vue-setup-jsx/output.vue | 8 ++++---- test/fixtures/vue-with-jsx/output.vue | 6 ++---- test/fixtures/vue/output.vue | 4 ++-- 10 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/core/parse_ID.ts b/src/core/parse_ID.ts index e0d3f37..1dc5d55 100644 --- a/src/core/parse_ID.ts +++ b/src/core/parse_ID.ts @@ -9,13 +9,16 @@ export interface Query extends Record { export function parse_ID(id: string, root = '') { const [file, rawQuery] = id.split('?', 2); + const filename = file.startsWith(root) + ? file.replace(root, '').replace(/^\//, '') + : file; const ext = extname(file).slice(1); const query = ( rawQuery ? Object.fromEntries(new URLSearchParams(rawQuery)) : {} ) as Query; return { - file: file.replace(root, ''), + file: filename, isSfc: ext === 'vue', isTsx: ext.startsWith('ts'), isMdx: ext.startsWith('md'), diff --git a/test/fixtures/jsx/output.tsx b/test/fixtures/jsx/output.tsx index 7a787eb..d84e9f4 100644 --- a/test/fixtures/jsx/output.tsx +++ b/test/fixtures/jsx/output.tsx @@ -1,3 +1,3 @@ export default () => { - return
test
; + return
test
; }; diff --git a/test/fixtures/md/output.md b/test/fixtures/md/output.md index 8cefa00..4e5b773 100644 --- a/test/fixtures/md/output.md +++ b/test/fixtures/md/output.md @@ -1,5 +1,5 @@ # MD -
-
test
+
+
test
diff --git a/test/fixtures/mdx/output.mdx b/test/fixtures/mdx/output.mdx index e94de47..3b126a0 100644 --- a/test/fixtures/mdx/output.mdx +++ b/test/fixtures/mdx/output.mdx @@ -2,6 +2,6 @@ import Mdx from 'mdx'; # MDX - -
test
+ +
test
diff --git a/test/fixtures/root/output.vue b/test/fixtures/root/output.vue index 8ae6455..d3f66fd 100644 --- a/test/fixtures/root/output.vue +++ b/test/fixtures/root/output.vue @@ -1,3 +1,3 @@ -