diff --git a/README.md b/README.md
index 280a5b2..f683176 100644
--- a/README.md
+++ b/README.md
@@ -16,6 +16,24 @@ import { parseMd } from '@lint-md/parser';
const ast = parseMd('你的 Markdown 文本');
```
+### MDX input
+
+Use `parseMdx` for MDX files. It keeps ESM, JSX, and JavaScript expressions in separate nodes.
+
+```ts
+import { parseMdx, parseMdxWithSourceMap } from '@lint-md/parser';
+
+const input = 'export const x = 1\n\nFix text';
+const ast = parseMdx(input);
+const { sourceMap } = parseMdxWithSourceMap(input);
+```
+
+The parser maps Markdown `text`, `inlineCode`, `code`, and link URL fields.
+It does not map JSX attribute values or JavaScript expression values.
+JSX attribute nodes have no source position in the MDX AST.
+Use the JSX element position to read its full source with `sourceMap.getRaw(element)`.
+Apply fixes only to mapped Markdown fields. Keep ESM, JSX attributes, and expressions unchanged.
+
### 序列化说明
`revertMdAstNode` 会将 AST 序列化为 Markdown,但 **不保证恢复原始文本**。
@@ -106,6 +124,7 @@ sourceMap.getRaw(textNode); // 'A&B'
```bash
pnpm run build
pnpm run test:package
+pnpm run test:mdx3
```
`test:package` 会打包并安装实际 tarball,然后验证 CommonJS、ESModule 和 TypeScript 类型入口。
diff --git a/__tests__/helpers.ts b/__tests__/helpers.ts
index 6fb15a3..600cb25 100644
--- a/__tests__/helpers.ts
+++ b/__tests__/helpers.ts
@@ -1,9 +1,11 @@
const parser = require('../dist/lint-md-parser.cjs');
export const {
parseMd,
+ parseMdx,
revertMdAstNode,
stringifyMdAst,
parseMdWithSourceMap,
+ parseMdxWithSourceMap,
SourceMapError,
SourceMapConsistencyError,
SourceMapUnavailableError,
diff --git a/__tests__/mdx.spec.ts b/__tests__/mdx.spec.ts
new file mode 100644
index 0000000..545f39c
--- /dev/null
+++ b/__tests__/mdx.spec.ts
@@ -0,0 +1,109 @@
+import {
+ parseMd,
+ parseMdx,
+ parseMdxWithSourceMap,
+ SourceMapUnavailableError,
+} from './helpers';
+
+const source = [
+ "import Card from './Card'",
+ "export const label = 'Keep spaces'",
+ '',
+ '# Fix heading',
+ '',
+ 'Fix body',
+ '',
+ 'Fix prose {label} here.',
+].join('\n');
+
+function visit(node: any, callback: (node: any) => void): void {
+ callback(node);
+ for (const child of node.children || []) visit(child, callback);
+}
+
+describe('MDX parsing', () => {
+ test('keeps MDX syntax distinct from Markdown text', () => {
+ const ast = parseMdx(source);
+ const types: string[] = [];
+ visit(ast, node => types.push(node.type));
+ expect(types).toEqual(expect.arrayContaining([
+ 'mdxjsEsm',
+ 'mdxJsxTextElement',
+ 'mdxTextExpression',
+ 'heading',
+ 'text',
+ ]));
+
+ const jsx = ast.children.find((node: any) => node.type === 'paragraph') as any;
+ const element = jsx.children[0];
+ expect(element.attributes[0].value).toBe('Keep spaces');
+ expect(element.attributes[1].value.value).toBe('1 + 2');
+ expect(element.children[0].value).toBe('Fix body');
+ expect(parseMd('# Plain Markdown').children[0].type).toBe('heading');
+ });
+
+ test('maps Markdown text while preserving code and JSX attributes', () => {
+ const { ast, sourceMap } = parseMdxWithSourceMap(source);
+ expect(JSON.parse(JSON.stringify(ast))).toEqual(
+ JSON.parse(JSON.stringify(parseMdx(source))),
+ );
+
+ const edits: Array<{ start: number; end: number; replacement: string }> = [];
+ visit(ast, node => {
+ if (node.type !== 'text') return;
+ const index = node.value.indexOf(' ');
+ if (index < 0) return;
+ const range = sourceMap.getSourceRange(node, index, index + 2);
+ expect(source.slice(range.start.offset, range.end.offset)).toBe(' ');
+ edits.push({ start: range.start.offset, end: range.end.offset, replacement: ' ' });
+ });
+
+ expect(edits).toHaveLength(3);
+ let fixed = source;
+ for (const edit of edits.sort((a, b) => b.start - a.start)) {
+ fixed = fixed.slice(0, edit.start) + edit.replacement + fixed.slice(edit.end);
+ }
+ expect(fixed).toContain("export const label = 'Keep spaces'");
+ expect(fixed).toContain('Fix body');
+ expect(fixed).toContain('# Fix heading');
+ expect(fixed).toContain('Fix prose {label} here.');
+ });
+
+ test('uses source spans for MDX nodes and rejects unsupported attributes', () => {
+ const { ast, sourceMap } = parseMdxWithSourceMap(source);
+ const esm = ast.children[0] as any;
+ expect(sourceMap.getRaw(esm)).toBe(
+ "import Card from './Card'\nexport const label = 'Keep spaces'",
+ );
+ const jsx = (ast.children.find((node: any) => node.type === 'paragraph') as any).children[0];
+ expect(sourceMap.getRaw(jsx)).toBe(
+ 'Fix body',
+ );
+ expect(() => sourceMap.getRaw(jsx.attributes[0])).toThrow(SourceMapUnavailableError);
+ });
+
+ test('keeps flow JSX and flow expressions outside Markdown text maps', () => {
+ const input = [
+ 'export const value = "A B"',
+ '',
+ '',
+ 'Fix body',
+ '',
+ '',
+ '{value + 1}',
+ ].join('\n');
+ const { ast, sourceMap } = parseMdxWithSourceMap(input);
+ const flow = ast.children.find((node: any) => node.type === 'mdxJsxFlowElement') as any;
+ const expression = ast.children.find((node: any) => node.type === 'mdxFlowExpression') as any;
+ expect(flow).toBeDefined();
+ expect(expression).toBeDefined();
+ expect(sourceMap.getRaw(flow)).toBe('\nFix body\n');
+ expect(sourceMap.getRaw(expression)).toBe('{value + 1}');
+
+ const textNodes: any[] = [];
+ visit(ast, node => { if (node.type === 'text') textNodes.push(node); });
+ expect(textNodes.map(node => node.value)).toEqual(['Fix body']);
+ expect(sourceMap.getRaw(textNodes[0])).toBe('Fix body');
+ expect(() => sourceMap.getValueSourceIndex(expression)).toThrow(SourceMapUnavailableError);
+ });
+});
diff --git a/__tests__/types/package-exports.mts b/__tests__/types/package-exports.mts
index 1f76734..e3a852c 100644
--- a/__tests__/types/package-exports.mts
+++ b/__tests__/types/package-exports.mts
@@ -1,6 +1,8 @@
import {
parseMd,
+ parseMdx,
parseMdWithSourceMap,
+ parseMdxWithSourceMap,
revertMdAstNode,
stringifyMdAst,
SourceMapError,
@@ -12,6 +14,8 @@ import {
type IndentedCodeSourceInfo,
type MarkdownCodeNode,
type ParsedMarkdownDocument,
+ type ParsedMdxDocument,
+ type PositionedMdxRoot,
type MarkdownLinkNode,
type MarkdownTextNode,
type MarkdownValueSourceIndex,
@@ -23,6 +27,8 @@ const root = parseMd('# ESM');
const rootOffset: number = root.position.start.offset;
const typedRoot: PositionedMarkdownRoot = root;
+const mdxRoot: PositionedMdxRoot = parseMdx('');
+const mdxDoc: ParsedMdxDocument = parseMdxWithSourceMap('{1 + 2}');
const firstNode: PositionedMarkdownNode = root.children[0];
const nodeOffset: number = firstNode.position.end.offset;
@@ -74,6 +80,8 @@ const isSourceMapError: boolean = unavailable instanceof SourceMapError;
void rootOffset;
void typedRoot;
+void mdxRoot;
+void mdxDoc;
void firstNode;
void nodeOffset;
void markdown;
diff --git a/etc/parser.api.md b/etc/parser.api.md
index a8870dd..2243fee 100644
--- a/etc/parser.api.md
+++ b/etc/parser.api.md
@@ -13,6 +13,14 @@ import { InlineCode } from 'mdast';
import { Link } from 'mdast';
import { ListItem } from 'mdast';
import type { Literal } from 'mdast';
+import type { MdxFlowExpression } from 'mdast-util-mdx';
+import type { MdxjsEsm } from 'mdast-util-mdx';
+import type { MdxJsxAttribute } from 'mdast-util-mdx';
+import type { MdxJsxAttributeValueExpression } from 'mdast-util-mdx';
+import type { MdxJsxExpressionAttribute } from 'mdast-util-mdx';
+import type { MdxJsxFlowElement } from 'mdast-util-mdx';
+import type { MdxJsxTextElement } from 'mdast-util-mdx';
+import type { MdxTextExpression } from 'mdast-util-mdx';
import type { Parent } from 'mdast';
import type { PhrasingContent } from 'mdast';
import type { Root } from 'mdast';
@@ -123,12 +131,34 @@ export interface MarkdownValueSourceIndex {
sourceOffsetAt(valueIndex: number): number;
}
+export { MdxFlowExpression }
+
+export { MdxjsEsm }
+
+export { MdxJsxAttribute }
+
+export { MdxJsxAttributeValueExpression }
+
+export { MdxJsxExpressionAttribute }
+
+export { MdxJsxFlowElement }
+
+export { MdxJsxTextElement }
+
+export { MdxTextExpression }
+
// @public
export interface ParsedMarkdownDocument {
ast: PositionedMarkdownRoot;
sourceMap: MarkdownSourceMap;
}
+// @public
+export interface ParsedMdxDocument {
+ ast: PositionedMdxRoot;
+ sourceMap: MarkdownSourceMap;
+}
+
// @public
export interface ParsedPoint {
column: number;
@@ -148,6 +178,12 @@ export const parseMd: (md: string) => PositionedMarkdownRoot;
// @public
export const parseMdWithSourceMap: (md: string) => ParsedMarkdownDocument;
+// @public
+export const parseMdx: (mdx: string) => PositionedMdxRoot;
+
+// @public
+export const parseMdxWithSourceMap: (mdx: string) => ParsedMdxDocument;
+
// @public
export type Positioned = T extends {
children: Array;
@@ -164,6 +200,9 @@ export type PositionedMarkdownNode = Positioned;
// @public
export type PositionedMarkdownRoot = Positioned;
+// @public
+export type PositionedMdxRoot = Positioned;
+
// @public
const revertMdAstNode: (node: MarkdownRoot) => string;
export { revertMdAstNode }
diff --git a/package.json b/package.json
index 1437661..a7ee7f3 100644
--- a/package.json
+++ b/package.json
@@ -44,7 +44,8 @@
"build:dist": "esbuild src/index.ts --bundle --platform=node --format=cjs --outfile=dist/lint-md-parser.cjs --minify && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/lint-md-parser.mjs --minify",
"build:ts-declaration": "tsc && api-extractor run --local --verbose && cp dist/lint-md-parser.d.ts dist/lint-md-parser.d.cts && cp dist/lint-md-parser.d.ts dist/lint-md-parser.d.mts && for f in dist/lint-md-parser.d.ts dist/lint-md-parser.d.cts dist/lint-md-parser.d.mts; do cat scripts/mdast-augment.d.ts >> \"$f\"; done",
"lint": "eslint --ext js,jsx,ts,tsx ./src",
- "test": "jest && pnpm run test:types && pnpm run test:package",
+ "test": "jest && pnpm run test:types && pnpm run test:package && pnpm run test:mdx3",
+ "test:mdx3": "node scripts/test-mdx3.mjs",
"test:types": "tsc -p __tests__/types/tsconfig.json",
"test:package": "publint && node scripts/test-package.mjs",
"prebench:source-map": "pnpm run build",
@@ -57,6 +58,7 @@
},
"devDependencies": {
"@attachments/eslint-config": "^0.3.3",
+ "@mdx-js/mdx": "3.1.1",
"@microsoft/api-extractor": "^7.23.2",
"@types/jest": "^29.5.0",
"@types/node": "^22.0.0",
@@ -76,10 +78,12 @@
"remark-frontmatter": "^4.0.1",
"remark-gfm": "^3.0.1",
"remark-math": "^5.1.1",
+ "remark-mdx": "2.3.0",
"ts-jest": "^29.4.0",
"typescript": "^6.0.3"
},
"dependencies": {
- "@types/mdast": "^3.0.15"
+ "@types/mdast": "^3.0.15",
+ "mdast-util-mdx": "2.0.1"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2fdd366..c5e2f3f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,10 +14,16 @@ importers:
'@types/mdast':
specifier: ^3.0.15
version: 3.0.15
+ mdast-util-mdx:
+ specifier: 2.0.1
+ version: 2.0.1(supports-color@8.1.1)
devDependencies:
'@attachments/eslint-config':
specifier: ^0.3.3
version: 0.3.5(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1)(typescript@6.0.3)
+ '@mdx-js/mdx':
+ specifier: 3.1.1
+ version: 3.1.1(supports-color@8.1.1)
'@microsoft/api-extractor':
specifier: ^7.23.2
version: 7.58.9(@types/node@22.20.0)
@@ -75,6 +81,9 @@ importers:
remark-math:
specifier: ^5.1.1
version: 5.1.1
+ remark-mdx:
+ specifier: 2.3.0
+ version: 2.3.0(supports-color@8.1.1)
ts-jest:
specifier: ^29.4.0
version: 29.4.11(@babel/core@7.29.7(supports-color@8.1.1))(@jest/transform@29.7.0(supports-color@8.1.1))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1))(esbuild@0.28.1)(jest-util@29.7.0)(jest@29.7.0(@types/node@22.20.0)(supports-color@8.1.1))(typescript@6.0.3)
@@ -561,6 +570,9 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
+
'@microsoft/api-extractor-model@7.33.8':
resolution: {integrity: sha512-aIcoQggPyer3B6Ze3usz0YWC/oBwUHfRH5ETUsr+oT2BRA6SfTJl7IKPcPZkX4UR+PohowzW4uMxsvjrn8vm+w==}
@@ -636,6 +648,9 @@ packages:
'@sinonjs/fake-timers@10.3.0':
resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+ '@types/acorn@4.0.6':
+ resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+
'@types/argparse@1.0.38':
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
@@ -654,9 +669,21 @@ packages:
'@types/debug@4.1.13':
resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+
+ '@types/estree@1.0.9':
+ resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+
'@types/graceful-fs@4.1.9':
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
+ '@types/hast@2.3.10':
+ resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
+
+ '@types/hast@3.0.5':
+ resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==}
+
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
@@ -681,6 +708,12 @@ packages:
'@types/mdast@3.0.15':
resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/mdx@2.0.14':
+ resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==}
+
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
@@ -702,6 +735,9 @@ packages:
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@@ -921,6 +957,10 @@ packages:
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
engines: {node: '>= 0.4'}
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -1086,6 +1126,9 @@ packages:
resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
collect-v8-coverage@1.0.3:
resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==}
@@ -1096,6 +1139,9 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
commander@8.3.0:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
engines: {node: '>= 12'}
@@ -1183,6 +1229,9 @@ packages:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'}
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
diff-sequences@27.5.1:
resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
@@ -1277,6 +1326,12 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
+ esast-util-from-estree@2.0.0:
+ resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
+
+ esast-util-from-js@2.0.1:
+ resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+
esbuild@0.28.1:
resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==}
engines: {node: '>=18'}
@@ -1495,6 +1550,33 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+
+ estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+
+ estree-util-is-identifier-name@2.1.0:
+ resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==}
+
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+
+ estree-util-scope@1.0.1:
+ resolution: {integrity: sha512-B0np3dcdxqILX5e9nEi5/Fr4K7gL4oYFVPV1zRa2e9wRCbQoZZNWOZFYyoInvXUPJXBXjss+QXlWLJChDEHDkA==}
+
+ estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+
+ estree-util-visit@1.2.1:
+ resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==}
+
+ estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -1694,6 +1776,15 @@ packages:
resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
engines: {node: '>= 0.4'}
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
+
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
+
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
@@ -1739,6 +1830,9 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
+
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
@@ -2182,6 +2276,10 @@ packages:
makeerror@1.0.12:
resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
+
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
@@ -2201,6 +2299,9 @@ packages:
mdast-util-from-markdown@1.3.1:
resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
+ mdast-util-from-markdown@2.1.0:
+ resolution: {integrity: sha512-KRLgmPaP2H1ul2bpoJkOS+9pAcDAAj9Nu1mqLnh8NLeJG5tlvj42TH80PIGBpROWlRXLk0lDrWNuZCFy/tsB4A==}
+
mdast-util-frontmatter@1.0.1:
resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==}
@@ -2225,18 +2326,54 @@ packages:
mdast-util-math@2.0.2:
resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==}
+ mdast-util-mdx-expression@1.3.2:
+ resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==}
+
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
+
+ mdast-util-mdx-jsx@2.1.4:
+ resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==}
+
+ mdast-util-mdx-jsx@3.2.0:
+ resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
+
+ mdast-util-mdx@2.0.1:
+ resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==}
+
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+
+ mdast-util-mdxjs-esm@1.3.1:
+ resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==}
+
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+
mdast-util-phrasing@3.0.1:
resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
+ mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+
mdast-util-to-markdown@1.5.0:
resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
+ mdast-util-to-markdown@2.2.0:
+ resolution: {integrity: sha512-2Jn/ADrHFFyyniBMi0bncTbJqU78K3/TEYvzvwrWWzD9MYPUa/Gm4r3nOeKFQg/PDM5BsbDYdc8ackW4NTY6NA==}
+
mdast-util-to-string@2.0.0:
resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==}
mdast-util-to-string@3.2.0:
resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
+ mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -2247,6 +2384,9 @@ packages:
micromark-core-commonmark@1.1.0:
resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
+ micromark-core-commonmark@2.0.4:
+ resolution: {integrity: sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==}
+
micromark-extension-directive@2.2.1:
resolution: {integrity: sha512-ZFKZkNaEqAP86IghX1X7sE8NNnx6kFNq9mSBRvEHjArutTCJZ3LYg6VH151lXVb1JHpmIcW/7rX25oMoIHuSug==}
@@ -2277,69 +2417,174 @@ packages:
micromark-extension-math@2.1.2:
resolution: {integrity: sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==}
+ micromark-extension-mdx-expression@1.0.8:
+ resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==}
+
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
+
+ micromark-extension-mdx-jsx@1.0.5:
+ resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==}
+
+ micromark-extension-mdx-jsx@3.0.2:
+ resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
+
+ micromark-extension-mdx-md@1.0.1:
+ resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==}
+
+ micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+
+ micromark-extension-mdxjs-esm@1.0.5:
+ resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==}
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+
+ micromark-extension-mdxjs@1.0.1:
+ resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==}
+
+ micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+
micromark-factory-destination@1.1.0:
resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
+
micromark-factory-label@1.1.0:
resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
+
+ micromark-factory-mdx-expression@1.0.9:
+ resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==}
+
+ micromark-factory-mdx-expression@2.0.3:
+ resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
+
micromark-factory-space@1.1.0:
resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
+ micromark-factory-space@2.1.0:
+ resolution: {integrity: sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==}
+
micromark-factory-title@1.1.0:
resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
+
micromark-factory-whitespace@1.1.0:
resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
+
micromark-util-character@1.2.0:
resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+
micromark-util-chunked@1.1.0:
resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
+
micromark-util-classify-character@1.1.0:
resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
+
micromark-util-combine-extensions@1.1.0:
resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
+
micromark-util-decode-numeric-character-reference@1.1.0:
resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
+
micromark-util-decode-string@1.1.0:
resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
+
+ micromark-util-edit-map@1.0.0:
+ resolution: {integrity: sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==}
+
micromark-util-encode@1.1.0:
resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-events-to-acorn@1.2.3:
+ resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==}
+
+ micromark-util-events-to-acorn@2.0.3:
+ resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
+
micromark-util-html-tag-name@1.2.0:
resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
+
micromark-util-normalize-identifier@1.1.0:
resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
+
micromark-util-resolve-all@1.1.0:
resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
+
micromark-util-sanitize-uri@1.2.0:
resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
micromark-util-subtokenize@1.1.0:
resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
+
micromark-util-symbol@1.1.0:
resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
micromark-util-types@1.1.0:
resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
+ micromark-util-types@2.0.3:
+ resolution: {integrity: sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==}
+
micromark@2.11.4:
resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
micromark@3.2.0:
resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
+ micromark@4.0.3:
+ resolution: {integrity: sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==}
+
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -2552,6 +2797,9 @@ packages:
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ property-information@7.2.0:
+ resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
+
publint@0.3.21:
resolution: {integrity: sha512-OqejcnMV6E9zel2oCrUOJEiiFkGiAAni0A6ibfQNh1k9Gu5z4F+Yso8lllam7AzmV6Do0vp7u3UpZNRBwuXaHQ==}
engines: {node: '>=18'}
@@ -2584,6 +2832,20 @@ packages:
resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
engines: {node: '>=8'}
+ recma-build-jsx@1.0.0:
+ resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
+
+ recma-jsx@1.0.1:
+ resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ recma-parse@1.0.0:
+ resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
+
+ recma-stringify@1.0.0:
+ resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
+
reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
@@ -2600,6 +2862,9 @@ packages:
resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
engines: {node: '>=8'}
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
remark-directive@2.0.1:
resolution: {integrity: sha512-oosbsUAkU/qmUE78anLaJePnPis4ihsE7Agp0T/oqTzvTea8pOiaYEtfInU/+xMOVTS9PN5AhGOiaIVe4GD8gw==}
@@ -2612,9 +2877,21 @@ packages:
remark-math@5.1.1:
resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==}
+ remark-mdx@2.3.0:
+ resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==}
+
+ remark-mdx@3.1.1:
+ resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
+
remark-parse@10.0.2:
resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
+ remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+
+ remark-rehype@11.1.2:
+ resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
+
remark-stringify@10.0.3:
resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==}
@@ -2757,6 +3034,13 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
spdx-correct@3.2.0:
resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
@@ -2838,6 +3122,12 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
+
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
+
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -2872,6 +3162,9 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
@@ -2989,21 +3282,48 @@ packages:
unified@10.1.2:
resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+
unist-util-is@5.2.1:
resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+
+ unist-util-position-from-estree@1.1.2:
+ resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==}
+
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-remove-position@4.0.2:
+ resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==}
+
unist-util-stringify-position@2.0.3:
resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
unist-util-stringify-position@3.0.3:
resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
unist-util-visit-parents@5.1.3:
resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
+
unist-util-visit@4.1.2:
resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+ unist-util-visit@5.1.0:
+ resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
+
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
@@ -3035,9 +3355,15 @@ packages:
vfile-message@3.1.4:
resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
+
vfile@5.3.7:
resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
vue-eslint-parser@9.4.3:
resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
engines: {node: ^14.17.0 || >=16.0.0}
@@ -3713,6 +4039,36 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@mdx-js/mdx@3.1.1(supports-color@8.1.1)':
+ dependencies:
+ '@types/estree': 1.0.9
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdx': 2.0.14
+ acorn: 8.17.0
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.1
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.6(supports-color@8.1.1)
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.1(acorn@8.17.0)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0(supports-color@8.1.1)
+ remark-mdx: 3.1.1(supports-color@8.1.1)
+ remark-parse: 11.0.0(supports-color@8.1.1)
+ remark-rehype: 11.1.2
+ source-map: 0.7.6
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
'@microsoft/api-extractor-model@7.33.8(@types/node@22.20.0)':
dependencies:
'@microsoft/tsdoc': 0.16.0
@@ -3817,6 +4173,10 @@ snapshots:
dependencies:
'@sinonjs/commons': 3.0.1
+ '@types/acorn@4.0.6':
+ dependencies:
+ '@types/estree': 1.0.9
+
'@types/argparse@1.0.38': {}
'@types/babel__core@7.20.5':
@@ -3844,10 +4204,24 @@ snapshots:
dependencies:
'@types/ms': 2.1.0
+ '@types/estree-jsx@1.0.5':
+ dependencies:
+ '@types/estree': 1.0.9
+
+ '@types/estree@1.0.9': {}
+
'@types/graceful-fs@4.1.9':
dependencies:
'@types/node': 22.20.0
+ '@types/hast@2.3.10':
+ dependencies:
+ '@types/unist': 2.0.11
+
+ '@types/hast@3.0.5':
+ dependencies:
+ '@types/unist': 2.0.11
+
'@types/istanbul-lib-coverage@2.0.6': {}
'@types/istanbul-lib-report@3.0.3':
@@ -3873,6 +4247,12 @@ snapshots:
dependencies:
'@types/unist': 2.0.11
+ '@types/mdast@4.0.4':
+ dependencies:
+ '@types/unist': 2.0.11
+
+ '@types/mdx@2.0.14': {}
+
'@types/ms@2.1.0': {}
'@types/node@20.19.43':
@@ -3891,6 +4271,8 @@ snapshots:
'@types/unist@2.0.11': {}
+ '@types/unist@3.0.3': {}
+
'@types/yargs-parser@21.0.3': {}
'@types/yargs@17.0.35':
@@ -4184,6 +4566,8 @@ snapshots:
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
+ astring@1.9.0: {}
+
async-function@1.0.0: {}
available-typed-arrays@1.0.7:
@@ -4360,6 +4744,8 @@ snapshots:
co@4.6.0: {}
+ collapse-white-space@2.1.0: {}
+
collect-v8-coverage@1.0.3: {}
color-convert@2.0.1:
@@ -4368,6 +4754,8 @@ snapshots:
color-name@1.1.4: {}
+ comma-separated-tokens@2.0.3: {}
+
commander@8.3.0: {}
concat-map@0.0.1: {}
@@ -4453,6 +4841,10 @@ snapshots:
detect-newline@3.1.0: {}
+ devlop@1.1.0:
+ dependencies:
+ dequal: 2.0.3
+
diff-sequences@27.5.1: {}
diff-sequences@29.6.3: {}
@@ -4610,6 +5002,20 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
+ esast-util-from-estree@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+
+ esast-util-from-js@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.17.0
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
esbuild@0.28.1:
optionalDependencies:
'@esbuild/aix-ppc64': 0.28.1
@@ -4935,6 +5341,46 @@ snapshots:
estraverse@5.3.0: {}
+ estree-util-attach-comments@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.9
+
+ estree-util-build-jsx@3.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
+
+ estree-util-is-identifier-name@2.1.0: {}
+
+ estree-util-is-identifier-name@3.0.0: {}
+
+ estree-util-scope@1.0.1:
+ dependencies:
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+
+ estree-util-to-js@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.6
+
+ estree-util-visit@1.2.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 2.0.11
+
+ estree-util-visit@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.9
+
esutils@2.0.3: {}
execa@5.1.1:
@@ -5158,6 +5604,51 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hast-util-to-estree@3.1.3(supports-color@8.1.1):
+ dependencies:
+ '@types/estree': 1.0.9
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ 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.1(supports-color@8.1.1)
+ mdast-util-mdx-jsx: 3.2.0(supports-color@8.1.1)
+ mdast-util-mdxjs-esm: 2.0.1(supports-color@8.1.1)
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-jsx-runtime@2.3.6(supports-color@8.1.1):
+ dependencies:
+ '@types/estree': 1.0.9
+ '@types/hast': 3.0.5
+ '@types/unist': 3.0.3
+ 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.1(supports-color@8.1.1)
+ mdast-util-mdx-jsx: 3.2.0(supports-color@8.1.1)
+ mdast-util-mdxjs-esm: 2.0.1(supports-color@8.1.1)
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-whitespace@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.5
+
hosted-git-info@2.8.9: {}
html-escaper@2.0.2: {}
@@ -5196,6 +5687,8 @@ snapshots:
inherits@2.0.4: {}
+ inline-style-parser@0.2.7: {}
+
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -5852,6 +6345,8 @@ snapshots:
dependencies:
tmpl: 1.0.5
+ markdown-extensions@2.0.0: {}
+
markdown-table@3.0.4: {}
math-intrinsics@1.1.0: {}
@@ -5902,6 +6397,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ mdast-util-from-markdown@2.1.0(supports-color@8.1.1):
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.3(supports-color@8.1.1)
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
mdast-util-frontmatter@1.0.1:
dependencies:
'@types/mdast': 3.0.15
@@ -5958,11 +6470,124 @@ snapshots:
longest-streak: 3.1.0
mdast-util-to-markdown: 1.5.0
+ mdast-util-mdx-expression@1.3.2(supports-color@8.1.1):
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1(supports-color@8.1.1)
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-expression@2.0.1(supports-color@8.1.1):
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.1.0(supports-color@8.1.1)
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-jsx@2.1.4(supports-color@8.1.1):
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ ccount: 2.0.1
+ mdast-util-from-markdown: 1.3.1(supports-color@8.1.1)
+ mdast-util-to-markdown: 1.5.0
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-remove-position: 4.0.2
+ unist-util-stringify-position: 3.0.3
+ vfile-message: 3.1.4
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-jsx@3.2.0(supports-color@8.1.1):
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.1.0(supports-color@8.1.1)
+ mdast-util-to-markdown: 2.2.0
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx@2.0.1(supports-color@8.1.1):
+ dependencies:
+ mdast-util-from-markdown: 1.3.1(supports-color@8.1.1)
+ mdast-util-mdx-expression: 1.3.2(supports-color@8.1.1)
+ mdast-util-mdx-jsx: 2.1.4(supports-color@8.1.1)
+ mdast-util-mdxjs-esm: 1.3.1(supports-color@8.1.1)
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx@3.0.0(supports-color@8.1.1):
+ dependencies:
+ mdast-util-from-markdown: 2.1.0(supports-color@8.1.1)
+ mdast-util-mdx-expression: 2.0.1(supports-color@8.1.1)
+ mdast-util-mdx-jsx: 3.2.0(supports-color@8.1.1)
+ mdast-util-mdxjs-esm: 2.0.1(supports-color@8.1.1)
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdxjs-esm@1.3.1(supports-color@8.1.1):
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1(supports-color@8.1.1)
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdxjs-esm@2.0.1(supports-color@8.1.1):
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.1.0(supports-color@8.1.1)
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
mdast-util-phrasing@3.0.1:
dependencies:
'@types/mdast': 3.0.15
unist-util-is: 5.2.1
+ mdast-util-phrasing@4.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.1
+
+ mdast-util-to-hast@13.2.1:
+ dependencies:
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.2
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+
mdast-util-to-markdown@1.5.0:
dependencies:
'@types/mdast': 3.0.15
@@ -5974,12 +6599,30 @@ snapshots:
unist-util-visit: 4.1.2
zwitch: 2.0.4
+ mdast-util-to-markdown@2.2.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-character: 2.1.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ unist-util-visit: 5.1.0
+ zwitch: 2.0.4
+
mdast-util-to-string@2.0.0: {}
mdast-util-to-string@3.2.0:
dependencies:
'@types/mdast': 3.0.15
+ mdast-util-to-string@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
@@ -6003,6 +6646,26 @@ snapshots:
micromark-util-types: 1.1.0
uvu: 0.5.6
+ micromark-core-commonmark@2.0.4:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.1.0
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-edit-map: 1.0.0
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-extension-directive@2.2.1:
dependencies:
micromark-factory-space: 1.1.0
@@ -6088,12 +6751,120 @@ snapshots:
micromark-util-types: 1.1.0
uvu: 0.5.6
+ micromark-extension-mdx-expression@1.0.8:
+ dependencies:
+ '@types/estree': 1.0.9
+ micromark-factory-mdx-expression: 1.0.9
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-events-to-acorn: 1.2.3
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-extension-mdx-expression@3.0.1:
+ dependencies:
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-extension-mdx-jsx@1.0.5:
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.9
+ estree-util-is-identifier-name: 2.1.0
+ micromark-factory-mdx-expression: 1.0.9
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ vfile-message: 3.1.4
+
+ micromark-extension-mdx-jsx@3.0.2:
+ dependencies:
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+ vfile-message: 4.0.3
+
+ micromark-extension-mdx-md@1.0.1:
+ dependencies:
+ micromark-util-types: 1.1.0
+
+ micromark-extension-mdx-md@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.3
+
+ micromark-extension-mdxjs-esm@1.0.5:
+ dependencies:
+ '@types/estree': 1.0.9
+ micromark-core-commonmark: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-events-to-acorn: 1.2.3
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-position-from-estree: 1.1.2
+ uvu: 0.5.6
+ vfile-message: 3.1.4
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.4
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ micromark-extension-mdxjs@1.0.1:
+ dependencies:
+ acorn: 8.17.0
+ acorn-jsx: 5.3.2(acorn@8.17.0)
+ micromark-extension-mdx-expression: 1.0.8
+ micromark-extension-mdx-jsx: 1.0.5
+ micromark-extension-mdx-md: 1.0.1
+ micromark-extension-mdxjs-esm: 1.0.5
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-extension-mdxjs@3.0.0:
+ dependencies:
+ acorn: 8.17.0
+ acorn-jsx: 5.3.2(acorn@8.17.0)
+ micromark-extension-mdx-expression: 3.0.1
+ micromark-extension-mdx-jsx: 3.0.2
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-factory-destination@1.1.0:
dependencies:
micromark-util-character: 1.2.0
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
+ micromark-factory-destination@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-factory-label@1.1.0:
dependencies:
micromark-util-character: 1.2.0
@@ -6101,11 +6872,46 @@ snapshots:
micromark-util-types: 1.1.0
uvu: 0.5.6
+ micromark-factory-label@2.0.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-factory-mdx-expression@1.0.9:
+ dependencies:
+ '@types/estree': 1.0.9
+ micromark-util-character: 1.2.0
+ micromark-util-events-to-acorn: 1.2.3
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-position-from-estree: 1.1.2
+ uvu: 0.5.6
+ vfile-message: 3.1.4
+
+ micromark-factory-mdx-expression@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.9
+ devlop: 1.1.0
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
micromark-factory-space@1.1.0:
dependencies:
micromark-util-character: 1.2.0
micromark-util-types: 1.1.0
+ micromark-factory-space@2.1.0:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.3
+
micromark-factory-title@1.1.0:
dependencies:
micromark-factory-space: 1.1.0
@@ -6113,6 +6919,13 @@ snapshots:
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
+ micromark-factory-title@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-factory-whitespace@1.1.0:
dependencies:
micromark-factory-space: 1.1.0
@@ -6120,30 +6933,61 @@ snapshots:
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
+ micromark-factory-whitespace@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-util-character@1.2.0:
dependencies:
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
+ micromark-util-character@2.1.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-util-chunked@1.1.0:
dependencies:
micromark-util-symbol: 1.1.0
+ micromark-util-chunked@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
micromark-util-classify-character@1.1.0:
dependencies:
micromark-util-character: 1.2.0
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
+ micromark-util-classify-character@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-util-combine-extensions@1.1.0:
dependencies:
micromark-util-chunked: 1.1.0
micromark-util-types: 1.1.0
+ micromark-util-combine-extensions@2.0.1:
+ dependencies:
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-util-decode-numeric-character-reference@1.1.0:
dependencies:
micromark-util-symbol: 1.1.0
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
micromark-util-decode-string@1.1.0:
dependencies:
decode-named-character-reference: 1.3.0
@@ -6151,24 +6995,74 @@ snapshots:
micromark-util-decode-numeric-character-reference: 1.1.0
micromark-util-symbol: 1.1.0
+ micromark-util-decode-string@2.0.1:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-edit-map@1.0.0:
+ dependencies:
+ micromark-util-types: 2.0.3
+
micromark-util-encode@1.1.0: {}
+ micromark-util-encode@2.0.1: {}
+
+ micromark-util-events-to-acorn@1.2.3:
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.9
+ '@types/unist': 2.0.11
+ estree-util-visit: 1.2.1
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ vfile-message: 3.1.4
+
+ micromark-util-events-to-acorn@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.9
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+ vfile-message: 4.0.3
+
micromark-util-html-tag-name@1.2.0: {}
+ micromark-util-html-tag-name@2.0.1: {}
+
micromark-util-normalize-identifier@1.1.0:
dependencies:
micromark-util-symbol: 1.1.0
+ micromark-util-normalize-identifier@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
micromark-util-resolve-all@1.1.0:
dependencies:
micromark-util-types: 1.1.0
+ micromark-util-resolve-all@2.0.1:
+ dependencies:
+ micromark-util-types: 2.0.3
+
micromark-util-sanitize-uri@1.2.0:
dependencies:
micromark-util-character: 1.2.0
micromark-util-encode: 1.1.0
micromark-util-symbol: 1.1.0
+ micromark-util-sanitize-uri@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
+
micromark-util-subtokenize@1.1.0(patch_hash=e36683b0bd046409af298fe642843b3ea3bf9aca6f5f06eacb7a0f528700556d):
dependencies:
micromark-util-chunked: 1.1.0
@@ -6176,10 +7070,21 @@ snapshots:
micromark-util-types: 1.1.0
uvu: 0.5.6
+ micromark-util-subtokenize@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
micromark-util-symbol@1.1.0: {}
+ micromark-util-symbol@2.0.1: {}
+
micromark-util-types@1.1.0: {}
+ micromark-util-types@2.0.3: {}
+
micromark@2.11.4(supports-color@8.1.1):
dependencies:
debug: 4.4.3(supports-color@8.1.1)
@@ -6209,6 +7114,29 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ micromark@4.0.3(supports-color@8.1.1):
+ dependencies:
+ '@types/debug': 4.1.13
+ debug: 4.4.3(supports-color@8.1.1)
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.4
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-edit-map: 1.0.0
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+ transitivePeerDependencies:
+ - supports-color
+
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -6433,6 +7361,8 @@ snapshots:
object-assign: 4.1.1
react-is: 16.13.1
+ property-information@7.2.0: {}
+
publint@0.3.21:
dependencies:
'@publint/pack': 0.1.5
@@ -6465,6 +7395,35 @@ snapshots:
parse-json: 5.2.0
type-fest: 0.6.0
+ recma-build-jsx@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.9
+ estree-util-build-jsx: 3.0.1
+ vfile: 6.0.3
+
+ recma-jsx@1.0.1(acorn@8.17.0):
+ dependencies:
+ acorn: 8.17.0
+ acorn-jsx: 5.3.2(acorn@8.17.0)
+ estree-util-to-js: 2.0.0
+ recma-parse: 1.0.0
+ recma-stringify: 1.0.0
+ unified: 11.0.5
+
+ recma-parse@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.9
+ esast-util-from-js: 2.0.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ recma-stringify@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.9
+ estree-util-to-js: 2.0.0
+ unified: 11.0.5
+ vfile: 6.0.3
+
reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.9
@@ -6489,6 +7448,14 @@ snapshots:
regexpp@3.2.0: {}
+ rehype-recma@1.0.0(supports-color@8.1.1):
+ dependencies:
+ '@types/estree': 1.0.9
+ '@types/hast': 3.0.5
+ hast-util-to-estree: 3.1.3(supports-color@8.1.1)
+ transitivePeerDependencies:
+ - supports-color
+
remark-directive@2.0.1(supports-color@8.1.1):
dependencies:
'@types/mdast': 3.0.15
@@ -6521,6 +7488,20 @@ snapshots:
micromark-extension-math: 2.1.2
unified: 10.1.2
+ remark-mdx@2.3.0(supports-color@8.1.1):
+ dependencies:
+ mdast-util-mdx: 2.0.1(supports-color@8.1.1)
+ micromark-extension-mdxjs: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.1.1(supports-color@8.1.1):
+ dependencies:
+ mdast-util-mdx: 3.0.0(supports-color@8.1.1)
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
remark-parse@10.0.2(supports-color@8.1.1):
dependencies:
'@types/mdast': 3.0.15
@@ -6529,6 +7510,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ remark-parse@11.0.0(supports-color@8.1.1):
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.1.0(supports-color@8.1.1)
+ micromark-util-types: 2.0.3
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-rehype@11.1.2:
+ dependencies:
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ mdast-util-to-hast: 13.2.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
remark-stringify@10.0.3:
dependencies:
'@types/mdast': 3.0.15
@@ -6688,6 +7686,10 @@ snapshots:
source-map@0.6.1: {}
+ source-map@0.7.6: {}
+
+ space-separated-tokens@2.0.2: {}
+
spdx-correct@3.2.0:
dependencies:
spdx-expression-parse: 3.0.1
@@ -6792,6 +7794,14 @@ snapshots:
strip-json-comments@3.1.1: {}
+ style-to-js@1.1.21:
+ dependencies:
+ style-to-object: 1.0.14
+
+ style-to-object@1.0.14:
+ dependencies:
+ inline-style-parser: 0.2.7
+
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
@@ -6822,6 +7832,8 @@ snapshots:
dependencies:
is-number: 7.0.0
+ trim-lines@3.0.1: {}
+
trough@2.2.0: {}
ts-api-utils@1.4.3(typescript@6.0.3):
@@ -6938,10 +7950,41 @@ snapshots:
trough: 2.2.0
vfile: 5.3.7
+ unified@11.0.5:
+ dependencies:
+ '@types/unist': 3.0.3
+ bail: 2.0.2
+ devlop: 1.1.0
+ extend: 3.0.2
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 6.0.3
+
unist-util-is@5.2.1:
dependencies:
'@types/unist': 2.0.11
+ unist-util-is@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position-from-estree@1.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-position-from-estree@2.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-remove-position@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-visit: 4.1.2
+
unist-util-stringify-position@2.0.3:
dependencies:
'@types/unist': 2.0.11
@@ -6950,17 +7993,32 @@ snapshots:
dependencies:
'@types/unist': 2.0.11
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
unist-util-visit-parents@5.1.3:
dependencies:
'@types/unist': 2.0.11
unist-util-is: 5.2.1
+ unist-util-visit-parents@6.0.2:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
unist-util-visit@4.1.2:
dependencies:
'@types/unist': 2.0.11
unist-util-is: 5.2.1
unist-util-visit-parents: 5.1.3
+ unist-util-visit@5.1.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
universalify@2.0.1: {}
update-browserslist-db@1.2.3(browserslist@4.28.2):
@@ -6998,6 +8056,11 @@ snapshots:
'@types/unist': 2.0.11
unist-util-stringify-position: 3.0.3
+ vfile-message@4.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
+
vfile@5.3.7:
dependencies:
'@types/unist': 2.0.11
@@ -7005,6 +8068,11 @@ snapshots:
unist-util-stringify-position: 3.0.3
vfile-message: 3.1.4
+ vfile@6.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
+
vue-eslint-parser@9.4.3(eslint@8.57.1(supports-color@8.1.1))(supports-color@8.1.1):
dependencies:
debug: 4.4.3(supports-color@8.1.1)
diff --git a/scripts/test-mdx3.mjs b/scripts/test-mdx3.mjs
new file mode 100644
index 0000000..64a8300
--- /dev/null
+++ b/scripts/test-mdx3.mjs
@@ -0,0 +1,91 @@
+import assert from 'node:assert/strict';
+import { compile } from '@mdx-js/mdx';
+import remarkGfm from 'remark-gfm';
+import remarkMath from 'remark-math';
+import { parseMdx, parseMdxWithSourceMap } from '../dist/lint-md-parser.mjs';
+
+const source = [
+ 'export const 用户ID = 42',
+ '',
+ '# 中文English标题',
+ '',
+ '',
+ '',
+ '当前编号:{用户ID}',
+].join('\n');
+
+const { ast, sourceMap } = parseMdxWithSourceMap(source);
+assert.deepEqual(ast, parseMdx(source));
+
+const esm = ast.children.find(node => node.type === 'mdxjsEsm');
+const heading = ast.children.find(node => node.type === 'heading');
+const jsx = ast.children.find(node => node.type === 'mdxJsxFlowElement');
+const paragraph = ast.children.find(node => node.type === 'paragraph');
+assert.ok(esm && heading && jsx && paragraph);
+
+const headingText = heading.children[0];
+const bodyText = paragraph.children[0];
+const expression = paragraph.children[1];
+assert.equal(headingText.type, 'text');
+assert.equal(bodyText.type, 'text');
+assert.equal(expression.type, 'mdxTextExpression');
+assert.equal(esm.value, 'export const 用户ID = 42');
+assert.equal(expression.value, '用户ID');
+assert.equal(jsx.attributes[0].value, '中文English标签');
+assert.equal(sourceMap.getRaw(jsx), '');
+assert.equal(sourceMap.getRaw(headingText), '中文English标题');
+assert.equal(sourceMap.getRaw(bodyText), '当前编号:');
+
+const textValues = [];
+function visit(node) {
+ if (node.type === 'text') textValues.push(node.value);
+ for (const child of node.children || []) visit(child);
+}
+visit(ast);
+assert.deepEqual(textValues, ['中文English标题', '当前编号:']);
+
+const edits = [
+ {
+ range: sourceMap.getSourceRange(headingText, 0, headingText.value.length),
+ value: '中文 English 标题',
+ },
+ {
+ range: sourceMap.getSourceRange(bodyText, 0, bodyText.value.length),
+ value: '当前编号: ',
+ },
+];
+assert.deepEqual(
+ edits.map(({ range }) => source.slice(range.start.offset, range.end.offset)),
+ ['中文English标题', '当前编号:'],
+);
+
+let fixed = source;
+for (const { range, value } of edits.sort((a, b) => b.range.start.offset - a.range.start.offset)) {
+ fixed = fixed.slice(0, range.start.offset) + value + fixed.slice(range.end.offset);
+}
+
+const expected = [
+ 'export const 用户ID = 42',
+ '',
+ '# 中文 English 标题',
+ '',
+ '',
+ '',
+ '当前编号: {用户ID}',
+].join('\n');
+assert.deepEqual(Buffer.from(fixed), Buffer.from(expected));
+
+const fixedDoc = parseMdxWithSourceMap(fixed);
+const fixedEsm = fixedDoc.ast.children.find(node => node.type === 'mdxjsEsm');
+const fixedJsx = fixedDoc.ast.children.find(node => node.type === 'mdxJsxFlowElement');
+const fixedParagraph = fixedDoc.ast.children.find(node => node.type === 'paragraph');
+assert.ok(fixedEsm && fixedJsx && fixedParagraph);
+assert.equal(fixedDoc.sourceMap.getRaw(fixedEsm), sourceMap.getRaw(esm));
+assert.equal(fixedDoc.sourceMap.getRaw(fixedJsx), sourceMap.getRaw(jsx));
+assert.equal(fixedDoc.sourceMap.getRaw(fixedParagraph.children[1]),
+ sourceMap.getRaw(expression));
+assert.equal(fixedJsx.attributes[0].value, jsx.attributes[0].value);
+
+const compiled = await compile(fixed, { remarkPlugins: [remarkGfm, remarkMath] });
+assert.ok(String(compiled).includes('用户ID'));
+assert.ok(String(compiled).includes('中文English标签'));
diff --git a/scripts/test-package.mjs b/scripts/test-package.mjs
index 94f5c07..c7ed12f 100644
--- a/scripts/test-package.mjs
+++ b/scripts/test-package.mjs
@@ -40,7 +40,7 @@ try {
'utf8',
),
);
- assert.deepEqual(Object.keys(installedManifest.dependencies), ['@types/mdast']);
+ assert.deepEqual(Object.keys(installedManifest.dependencies), ['@types/mdast', 'mdast-util-mdx']);
const cjsResult = run('node', [
'-e',
@@ -61,6 +61,13 @@ try {
]);
assert.equal(esmResult, 'root');
+ const mdxResult = run('node', [
+ '--input-type=module',
+ '-e',
+ "import { parseMdx, parseMdxWithSourceMap } from '@lint-md/parser'; const input = ''; process.stdout.write([parseMdx(input).children[0].type, parseMdxWithSourceMap(input).ast.children[0].type].join(','))",
+ ]);
+ assert.equal(mdxResult, 'mdxJsxFlowElement,mdxJsxFlowElement');
+
const esmStringifyResult = run('node', [
'--input-type=module',
'-e',
@@ -100,7 +107,7 @@ try {
' MarkdownRoot,',
' MarkdownTextDirective,',
"} from '@lint-md/parser';",
- "import { parseMd, revertMdAstNode, stringifyMdAst } from '@lint-md/parser';",
+ "import { parseMd, parseMdx, revertMdAstNode, stringifyMdAst } from '@lint-md/parser';",
'',
'const markdown: string = revertMdAstNode(parseMd("# ESM"));',
'const same: boolean = stringifyMdAst === revertMdAstNode;',
@@ -110,6 +117,10 @@ try {
'function assertType(_val: T): void {}',
'',
'const root = parseMd("# test");',
+ 'const mdxRoot = parseMdx("");',
+ 'for (const child of mdxRoot.children) {',
+ ' if (child.type === "mdxjsEsm") assertType(child.value);',
+ '}',
'',
'for (const child of root.children) {',
' if (child.type === "yaml") {',
diff --git a/src/index.ts b/src/index.ts
index 37528cf..e684477 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,5 +1,5 @@
-export { parseMd, revertMdAstNode, revertMdAstNode as stringifyMdAst } from './parse-md';
-export { parseMdWithSourceMap } from './source-map/build-source-map';
+export { parseMd, parseMdx, revertMdAstNode, revertMdAstNode as stringifyMdAst } from './parse-md';
+export { parseMdWithSourceMap, parseMdxWithSourceMap } from './source-map/build-source-map';
export {
SourceMapError,
SourceMapConsistencyError,
@@ -15,4 +15,5 @@ export type {
MarkdownSourceMap,
MarkdownValueSourceIndex,
ParsedMarkdownDocument,
+ ParsedMdxDocument,
} from './source-map/types';
diff --git a/src/parse-md.ts b/src/parse-md.ts
index 5bcdf8f..0c08fc2 100644
--- a/src/parse-md.ts
+++ b/src/parse-md.ts
@@ -1,7 +1,8 @@
import { createParserProcessor } from './remark-config';
-import type { MarkdownRoot, PositionedMarkdownRoot } from './types';
+import type { MarkdownRoot, PositionedMarkdownRoot, PositionedMdxRoot } from './types';
const depsLink = createParserProcessor();
+const mdxProcessor = createParserProcessor('mdx');
/**
* 将 Markdown 解析成 ast
@@ -31,6 +32,15 @@ export const parseMd = (md: string): PositionedMarkdownRoot => {
return depsLink.parse(md) as PositionedMarkdownRoot;
};
+/**
+ * Parse MDX into positioned Markdown and MDX syntax nodes.
+ * Use this function for MDX input so JSX and expressions stay distinct.
+ *
+ * @public
+ */
+export const parseMdx = (mdx: string): PositionedMdxRoot =>
+ mdxProcessor.parse(mdx) as PositionedMdxRoot;
+
/**
* 将 ast 解析成 markdown
*
diff --git a/src/remark-config.ts b/src/remark-config.ts
index 5539914..3c68b0d 100644
--- a/src/remark-config.ts
+++ b/src/remark-config.ts
@@ -3,6 +3,7 @@ import remarkGfm from 'remark-gfm';
import remarkDirective from 'remark-directive';
import remarkMath from 'remark-math';
import { remark } from 'remark';
+import remarkMdx from 'remark-mdx';
import { gfmAutolinkLiteralFromMarkdown } from 'mdast-util-gfm-autolink-literal';
/**
@@ -86,13 +87,18 @@ const positionSafeGfm = function positionSafeGfm(this: {
* Each call returns an independent processor whose own data holds a fresh
* clone of the autolink extension — no shared mutable state between calls.
*/
-export const createParserProcessor = (): ReturnType =>
- remark()
+export type ParserSyntax = 'markdown' | 'mdx';
+
+export const createParserProcessor = (syntax: ParserSyntax = 'markdown'): ReturnType => {
+ const processor = remark()
.use(frontmatter)
.use(remarkGfm)
.use(positionSafeGfm)
.use(remarkDirective)
.use(remarkMath);
+ // The MDX 3 test dependency exposes unified 11 types. remark-mdx 2 uses unified 10 at runtime.
+ return syntax === 'mdx' ? processor.use(remarkMdx as any) : processor;
+};
export interface ParserExtensions {
micromarkExtensions: unknown[]
@@ -106,8 +112,8 @@ export interface ParserExtensions {
* kept literal). Reusing this frozen data is what keeps
* `parseMdWithSourceMap`'s AST identical to `parseMd`'s.
*/
-export const getParserExtensions = (): ParserExtensions => {
- const frozen = createParserProcessor();
+export const getParserExtensions = (syntax: ParserSyntax = 'markdown'): ParserExtensions => {
+ const frozen = createParserProcessor(syntax);
frozen.freeze();
const data = frozen.data();
return {
diff --git a/src/source-map/build-source-map.ts b/src/source-map/build-source-map.ts
index 7048893..559cffc 100644
--- a/src/source-map/build-source-map.ts
+++ b/src/source-map/build-source-map.ts
@@ -24,6 +24,7 @@ import type {
MarkdownSourceMapSegment,
MarkdownValueSourceIndex,
ParsedMarkdownDocument,
+ ParsedMdxDocument,
} from './types';
// Use the same parser extensions as `parseMd`.
@@ -31,7 +32,8 @@ import type {
// Only replace the mdast handlers needed to record mapped values.
// The replacements mirror the matching `mdast-util-from-markdown` AST behavior.
// All other tokens use the standard handlers.
-const { micromarkExtensions, fromMarkdownExtensions } = getParserExtensions();
+const markdownExtensions = getParserExtensions();
+const mdxExtensions = getParserExtensions('mdx');
interface RecordingState {
/** Markdown source used for parser-confirmed indentation spans. */
@@ -333,7 +335,10 @@ function resolveSegmentRange(options: SegmentRangeOptions): ParsedPosition {
*
* @public
*/
-export const parseMdWithSourceMap = (md: string): ParsedMarkdownDocument => {
+const parseWithSourceMap = (
+ md: string,
+ syntax: 'markdown' | 'mdx',
+): ParsedMarkdownDocument => {
const state: RecordingState = {
source: md,
segments: new WeakMap(),
@@ -345,6 +350,9 @@ export const parseMdWithSourceMap = (md: string): ParsedMarkdownDocument => {
emptyUrlOffsets: new WeakMap(),
};
+ const { micromarkExtensions, fromMarkdownExtensions } = syntax === 'mdx'
+ ? mdxExtensions
+ : markdownExtensions;
const tree = fromMarkdown(md, {
extensions: micromarkExtensions as any,
mdastExtensions: [
@@ -694,3 +702,11 @@ export const parseMdWithSourceMap = (md: string): ParsedMarkdownDocument => {
return { ast, sourceMap };
};
+
+/** Parse Markdown and map supported values to source positions. @public */
+export const parseMdWithSourceMap = (md: string): ParsedMarkdownDocument =>
+ parseWithSourceMap(md, 'markdown');
+
+/** Parse MDX and map Markdown values to source positions. @public */
+export const parseMdxWithSourceMap = (mdx: string): ParsedMdxDocument =>
+ parseWithSourceMap(mdx, 'mdx');
diff --git a/src/source-map/types.ts b/src/source-map/types.ts
index eb26ec1..1b27601 100644
--- a/src/source-map/types.ts
+++ b/src/source-map/types.ts
@@ -258,3 +258,11 @@ export interface ParsedMarkdownDocument {
/** Sidecar source map for resolving supported value ranges to raw source. */
sourceMap: MarkdownSourceMap
}
+
+/** Result of {@link parseMdxWithSourceMap}. @public */
+export interface ParsedMdxDocument {
+ /** The positioned MDX AST. */
+ ast: import('../types').PositionedMdxRoot
+ /** Source map for supported Markdown fields. */
+ sourceMap: MarkdownSourceMap
+}
diff --git a/src/types.ts b/src/types.ts
index 211b3f7..7ab4c89 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -7,6 +7,27 @@ import type {
PhrasingContent,
Root,
} from 'mdast';
+import type {
+ MdxFlowExpression,
+ MdxJsxAttribute,
+ MdxJsxAttributeValueExpression,
+ MdxJsxExpressionAttribute,
+ MdxJsxFlowElement,
+ MdxJsxTextElement,
+ MdxTextExpression,
+ MdxjsEsm,
+} from 'mdast-util-mdx';
+
+export type {
+ MdxFlowExpression,
+ MdxJsxAttribute,
+ MdxJsxAttributeValueExpression,
+ MdxJsxExpressionAttribute,
+ MdxJsxFlowElement,
+ MdxJsxTextElement,
+ MdxTextExpression,
+ MdxjsEsm,
+};
export type { Code, Link, ListItem, Text } from 'mdast';
@@ -119,6 +140,9 @@ export type MarkdownInlineCodeNode = import('mdast').InlineCode;
*/
export type PositionedMarkdownRoot = Positioned;
+/** The MDX root includes ESM, JSX, expressions, and Markdown nodes. @public */
+export type PositionedMdxRoot = Positioned;
+
/**
* Any AST node returned by `parseMd`, with non-optional `position`
* (including `start/end.offset`).