@unterberg/nivel 0.2.13 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -639,6 +639,56 @@ var remarkPkgManager = () => {
|
|
|
639
639
|
};
|
|
640
640
|
};
|
|
641
641
|
|
|
642
|
+
// src/mdx/code-blocks/remarkRestoreUnsupportedDirectives.ts
|
|
643
|
+
import { visit as visit5 } from "unist-util-visit";
|
|
644
|
+
var remarkRestoreUnsupportedDirectives = () => {
|
|
645
|
+
return (tree, file) => {
|
|
646
|
+
const replacements = [];
|
|
647
|
+
visit5(tree, (node, index, parent) => {
|
|
648
|
+
if (node.type !== "textDirective" && node.type !== "leafDirective" || !parent || typeof index !== "number") {
|
|
649
|
+
return;
|
|
650
|
+
}
|
|
651
|
+
replacements.push({
|
|
652
|
+
index,
|
|
653
|
+
node,
|
|
654
|
+
parent
|
|
655
|
+
});
|
|
656
|
+
});
|
|
657
|
+
for (const replacement of [...replacements].reverse()) {
|
|
658
|
+
const source = getDirectiveSource(replacement.node, file);
|
|
659
|
+
if (!source) {
|
|
660
|
+
continue;
|
|
661
|
+
}
|
|
662
|
+
if (replacement.node.type === "textDirective") {
|
|
663
|
+
replacement.parent.children.splice(replacement.index, 1, createTextNode(source));
|
|
664
|
+
continue;
|
|
665
|
+
}
|
|
666
|
+
const paragraphNode = {
|
|
667
|
+
type: "paragraph",
|
|
668
|
+
children: [createTextNode(source)]
|
|
669
|
+
};
|
|
670
|
+
replacement.parent.children.splice(replacement.index, 1, paragraphNode);
|
|
671
|
+
}
|
|
672
|
+
};
|
|
673
|
+
};
|
|
674
|
+
var createTextNode = (value) => {
|
|
675
|
+
return {
|
|
676
|
+
type: "text",
|
|
677
|
+
value
|
|
678
|
+
};
|
|
679
|
+
};
|
|
680
|
+
var getDirectiveSource = (node, file) => {
|
|
681
|
+
if (typeof file.value !== "string") {
|
|
682
|
+
return null;
|
|
683
|
+
}
|
|
684
|
+
const start = node.position?.start?.offset;
|
|
685
|
+
const end = node.position?.end?.offset;
|
|
686
|
+
if (typeof start !== "number" || typeof end !== "number" || start >= end) {
|
|
687
|
+
return null;
|
|
688
|
+
}
|
|
689
|
+
return file.value.slice(start, end);
|
|
690
|
+
};
|
|
691
|
+
|
|
642
692
|
// src/mdx/code-blocks/shikiTransformerAutoLinks.ts
|
|
643
693
|
var LINK_RE = /https:\/\/[^\s]*[^.,\s"'`]/g;
|
|
644
694
|
var shikiTransformerAutoLinks = () => {
|
|
@@ -711,7 +761,13 @@ var getCodeBlockMdxPlugins = () => {
|
|
|
711
761
|
}
|
|
712
762
|
];
|
|
713
763
|
return {
|
|
714
|
-
remarkPlugins: [
|
|
764
|
+
remarkPlugins: [
|
|
765
|
+
remarkDirective,
|
|
766
|
+
remarkRestoreUnsupportedDirectives,
|
|
767
|
+
remarkDetype,
|
|
768
|
+
remarkPkgManager,
|
|
769
|
+
remarkChoiceGroup
|
|
770
|
+
],
|
|
715
771
|
rehypePlugins: [rehypePrettyCodePlugin, rehypeMetaToProps]
|
|
716
772
|
};
|
|
717
773
|
};
|
|
@@ -724,7 +780,8 @@ export {
|
|
|
724
780
|
remarkChoiceGroup,
|
|
725
781
|
remarkDetype,
|
|
726
782
|
remarkPkgManager,
|
|
783
|
+
remarkRestoreUnsupportedDirectives,
|
|
727
784
|
shikiTransformerAutoLinks,
|
|
728
785
|
getCodeBlockMdxPlugins
|
|
729
786
|
};
|
|
730
|
-
//# sourceMappingURL=chunk-
|
|
787
|
+
//# sourceMappingURL=chunk-YKTHLAAL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mdx/code-blocks/index.ts","../src/mdx/code-blocks/meta.ts","../src/mdx/code-blocks/rehypeMetaToProps.ts","../src/mdx/code-blocks/remarkChoiceGroup.ts","../src/mdx/ast.ts","../src/mdx/code-blocks/generateChoiceGroupCode.ts","../src/mdx/code-blocks/remarkDetype.ts","../src/mdx/code-blocks/remarkPkgManager.ts","../src/mdx/code-blocks/remarkRestoreUnsupportedDirectives.ts","../src/mdx/code-blocks/shikiTransformerAutoLinks.ts"],"sourcesContent":["import { transformerNotationHighlight } from '@brillout/shiki-transformers'\nimport { transformerNotationDiff, transformerNotationWordHighlight } from '@shikijs/transformers'\nimport rehypePrettyCode from 'rehype-pretty-code'\nimport remarkDirective from 'remark-directive'\nimport { stripMetaProps } from './meta.js'\nimport { rehypeMetaToProps } from './rehypeMetaToProps.js'\nimport { remarkChoiceGroup } from './remarkChoiceGroup.js'\nimport { remarkDetype } from './remarkDetype.js'\nimport { remarkPkgManager } from './remarkPkgManager.js'\nimport { remarkRestoreUnsupportedDirectives } from './remarkRestoreUnsupportedDirectives.js'\nimport { shikiTransformerAutoLinks } from './shikiTransformerAutoLinks.js'\n\nexport { getCodeBlockPropsFromMeta, parseMetaString, stripMetaProps } from './meta.js'\nexport { rehypeMetaToProps } from './rehypeMetaToProps.js'\nexport { remarkChoiceGroup } from './remarkChoiceGroup.js'\nexport { remarkDetype } from './remarkDetype.js'\nexport { remarkPkgManager } from './remarkPkgManager.js'\nexport { remarkRestoreUnsupportedDirectives } from './remarkRestoreUnsupportedDirectives.js'\nexport { shikiTransformerAutoLinks } from './shikiTransformerAutoLinks.js'\n\nconst REHYPE_PRETTY_CODE_INTERNAL_META_PROPS = [\n 'data-language-label',\n 'env',\n 'file-added',\n 'file-removed',\n 'hide-menu',\n 'title',\n] as const\n\nexport const getCodeBlockMdxPlugins = () => {\n const rehypePrettyCodePlugin = [\n rehypePrettyCode,\n {\n keepBackground: false,\n filterMetaString: (meta: string) => stripMetaProps(meta, [...REHYPE_PRETTY_CODE_INTERNAL_META_PROPS]),\n theme: {\n light: 'github-light',\n dark: 'one-dark-pro',\n },\n transformers: [\n transformerNotationDiff(),\n transformerNotationHighlight(),\n transformerNotationWordHighlight(),\n shikiTransformerAutoLinks(),\n ],\n },\n ] as [typeof rehypePrettyCode, Parameters<typeof rehypePrettyCode>[0]]\n\n return {\n remarkPlugins: [\n remarkDirective,\n remarkRestoreUnsupportedDirectives,\n remarkDetype,\n remarkPkgManager,\n remarkChoiceGroup,\n ],\n rehypePlugins: [rehypePrettyCodePlugin, rehypeMetaToProps],\n }\n}\n","const kebabCase = (value: string) => {\n return value\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replaceAll('_', '-')\n .toLowerCase()\n}\n\nconst CODE_BLOCK_HEADER_ENVIRONMENTS = ['client', 'server'] as const\nconst CODE_BLOCK_PRE_PROP_NAMES = ['data-language-label', 'file-added', 'file-removed', 'hide-menu'] as const\n\ntype ParsedMeta<Name extends string = string> = {\n props: Partial<Record<Name, string>>\n rest: string\n tokens: ParsedMetaToken[]\n}\n\ntype ParsedMetaToken = {\n hasExplicitValue: boolean\n name: string\n raw: string\n value?: string\n}\n\ntype CodeBlockHeaderEnvironment = (typeof CODE_BLOCK_HEADER_ENVIRONMENTS)[number]\n\nconst KEY_VALUE_PAIR_RE =\n /(?<name>[a-zA-Z_-]+)(?:=(?:\"(?<doubleQuotedValue>[^\"]*)\"|'(?<singleQuotedValue>[^']*)'|(?<bareValue>[^\\s\"'=]+)))?/g\nconst CODE_BLOCK_PRE_PROP_NAME_SET = new Set<string>(CODE_BLOCK_PRE_PROP_NAMES)\n\nconst normalizeCodeBlockEnv = (value: unknown): CodeBlockHeaderEnvironment | null => {\n if (typeof value !== 'string') {\n return null\n }\n\n const normalizedValue = value.trim().toLowerCase()\n return CODE_BLOCK_HEADER_ENVIRONMENTS.includes(normalizedValue as CodeBlockHeaderEnvironment)\n ? (normalizedValue as CodeBlockHeaderEnvironment)\n : null\n}\n\nexport const parseMetaString = <Name extends string = string>(meta: unknown, propNames?: Name[]): ParsedMeta<Name> => {\n if (typeof meta !== 'string' || meta.trim() === '') {\n return { props: {}, rest: '', tokens: [] }\n }\n\n const props: ParsedMeta['props'] = {}\n const tokens: ParsedMetaToken[] = []\n const rest = meta.replaceAll(KEY_VALUE_PAIR_RE, (match, ...args) => {\n const groups = args.at(-1) as\n | {\n bareValue?: string\n doubleQuotedValue?: string\n name?: string\n singleQuotedValue?: string\n }\n | undefined\n const name = groups?.name\n if (!name) {\n return match\n }\n\n const value = groups?.doubleQuotedValue ?? groups?.singleQuotedValue ?? groups?.bareValue\n const normalizedName = kebabCase(name)\n tokens.push({\n hasExplicitValue: value !== undefined,\n name: normalizedName,\n raw: match,\n value,\n })\n\n if (propNames && !propNames.includes(normalizedName as Name)) {\n return match\n }\n\n props[normalizedName] = value || 'true'\n return ''\n })\n\n return {\n props,\n rest: rest.trim(),\n tokens,\n }\n}\n\nexport const stripMetaProps = <Name extends string = string>(meta: unknown, propNames: Name[]) => {\n return parseMetaString(meta, propNames).rest\n}\n\nexport const getCodeBlockPropsFromMeta = (meta: unknown) => {\n const parsed = parseMetaString(meta)\n const props = Object.fromEntries(\n Object.entries(parsed.props).filter(([name]) => CODE_BLOCK_PRE_PROP_NAME_SET.has(name)),\n ) as Record<string, string>\n const explicitTitle =\n typeof parsed.props.title === 'string' && parsed.props.title.trim() ? parsed.props.title.trim() : null\n const env = normalizeCodeBlockEnv(parsed.props.env)\n\n return {\n props,\n env,\n title: explicitTitle,\n }\n}\n","import { visit } from 'unist-util-visit'\nimport type { ElementNode, HtmlRootNode } from '../ast.js'\nimport { getCodeBlockPropsFromMeta } from './meta.js'\n\nexport const rehypeMetaToProps = () => {\n return (tree: HtmlRootNode) => {\n visit(\n tree,\n 'element',\n (node: ElementNode, _index: number | undefined, parent: ElementNode | HtmlRootNode | undefined) => {\n if (!parent || parent.type !== 'element' || node.tagName !== 'code' || parent.tagName !== 'pre') {\n return\n }\n\n const meta = getCodeBlockPropsFromMeta((node.data as { meta?: unknown } | undefined)?.meta)\n parent.properties ??= {}\n parent.properties = {\n ...parent.properties,\n ...meta.props,\n ...(meta.env ? { 'data-code-env': meta.env } : {}),\n ...(meta.title ? { 'data-code-title': meta.title } : {}),\n }\n },\n )\n }\n}\n","import { visit } from 'unist-util-visit'\nimport type { AstNode, ChoiceCarrierNode, ChoiceGroupElement, CodeNode, ContainerDirective, RootNode } from '../ast.js'\nimport { hasChildren } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\ntype ChoiceNodeGroup = Array<{ choiceValue: string; children: ChoiceCarrierNode[] }>\nconst isChoiceCarrierNode = (node: AstNode): node is ChoiceCarrierNode => {\n return ['code', 'containerDirective', 'mdxJsxFlowElement'].includes(node.type)\n}\n\nexport const remarkChoiceGroup = () => {\n return (tree: RootNode) => {\n visit(tree, (node) => {\n if (node.type === 'code') {\n const codeNode = node as CodeNode\n if (!codeNode.meta) {\n return\n }\n\n const meta = parseMetaString(codeNode.meta, ['choice'])\n const choice = meta.props.choice\n codeNode.meta = meta.rest\n\n if (choice) {\n codeNode.data ??= {}\n codeNode.data.customDataChoice = choice\n codeNode.data.customDataFilter = 'explicitChoice'\n }\n }\n\n if (node.type === 'containerDirective') {\n const directiveNode = node as ContainerDirective\n if (directiveNode.name !== 'Choice') {\n return\n }\n\n const choice = typeof directiveNode.attributes?.id === 'string' ? directiveNode.attributes.id : null\n if (!choice) {\n return\n }\n\n directiveNode.data ??= {}\n directiveNode.data.customDataChoice = choice\n directiveNode.data.customDataFilter = directiveNode.type\n directiveNode.attributes = {}\n }\n })\n\n visit(tree, (node) => {\n if (!hasChildren(node)) {\n return\n }\n\n let start = -1\n let end = 0\n\n const processRange = () => {\n if (start === -1 || start === end) {\n return\n }\n\n const nodes = node.children.slice(start, end).filter(isChoiceCarrierNode)\n const replacements = filterChoices(nodes).map(\n (choiceNodes) => generateChoiceGroupCode(choiceNodes, node) as ChoiceGroupElement,\n )\n node.children.splice(start, end - start, ...replacements)\n end = start + replacements.length\n start = -1\n }\n\n for (; end < node.children.length; end += 1) {\n const child = node.children[end]\n\n if (!child || !isChoiceCarrierNode(child as AstNode)) {\n processRange()\n continue\n }\n\n if (!child.data?.customDataChoice) {\n processRange()\n continue\n }\n\n if (start === -1) {\n start = end\n }\n }\n\n processRange()\n })\n }\n}\n\nconst filterChoices = (nodes: ChoiceCarrierNode[]): ChoiceNodeGroup[] => {\n const filteredChoices: ChoiceNodeGroup[] = []\n const filters = [\n ...new Set(\n nodes\n .map((node) => node.data?.customDataFilter)\n .filter((filter): filter is string => typeof filter === 'string' && filter !== ''),\n ),\n ]\n\n for (const filter of filters) {\n const nodesByChoice = new Map<string, ChoiceCarrierNode[]>()\n\n for (const node of nodes.filter((candidate) => candidate.data?.customDataFilter === filter)) {\n const data = node.data\n const choice = data?.customDataChoice\n if (!choice || !data) {\n continue\n }\n\n data.customDataChoice = undefined\n const choiceNodes = nodesByChoice.get(choice) ?? []\n choiceNodes.push(node)\n nodesByChoice.set(choice, choiceNodes)\n }\n\n filteredChoices.push(\n [...nodesByChoice].map(([choiceValue, children]) => ({\n choiceValue,\n children,\n })),\n )\n }\n\n return filteredChoices\n}\n","import type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx'\n\nexport type ChoiceData = {\n customDataChoice?: string | undefined\n customDataFilter?: string | undefined\n}\n\nexport interface AstNode {\n type: string\n data?: ChoiceData | undefined\n}\n\nexport interface ParentNode<Child extends AstNode = AstNode> extends AstNode {\n children: Child[]\n}\n\nexport interface RootNode extends ParentNode {\n type: 'root'\n}\n\nexport interface CodeNode extends AstNode {\n type: 'code'\n value: string\n lang?: string | null | undefined\n meta?: string | null | undefined\n}\n\ntype DirectiveAttributes = Record<string, string | null | undefined>\n\nexport type ChoiceGroupElement = Omit<MdxJsxFlowElement, 'data'> &\n AstNode & {\n data?: ChoiceData | undefined\n }\n\nexport type ChoiceCarrierNode = CodeNode | ContainerDirective | ChoiceGroupElement\n\nexport interface ContainerDirective extends ParentNode<ChoiceCarrierNode> {\n type: 'containerDirective'\n name: string\n attributes?: DirectiveAttributes | null | undefined\n}\n\nexport interface FileLike {\n path?: string | undefined\n value?: unknown\n}\n\nexport interface TextNode extends AstNode {\n type: 'text'\n value: string\n}\n\nexport interface ParagraphNode extends ParentNode<TextNode> {\n type: 'paragraph'\n}\n\nexport interface PositionLike {\n start?: {\n offset?: number | undefined\n }\n end?: {\n offset?: number | undefined\n }\n}\n\nexport interface UnsupportedDirectiveNode extends AstNode {\n type: 'leafDirective' | 'textDirective'\n position?: PositionLike | undefined\n}\n\nexport type ElementContentNode = ElementNode | TextNode\n\nexport interface ElementNode extends ParentNode<ElementContentNode> {\n type: 'element'\n tagName: string\n properties: Record<string, unknown>\n}\n\nexport interface HtmlRootNode extends ParentNode<ElementContentNode> {\n type: 'root'\n}\n\nexport const isContainerDirective = (node: ChoiceCarrierNode): node is ContainerDirective => {\n return node.type === 'containerDirective'\n}\n\nexport const hasChildren = (node: unknown): node is ParentNode => {\n return typeof node === 'object' && node !== null && Array.isArray((node as Partial<ParentNode>).children)\n}\n","import { valueToEstree } from 'estree-util-value-to-estree'\nimport type { MdxJsxAttribute, MdxJsxAttributeValueExpression, MdxJsxFlowElement } from 'mdast-util-mdx-jsx'\nimport type { ChoiceCarrierNode, ChoiceGroupElement, ParentNode } from '../ast.js'\nimport { isContainerDirective } from '../ast.js'\n\ntype ChoiceNode = {\n choiceValue: string\n children: ChoiceCarrierNode[]\n}\n\nconst BUILT_IN_CHOICE_GROUPS = {\n codeLang: {\n choices: ['JavaScript', 'TypeScript'],\n default: 'JavaScript',\n },\n pkgManager: {\n choices: ['npm', 'pnpm', 'Bun', 'Yarn'],\n default: 'npm',\n },\n} as const\n\nconst getChoiceGroup = (choicesRaw: string[]) => {\n const choices = [...new Set(choicesRaw.filter(Boolean))]\n\n for (const [name, group] of Object.entries(BUILT_IN_CHOICE_GROUPS)) {\n if (!choices.every((choice) => group.choices.includes(choice as never))) {\n continue\n }\n\n return {\n name,\n choices: group.choices,\n default: group.default,\n disabled: group.choices.filter((choice) => !choices.includes(choice)),\n }\n }\n\n return {\n name: `custom:${choices.join('|')}`,\n choices,\n default: choices[0] ?? '',\n disabled: [] as string[],\n }\n}\n\ntype AttributeEstree = NonNullable<NonNullable<MdxJsxAttributeValueExpression['data']>['estree']>\n\nexport const generateChoiceGroupCode = (choiceNodes: ChoiceNode[], parent?: ParentNode): ChoiceGroupElement => {\n const choiceGroup = getChoiceGroup(choiceNodes.map((choiceNode) => choiceNode.choiceValue))\n const mergedChoiceNodes = choiceGroup.choices.map((choice) => {\n const choiceNode = choiceNodes.find((node) => node.choiceValue === choice)\n\n return {\n choiceValue: choice,\n children: choiceNode?.children ?? [],\n }\n })\n\n const attributes: MdxJsxAttribute[] = [\n {\n type: 'mdxJsxAttribute',\n name: 'choiceGroup',\n value: {\n type: 'mdxJsxAttributeValueExpression',\n value: '',\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n comments: [],\n body: [\n {\n type: 'ExpressionStatement',\n expression: valueToEstree(choiceGroup),\n },\n ],\n } as unknown as AttributeEstree,\n },\n },\n },\n ]\n\n if (choiceNodes.length === 1) {\n attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n }\n\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'lvl',\n value: `${parent?.type === 'mdxJsxFlowElement' ? 1 : 0}`,\n })\n\n const children: MdxJsxFlowElement[] = mergedChoiceNodes.map((choiceNode) => {\n const choiceChildren: ChoiceCarrierNode[] =\n choiceNode.children.length > 0 && choiceNode.children.every(isContainerDirective)\n ? choiceNode.children.flatMap((node) => node.children ?? [])\n : choiceNode.children\n\n for (const child of choiceChildren) {\n increaseLvl(child)\n }\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'div',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'data-choice-value',\n value: choiceNode.choiceValue,\n },\n { type: 'mdxJsxAttribute', name: 'className', value: 'choice' },\n ],\n children: choiceChildren as MdxJsxFlowElement['children'],\n }\n })\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'ChoiceGroup',\n attributes,\n children,\n } as ChoiceGroupElement\n}\n\nconst increaseLvl = (node: ChoiceCarrierNode) => {\n if (node.type !== 'mdxJsxFlowElement' || node.name !== 'ChoiceGroup') {\n return\n }\n\n const attribute = node.attributes.find(\n (candidate: ChoiceGroupElement['attributes'][number]): candidate is MdxJsxAttribute =>\n candidate.type === 'mdxJsxAttribute' && candidate.name === 'lvl',\n )\n\n if (typeof attribute?.value === 'string') {\n attribute.value = `${Number(attribute.value) + 1}`\n }\n}\n","import { transform as detype } from 'detype'\nimport { visit } from 'unist-util-visit'\nimport type { ChoiceGroupElement, CodeNode, FileLike, ParentNode, RootNode } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\nconst prettierOptions = {\n semi: false,\n singleQuote: true,\n trailingComma: 'none',\n} as const\n\ntype TransformNode = {\n codeBlock: CodeNode\n index: number\n parent: ParentNode\n}\n\nexport const remarkDetype = () => {\n return async (tree: RootNode, file: FileLike) => {\n const codeNodes: TransformNode[] = []\n\n visit(tree, 'code', (node: CodeNode, index: number | undefined, parent: ParentNode | undefined) => {\n if (!parent || typeof index !== 'number') {\n return\n }\n\n if (!['ts', 'tsx', 'vue', 'yaml'].includes(node.lang ?? '')) {\n return\n }\n\n if (typeof node.meta === 'string' && node.meta.includes('ts-only')) {\n return\n }\n\n codeNodes.push({ codeBlock: node, index, parent })\n })\n\n for (const node of [...codeNodes].reverse()) {\n if (node.codeBlock.lang === 'yaml') {\n transformYaml(node)\n } else {\n await transformTsToJs(node, file)\n }\n }\n }\n}\n\nconst transformYaml = (node: TransformNode) => {\n const { codeBlock, index, parent } = node\n const codeBlockContentJs = replaceFileNameSuffixes(codeBlock.value)\n\n if (codeBlockContentJs === codeBlock.value) {\n return\n }\n\n const meta = parseMetaString(codeBlock.meta, ['choice'])\n const choice = meta.props.choice\n codeBlock.meta = meta.rest\n\n const yamlJsCode = {\n ...codeBlock,\n value: codeBlockContentJs,\n }\n\n const replacement = generateChoiceGroupCode([\n { choiceValue: 'JavaScript', children: [yamlJsCode] },\n { choiceValue: 'TypeScript', children: [codeBlock] },\n ]) as ChoiceGroupElement\n\n replacement.attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n replacement.data ??= {}\n replacement.data.customDataChoice = choice\n replacement.data.customDataFilter = 'codeLang'\n parent.children.splice(index, 1, replacement)\n}\n\nconst transformTsToJs = async (node: TransformNode, file: FileLike) => {\n const { codeBlock, index, parent } = node\n const meta = parseMetaString(codeBlock.meta, ['max-width', 'choice'])\n const maxWidth = Number(meta.props['max-width'])\n const choice = meta.props.choice\n codeBlock.meta = meta.rest\n\n codeBlock.data ??= {}\n codeBlock.data.customDataChoice = choice\n codeBlock.data.customDataFilter = 'codeLang'\n\n if (choice === 'TypeScript') {\n return\n }\n\n const codeBlockReplacedJs = replaceFileNameSuffixes(codeBlock.value)\n let codeBlockContentJs = ''\n\n try {\n codeBlockContentJs = await detype(codeBlockReplacedJs, `snippet.${codeBlock.lang}`, {\n customizeBabelConfig(config) {\n if (!config.presets || config.presets.length !== 1) {\n return\n }\n\n config.presets = [[config.presets[0], { onlyRemoveTypeImports: true }]]\n },\n removeTsComments: true,\n prettierOptions: {\n ...prettierOptions,\n printWidth: Number.isFinite(maxWidth) && maxWidth > 0 ? maxWidth : 99,\n },\n })\n } catch (error) {\n console.error(\n [\n `Failed to detype code block in ${file?.path ?? 'an MDX file'}.`,\n error instanceof Error ? error.message : String(error),\n ].join('\\n'),\n )\n return\n }\n\n codeBlockContentJs = cleanUpCode(codeBlockContentJs.trimEnd(), true)\n codeBlock.value = cleanUpCode(codeBlock.value)\n codeBlockContentJs = preserveSourceLineBreaks(codeBlock.value, codeBlockContentJs)\n codeBlockContentJs = preserveSourceBlankLines(codeBlock.value, codeBlockContentJs)\n\n if (codeBlockContentJs === codeBlock.value) {\n return\n }\n\n const tsCode: CodeNode = { ...codeBlock, lang: codeBlock.lang }\n const jsCode: CodeNode = {\n ...codeBlock,\n lang: String(codeBlock.lang).replace('t', 'j'),\n meta: replaceCodeBlockTitleFileExtension(codeBlock.meta, String(codeBlock.lang).replace('t', 'j')),\n value: codeBlockContentJs,\n }\n\n const replacement = generateChoiceGroupCode([\n { choiceValue: 'JavaScript', children: [jsCode] },\n { choiceValue: 'TypeScript', children: [tsCode] },\n ]) as ChoiceGroupElement\n\n if (codeBlockReplacedJs === codeBlockContentJs) {\n replacement.attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n }\n\n replacement.data ??= {}\n replacement.data.customDataChoice = codeBlock.data.customDataChoice\n replacement.data.customDataFilter = codeBlock.data.customDataFilter\n parent.children.splice(index, 1, replacement)\n}\n\nconst replaceFileNameSuffixes = (value: string) => value.replaceAll('.ts', '.js')\n\nconst replaceCodeBlockTitleFileExtension = (meta: unknown, outputLang: string): string | null | undefined => {\n if (typeof meta !== 'string' || meta.trim() === '') {\n return typeof meta === 'string' ? meta : undefined\n }\n\n const parsedMeta = parseMetaString(meta)\n const titleToken = parsedMeta.tokens.find((token) => token.name === 'title' && token.hasExplicitValue)\n const titleValue = typeof parsedMeta.props.title === 'string' ? parsedMeta.props.title : null\n\n if (!titleToken || !titleValue) {\n return meta\n }\n\n const nextTitleValue = replaceTitleFileExtension(titleValue, outputLang)\n if (nextTitleValue === titleValue) {\n return meta\n }\n\n const quote = titleToken.raw.includes(\"title='\") ? \"'\" : '\"'\n return meta.replace(titleToken.raw, `title=${quote}${nextTitleValue}${quote}`)\n}\n\nconst replaceTitleFileExtension = (title: string, outputLang: string) => {\n if (outputLang === 'jsx') {\n return title.replace(/\\.tsx$/i, '.jsx').replace(/\\.ts$/i, '.js')\n }\n\n if (outputLang === 'js') {\n return title.replace(/\\.tsx$/i, '.jsx').replace(/\\.ts$/i, '.js')\n }\n\n return title\n}\n\nconst cleanUpCode = (code: string, isJsCode = false) => {\n if (isJsCode) {\n code = correctCodeDiffComments(code)\n }\n\n return processMagicComments(code)\n}\n\nconst processMagicComments = (code: string) => {\n const renameCommentRe = /^\\s*\\/\\/\\s@docpress-replace\\s([^ ]+) ([^ ]+)\\n/gm\n const matches = Array.from(code.matchAll(renameCommentRe))\n\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n const match = matches[index]\n if (!match) {\n continue\n }\n\n const [fullMatch, renameFrom, renameTo] = match\n code = code.split(fullMatch).join('').replaceAll(renameFrom, renameTo)\n }\n\n return code.replaceAll('// @docpress-uncomment ', '')\n}\n\nconst correctCodeDiffComments = (code: string) => {\n return code.replaceAll(/\\n\\s*\\/\\/\\s\\[!code.+\\]/g, (codeDiff) => codeDiff.trimStart())\n}\n\nconst preserveSourceLineBreaks = (sourceCode: string, outputCode: string) => {\n const multilineSegments = collectMultilineSourceSegments(sourceCode)\n\n if (multilineSegments.length === 0) {\n return outputCode\n }\n\n const outputLines = outputCode.split('\\n')\n\n for (const segmentLines of multilineSegments) {\n const segmentNormalized = normalizeCodeSegment(segmentLines.join('\\n'))\n\n if (!segmentNormalized) {\n continue\n }\n\n for (let start = 0; start < outputLines.length; start += 1) {\n let replaced = false\n\n for (let size = 1; size <= segmentLines.length; size += 1) {\n if (start + size > outputLines.length) {\n break\n }\n\n const outputSegment = outputLines.slice(start, start + size)\n\n if (normalizeCodeSegment(outputSegment.join('\\n')) !== segmentNormalized) {\n continue\n }\n\n if (outputSegment.join('\\n') !== segmentLines.join('\\n')) {\n outputLines.splice(start, size, ...segmentLines)\n }\n\n start += segmentLines.length - 1\n replaced = true\n break\n }\n\n if (replaced) {\n break\n }\n }\n }\n\n return outputLines.join('\\n')\n}\n\nconst collectMultilineSourceSegments = (code: string) => {\n const lines = code.split('\\n')\n const segments: string[][] = []\n let paragraphStart = -1\n\n for (let index = 0; index <= lines.length; index += 1) {\n if (index < lines.length && lines[index]?.trim() !== '') {\n if (paragraphStart === -1) {\n paragraphStart = index\n }\n continue\n }\n\n if (paragraphStart !== -1) {\n const paragraphEnd = index - 1\n\n for (let size = paragraphEnd - paragraphStart + 1; size >= 2; size -= 1) {\n for (let start = paragraphStart; start + size - 1 <= paragraphEnd; start += 1) {\n segments.push(lines.slice(start, start + size).map(replaceFileNameSuffixes))\n }\n }\n }\n\n paragraphStart = -1\n }\n\n return segments\n}\n\nconst preserveSourceBlankLines = (sourceCode: string, outputCode: string) => {\n const blankLineAnchors = collectBlankLineAnchors(sourceCode)\n\n if (blankLineAnchors.length === 0) {\n return outputCode\n }\n\n const outputLines = outputCode.split('\\n')\n let searchFrom = 0\n\n for (const anchor of blankLineAnchors) {\n const lineIndex = outputLines.findIndex((line, index) => index >= searchFrom && normalizeCodeLine(line) === anchor)\n\n if (lineIndex <= 0) {\n continue\n }\n\n if (outputLines[lineIndex - 1]?.trim() !== '') {\n outputLines.splice(lineIndex, 0, '')\n searchFrom = lineIndex + 2\n } else {\n searchFrom = lineIndex + 1\n }\n }\n\n return outputLines.join('\\n')\n}\n\nconst collectBlankLineAnchors = (code: string) => {\n const lines = code.split('\\n')\n const anchors: string[] = []\n\n for (let index = 1; index < lines.length; index += 1) {\n if (lines[index]?.trim() !== '' || lines[index - 1]?.trim() === '') {\n continue\n }\n\n let nextLineIndex = index + 1\n\n while (nextLineIndex < lines.length && lines[nextLineIndex]?.trim() === '') {\n nextLineIndex += 1\n }\n\n const anchor = lines[nextLineIndex]\n\n if (anchor) {\n anchors.push(normalizeCodeLine(anchor))\n }\n }\n\n return anchors\n}\n\nconst normalizeCodeLine = (line: string) => {\n return stripTypeSyntax(replaceFileNameSuffixes(line)).trim().replace(/\\s+/g, ' ')\n}\n\nconst normalizeCodeSegment = (code: string) => {\n return replaceFileNameSuffixes(code).replace(/\\s+/g, '')\n}\n\nconst stripTypeSyntax = (line: string) => {\n return line\n .replace(/\\??:\\s*[A-Za-z_$][\\w$.<>, |&[\\]]*/g, '')\n .replace(/\\s+as\\s+const\\b/g, '')\n .replace(/\\s+as\\s+[A-Za-z_$][\\w$.<>, |&[\\]]*/g, '')\n}\n","import convert_ from 'npm-to-yarn'\nimport { visit } from 'unist-util-visit'\nimport type { ChoiceGroupElement, CodeNode, ParentNode, RootNode } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\nconst convert: (input: string, target: 'npm' | 'pnpm' | 'bun' | 'yarn') => string = convert_\n\nconst PACKAGE_MANAGERS = ['pnpm', 'Bun', 'Yarn'] as const\n\nexport const remarkPkgManager = () => {\n return (tree: RootNode) => {\n visit(tree, 'code', (node: CodeNode, index: number | undefined, parent: ParentNode | undefined) => {\n if (!parent || typeof index !== 'number') {\n return\n }\n\n if (!['bash', 'sh', 'shell'].includes(node.lang ?? '')) {\n return\n }\n\n if (node.value.includes('pnpm')) {\n return\n }\n\n if (!node.value.includes('npm ') && !node.value.includes('npx ')) {\n return\n }\n\n let choice: string | undefined\n if (node.meta) {\n const meta = parseMetaString(node.meta, ['choice'])\n choice = meta.props.choice\n node.meta = meta.rest\n }\n\n node.value = node.value.replaceAll('npm i ', 'npm install ')\n\n const nodes = new Map<string, CodeNode>()\n nodes.set('npm', node)\n\n for (const packageManager of PACKAGE_MANAGERS) {\n const packageManagerNode: CodeNode = {\n ...node,\n value: convert(node.value, packageManager.toLowerCase() as 'pnpm' | 'bun' | 'yarn'),\n }\n nodes.set(packageManager, packageManagerNode)\n }\n\n const replacement = generateChoiceGroupCode(\n [...nodes].map(([choiceValue, childNode]) => ({\n choiceValue,\n children: [childNode],\n })),\n ) as ChoiceGroupElement\n\n replacement.data ??= {}\n replacement.data.customDataChoice = choice\n replacement.data.customDataFilter = replacement.type\n parent.children.splice(index, 1, replacement)\n })\n }\n}\n","import { visit } from 'unist-util-visit'\nimport type { FileLike, ParagraphNode, ParentNode, RootNode, TextNode, UnsupportedDirectiveNode } from '../ast.js'\n\ntype Replacement = {\n index: number\n node: UnsupportedDirectiveNode\n parent: ParentNode\n}\n\nexport const remarkRestoreUnsupportedDirectives = () => {\n return (tree: RootNode, file: FileLike) => {\n const replacements: Replacement[] = []\n\n visit(tree, (node, index, parent) => {\n if ((node.type !== 'textDirective' && node.type !== 'leafDirective') || !parent || typeof index !== 'number') {\n return\n }\n\n replacements.push({\n index,\n node: node as UnsupportedDirectiveNode,\n parent,\n })\n })\n\n for (const replacement of [...replacements].reverse()) {\n const source = getDirectiveSource(replacement.node, file)\n if (!source) {\n continue\n }\n\n if (replacement.node.type === 'textDirective') {\n replacement.parent.children.splice(replacement.index, 1, createTextNode(source))\n continue\n }\n\n const paragraphNode: ParagraphNode = {\n type: 'paragraph',\n children: [createTextNode(source)],\n }\n\n replacement.parent.children.splice(replacement.index, 1, paragraphNode)\n }\n }\n}\n\nconst createTextNode = (value: string): TextNode => {\n return {\n type: 'text',\n value,\n }\n}\n\nconst getDirectiveSource = (node: UnsupportedDirectiveNode, file: FileLike) => {\n if (typeof file.value !== 'string') {\n return null\n }\n\n const start = node.position?.start?.offset\n const end = node.position?.end?.offset\n\n if (typeof start !== 'number' || typeof end !== 'number' || start >= end) {\n return null\n }\n\n return file.value.slice(start, end)\n}\n","import type { ShikiTransformer } from 'shiki'\n\nconst LINK_RE = /https:\\/\\/[^\\s]*[^.,\\s\"'`]/g\n\nexport const shikiTransformerAutoLinks = (): ShikiTransformer => {\n return {\n name: 'solid-docpress-shiki-autolinks',\n span(span) {\n if (span.children.length !== 1) {\n return\n }\n\n let child = span.children[0]\n if (child.type !== 'text') {\n return\n }\n\n const matches = Array.from(child.value.matchAll(LINK_RE)).filter(([href]) => !href.includes('${'))\n if (matches.length === 0) {\n return\n }\n\n const links = matches\n .map((match) => ({ href: match[0], index: match.index ?? 0 }))\n .sort((left, right) => right.index - left.index)\n\n const nextChildren: typeof span.children = []\n\n for (const { href, index } of links) {\n const endIndex = index + href.length\n const trailingText = child.value.slice(endIndex)\n\n if (trailingText) {\n nextChildren.unshift({ type: 'text', value: trailingText })\n }\n\n nextChildren.unshift({\n type: 'element',\n tagName: 'a',\n properties: { href },\n children: [{ type: 'text', value: href }],\n })\n\n child = {\n type: 'text',\n value: child.value.slice(0, index),\n }\n }\n\n if (child.value) {\n nextChildren.unshift(child)\n }\n\n span.children = nextChildren\n },\n }\n}\n"],"mappings":"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","names":["visit","visit","visit","visit","visit","visit","visit"]}
|
|
@@ -19,6 +19,7 @@ interface RootNode extends ParentNode {
|
|
|
19
19
|
}
|
|
20
20
|
interface FileLike {
|
|
21
21
|
path?: string | undefined;
|
|
22
|
+
value?: unknown;
|
|
22
23
|
}
|
|
23
24
|
interface TextNode extends AstNode {
|
|
24
25
|
type: 'text';
|
|
@@ -61,11 +62,13 @@ declare const remarkDetype: () => (tree: RootNode, file: FileLike) => Promise<vo
|
|
|
61
62
|
|
|
62
63
|
declare const remarkPkgManager: () => (tree: RootNode) => void;
|
|
63
64
|
|
|
65
|
+
declare const remarkRestoreUnsupportedDirectives: () => (tree: RootNode, file: FileLike) => void;
|
|
66
|
+
|
|
64
67
|
declare const shikiTransformerAutoLinks: () => ShikiTransformer;
|
|
65
68
|
|
|
66
69
|
declare const getCodeBlockMdxPlugins: () => {
|
|
67
|
-
remarkPlugins: (typeof remarkDirective | (() => (tree: RootNode, file: FileLike) =>
|
|
70
|
+
remarkPlugins: (typeof remarkDirective | (() => (tree: RootNode, file: FileLike) => void))[];
|
|
68
71
|
rehypePlugins: ([typeof rehypePrettyCode__default, rehypePrettyCode.Options | undefined] | (() => (tree: HtmlRootNode) => void))[];
|
|
69
72
|
};
|
|
70
73
|
|
|
71
|
-
export { getCodeBlockMdxPlugins, getCodeBlockPropsFromMeta, parseMetaString, rehypeMetaToProps, remarkChoiceGroup, remarkDetype, remarkPkgManager, shikiTransformerAutoLinks, stripMetaProps };
|
|
74
|
+
export { getCodeBlockMdxPlugins, getCodeBlockPropsFromMeta, parseMetaString, rehypeMetaToProps, remarkChoiceGroup, remarkDetype, remarkPkgManager, remarkRestoreUnsupportedDirectives, shikiTransformerAutoLinks, stripMetaProps };
|
package/dist/mdx/code-blocks.js
CHANGED
|
@@ -6,9 +6,10 @@ import {
|
|
|
6
6
|
remarkChoiceGroup,
|
|
7
7
|
remarkDetype,
|
|
8
8
|
remarkPkgManager,
|
|
9
|
+
remarkRestoreUnsupportedDirectives,
|
|
9
10
|
shikiTransformerAutoLinks,
|
|
10
11
|
stripMetaProps
|
|
11
|
-
} from "../chunk-
|
|
12
|
+
} from "../chunk-YKTHLAAL.js";
|
|
12
13
|
export {
|
|
13
14
|
getCodeBlockMdxPlugins,
|
|
14
15
|
getCodeBlockPropsFromMeta,
|
|
@@ -17,6 +18,7 @@ export {
|
|
|
17
18
|
remarkChoiceGroup,
|
|
18
19
|
remarkDetype,
|
|
19
20
|
remarkPkgManager,
|
|
21
|
+
remarkRestoreUnsupportedDirectives,
|
|
20
22
|
shikiTransformerAutoLinks,
|
|
21
23
|
stripMetaProps
|
|
22
24
|
};
|
package/dist/vike.js
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mdx/code-blocks/index.ts","../src/mdx/code-blocks/meta.ts","../src/mdx/code-blocks/rehypeMetaToProps.ts","../src/mdx/code-blocks/remarkChoiceGroup.ts","../src/mdx/ast.ts","../src/mdx/code-blocks/generateChoiceGroupCode.ts","../src/mdx/code-blocks/remarkDetype.ts","../src/mdx/code-blocks/remarkPkgManager.ts","../src/mdx/code-blocks/shikiTransformerAutoLinks.ts"],"sourcesContent":["import { transformerNotationHighlight } from '@brillout/shiki-transformers'\nimport { transformerNotationDiff, transformerNotationWordHighlight } from '@shikijs/transformers'\nimport rehypePrettyCode from 'rehype-pretty-code'\nimport remarkDirective from 'remark-directive'\nimport { stripMetaProps } from './meta.js'\nimport { rehypeMetaToProps } from './rehypeMetaToProps.js'\nimport { remarkChoiceGroup } from './remarkChoiceGroup.js'\nimport { remarkDetype } from './remarkDetype.js'\nimport { remarkPkgManager } from './remarkPkgManager.js'\nimport { shikiTransformerAutoLinks } from './shikiTransformerAutoLinks.js'\n\nexport { getCodeBlockPropsFromMeta, parseMetaString, stripMetaProps } from './meta.js'\nexport { rehypeMetaToProps } from './rehypeMetaToProps.js'\nexport { remarkChoiceGroup } from './remarkChoiceGroup.js'\nexport { remarkDetype } from './remarkDetype.js'\nexport { remarkPkgManager } from './remarkPkgManager.js'\nexport { shikiTransformerAutoLinks } from './shikiTransformerAutoLinks.js'\n\nconst REHYPE_PRETTY_CODE_INTERNAL_META_PROPS = [\n 'data-language-label',\n 'env',\n 'file-added',\n 'file-removed',\n 'hide-menu',\n 'title',\n] as const\n\nexport const getCodeBlockMdxPlugins = () => {\n const rehypePrettyCodePlugin = [\n rehypePrettyCode,\n {\n keepBackground: false,\n filterMetaString: (meta: string) => stripMetaProps(meta, [...REHYPE_PRETTY_CODE_INTERNAL_META_PROPS]),\n theme: {\n light: 'github-light',\n dark: 'one-dark-pro',\n },\n transformers: [\n transformerNotationDiff(),\n transformerNotationHighlight(),\n transformerNotationWordHighlight(),\n shikiTransformerAutoLinks(),\n ],\n },\n ] as [typeof rehypePrettyCode, Parameters<typeof rehypePrettyCode>[0]]\n\n return {\n remarkPlugins: [remarkDirective, remarkDetype, remarkPkgManager, remarkChoiceGroup],\n rehypePlugins: [rehypePrettyCodePlugin, rehypeMetaToProps],\n }\n}\n","const kebabCase = (value: string) => {\n return value\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replaceAll('_', '-')\n .toLowerCase()\n}\n\nconst CODE_BLOCK_HEADER_ENVIRONMENTS = ['client', 'server'] as const\nconst CODE_BLOCK_PRE_PROP_NAMES = ['data-language-label', 'file-added', 'file-removed', 'hide-menu'] as const\n\ntype ParsedMeta<Name extends string = string> = {\n props: Partial<Record<Name, string>>\n rest: string\n tokens: ParsedMetaToken[]\n}\n\ntype ParsedMetaToken = {\n hasExplicitValue: boolean\n name: string\n raw: string\n value?: string\n}\n\ntype CodeBlockHeaderEnvironment = (typeof CODE_BLOCK_HEADER_ENVIRONMENTS)[number]\n\nconst KEY_VALUE_PAIR_RE =\n /(?<name>[a-zA-Z_-]+)(?:=(?:\"(?<doubleQuotedValue>[^\"]*)\"|'(?<singleQuotedValue>[^']*)'|(?<bareValue>[^\\s\"'=]+)))?/g\nconst CODE_BLOCK_PRE_PROP_NAME_SET = new Set<string>(CODE_BLOCK_PRE_PROP_NAMES)\n\nconst normalizeCodeBlockEnv = (value: unknown): CodeBlockHeaderEnvironment | null => {\n if (typeof value !== 'string') {\n return null\n }\n\n const normalizedValue = value.trim().toLowerCase()\n return CODE_BLOCK_HEADER_ENVIRONMENTS.includes(normalizedValue as CodeBlockHeaderEnvironment)\n ? (normalizedValue as CodeBlockHeaderEnvironment)\n : null\n}\n\nexport const parseMetaString = <Name extends string = string>(meta: unknown, propNames?: Name[]): ParsedMeta<Name> => {\n if (typeof meta !== 'string' || meta.trim() === '') {\n return { props: {}, rest: '', tokens: [] }\n }\n\n const props: ParsedMeta['props'] = {}\n const tokens: ParsedMetaToken[] = []\n const rest = meta.replaceAll(KEY_VALUE_PAIR_RE, (match, ...args) => {\n const groups = args.at(-1) as\n | {\n bareValue?: string\n doubleQuotedValue?: string\n name?: string\n singleQuotedValue?: string\n }\n | undefined\n const name = groups?.name\n if (!name) {\n return match\n }\n\n const value = groups?.doubleQuotedValue ?? groups?.singleQuotedValue ?? groups?.bareValue\n const normalizedName = kebabCase(name)\n tokens.push({\n hasExplicitValue: value !== undefined,\n name: normalizedName,\n raw: match,\n value,\n })\n\n if (propNames && !propNames.includes(normalizedName as Name)) {\n return match\n }\n\n props[normalizedName] = value || 'true'\n return ''\n })\n\n return {\n props,\n rest: rest.trim(),\n tokens,\n }\n}\n\nexport const stripMetaProps = <Name extends string = string>(meta: unknown, propNames: Name[]) => {\n return parseMetaString(meta, propNames).rest\n}\n\nexport const getCodeBlockPropsFromMeta = (meta: unknown) => {\n const parsed = parseMetaString(meta)\n const props = Object.fromEntries(\n Object.entries(parsed.props).filter(([name]) => CODE_BLOCK_PRE_PROP_NAME_SET.has(name)),\n ) as Record<string, string>\n const explicitTitle =\n typeof parsed.props.title === 'string' && parsed.props.title.trim() ? parsed.props.title.trim() : null\n const env = normalizeCodeBlockEnv(parsed.props.env)\n\n return {\n props,\n env,\n title: explicitTitle,\n }\n}\n","import { visit } from 'unist-util-visit'\nimport type { ElementNode, HtmlRootNode } from '../ast.js'\nimport { getCodeBlockPropsFromMeta } from './meta.js'\n\nexport const rehypeMetaToProps = () => {\n return (tree: HtmlRootNode) => {\n visit(\n tree,\n 'element',\n (node: ElementNode, _index: number | undefined, parent: ElementNode | HtmlRootNode | undefined) => {\n if (!parent || parent.type !== 'element' || node.tagName !== 'code' || parent.tagName !== 'pre') {\n return\n }\n\n const meta = getCodeBlockPropsFromMeta((node.data as { meta?: unknown } | undefined)?.meta)\n parent.properties ??= {}\n parent.properties = {\n ...parent.properties,\n ...meta.props,\n ...(meta.env ? { 'data-code-env': meta.env } : {}),\n ...(meta.title ? { 'data-code-title': meta.title } : {}),\n }\n },\n )\n }\n}\n","import { visit } from 'unist-util-visit'\nimport type { AstNode, ChoiceCarrierNode, ChoiceGroupElement, CodeNode, ContainerDirective, RootNode } from '../ast.js'\nimport { hasChildren } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\ntype ChoiceNodeGroup = Array<{ choiceValue: string; children: ChoiceCarrierNode[] }>\nconst isChoiceCarrierNode = (node: AstNode): node is ChoiceCarrierNode => {\n return ['code', 'containerDirective', 'mdxJsxFlowElement'].includes(node.type)\n}\n\nexport const remarkChoiceGroup = () => {\n return (tree: RootNode) => {\n visit(tree, (node) => {\n if (node.type === 'code') {\n const codeNode = node as CodeNode\n if (!codeNode.meta) {\n return\n }\n\n const meta = parseMetaString(codeNode.meta, ['choice'])\n const choice = meta.props.choice\n codeNode.meta = meta.rest\n\n if (choice) {\n codeNode.data ??= {}\n codeNode.data.customDataChoice = choice\n codeNode.data.customDataFilter = 'explicitChoice'\n }\n }\n\n if (node.type === 'containerDirective') {\n const directiveNode = node as ContainerDirective\n if (directiveNode.name !== 'Choice') {\n return\n }\n\n const choice = typeof directiveNode.attributes?.id === 'string' ? directiveNode.attributes.id : null\n if (!choice) {\n return\n }\n\n directiveNode.data ??= {}\n directiveNode.data.customDataChoice = choice\n directiveNode.data.customDataFilter = directiveNode.type\n directiveNode.attributes = {}\n }\n })\n\n visit(tree, (node) => {\n if (!hasChildren(node)) {\n return\n }\n\n let start = -1\n let end = 0\n\n const processRange = () => {\n if (start === -1 || start === end) {\n return\n }\n\n const nodes = node.children.slice(start, end).filter(isChoiceCarrierNode)\n const replacements = filterChoices(nodes).map(\n (choiceNodes) => generateChoiceGroupCode(choiceNodes, node) as ChoiceGroupElement,\n )\n node.children.splice(start, end - start, ...replacements)\n end = start + replacements.length\n start = -1\n }\n\n for (; end < node.children.length; end += 1) {\n const child = node.children[end]\n\n if (!child || !isChoiceCarrierNode(child as AstNode)) {\n processRange()\n continue\n }\n\n if (!child.data?.customDataChoice) {\n processRange()\n continue\n }\n\n if (start === -1) {\n start = end\n }\n }\n\n processRange()\n })\n }\n}\n\nconst filterChoices = (nodes: ChoiceCarrierNode[]): ChoiceNodeGroup[] => {\n const filteredChoices: ChoiceNodeGroup[] = []\n const filters = [\n ...new Set(\n nodes\n .map((node) => node.data?.customDataFilter)\n .filter((filter): filter is string => typeof filter === 'string' && filter !== ''),\n ),\n ]\n\n for (const filter of filters) {\n const nodesByChoice = new Map<string, ChoiceCarrierNode[]>()\n\n for (const node of nodes.filter((candidate) => candidate.data?.customDataFilter === filter)) {\n const data = node.data\n const choice = data?.customDataChoice\n if (!choice || !data) {\n continue\n }\n\n data.customDataChoice = undefined\n const choiceNodes = nodesByChoice.get(choice) ?? []\n choiceNodes.push(node)\n nodesByChoice.set(choice, choiceNodes)\n }\n\n filteredChoices.push(\n [...nodesByChoice].map(([choiceValue, children]) => ({\n choiceValue,\n children,\n })),\n )\n }\n\n return filteredChoices\n}\n","import type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx'\n\nexport type ChoiceData = {\n customDataChoice?: string | undefined\n customDataFilter?: string | undefined\n}\n\nexport interface AstNode {\n type: string\n data?: ChoiceData | undefined\n}\n\nexport interface ParentNode<Child extends AstNode = AstNode> extends AstNode {\n children: Child[]\n}\n\nexport interface RootNode extends ParentNode {\n type: 'root'\n}\n\nexport interface CodeNode extends AstNode {\n type: 'code'\n value: string\n lang?: string | null | undefined\n meta?: string | null | undefined\n}\n\ntype DirectiveAttributes = Record<string, string | null | undefined>\n\nexport type ChoiceGroupElement = Omit<MdxJsxFlowElement, 'data'> &\n AstNode & {\n data?: ChoiceData | undefined\n }\n\nexport type ChoiceCarrierNode = CodeNode | ContainerDirective | ChoiceGroupElement\n\nexport interface ContainerDirective extends ParentNode<ChoiceCarrierNode> {\n type: 'containerDirective'\n name: string\n attributes?: DirectiveAttributes | null | undefined\n}\n\nexport interface FileLike {\n path?: string | undefined\n}\n\nexport interface TextNode extends AstNode {\n type: 'text'\n value: string\n}\n\nexport type ElementContentNode = ElementNode | TextNode\n\nexport interface ElementNode extends ParentNode<ElementContentNode> {\n type: 'element'\n tagName: string\n properties: Record<string, unknown>\n}\n\nexport interface HtmlRootNode extends ParentNode<ElementContentNode> {\n type: 'root'\n}\n\nexport const isContainerDirective = (node: ChoiceCarrierNode): node is ContainerDirective => {\n return node.type === 'containerDirective'\n}\n\nexport const hasChildren = (node: unknown): node is ParentNode => {\n return typeof node === 'object' && node !== null && Array.isArray((node as Partial<ParentNode>).children)\n}\n","import { valueToEstree } from 'estree-util-value-to-estree'\nimport type { MdxJsxAttribute, MdxJsxAttributeValueExpression, MdxJsxFlowElement } from 'mdast-util-mdx-jsx'\nimport type { ChoiceCarrierNode, ChoiceGroupElement, ParentNode } from '../ast.js'\nimport { isContainerDirective } from '../ast.js'\n\ntype ChoiceNode = {\n choiceValue: string\n children: ChoiceCarrierNode[]\n}\n\nconst BUILT_IN_CHOICE_GROUPS = {\n codeLang: {\n choices: ['JavaScript', 'TypeScript'],\n default: 'JavaScript',\n },\n pkgManager: {\n choices: ['npm', 'pnpm', 'Bun', 'Yarn'],\n default: 'npm',\n },\n} as const\n\nconst getChoiceGroup = (choicesRaw: string[]) => {\n const choices = [...new Set(choicesRaw.filter(Boolean))]\n\n for (const [name, group] of Object.entries(BUILT_IN_CHOICE_GROUPS)) {\n if (!choices.every((choice) => group.choices.includes(choice as never))) {\n continue\n }\n\n return {\n name,\n choices: group.choices,\n default: group.default,\n disabled: group.choices.filter((choice) => !choices.includes(choice)),\n }\n }\n\n return {\n name: `custom:${choices.join('|')}`,\n choices,\n default: choices[0] ?? '',\n disabled: [] as string[],\n }\n}\n\ntype AttributeEstree = NonNullable<NonNullable<MdxJsxAttributeValueExpression['data']>['estree']>\n\nexport const generateChoiceGroupCode = (choiceNodes: ChoiceNode[], parent?: ParentNode): ChoiceGroupElement => {\n const choiceGroup = getChoiceGroup(choiceNodes.map((choiceNode) => choiceNode.choiceValue))\n const mergedChoiceNodes = choiceGroup.choices.map((choice) => {\n const choiceNode = choiceNodes.find((node) => node.choiceValue === choice)\n\n return {\n choiceValue: choice,\n children: choiceNode?.children ?? [],\n }\n })\n\n const attributes: MdxJsxAttribute[] = [\n {\n type: 'mdxJsxAttribute',\n name: 'choiceGroup',\n value: {\n type: 'mdxJsxAttributeValueExpression',\n value: '',\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n comments: [],\n body: [\n {\n type: 'ExpressionStatement',\n expression: valueToEstree(choiceGroup),\n },\n ],\n } as unknown as AttributeEstree,\n },\n },\n },\n ]\n\n if (choiceNodes.length === 1) {\n attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n }\n\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'lvl',\n value: `${parent?.type === 'mdxJsxFlowElement' ? 1 : 0}`,\n })\n\n const children: MdxJsxFlowElement[] = mergedChoiceNodes.map((choiceNode) => {\n const choiceChildren: ChoiceCarrierNode[] =\n choiceNode.children.length > 0 && choiceNode.children.every(isContainerDirective)\n ? choiceNode.children.flatMap((node) => node.children ?? [])\n : choiceNode.children\n\n for (const child of choiceChildren) {\n increaseLvl(child)\n }\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'div',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'data-choice-value',\n value: choiceNode.choiceValue,\n },\n { type: 'mdxJsxAttribute', name: 'className', value: 'choice' },\n ],\n children: choiceChildren as MdxJsxFlowElement['children'],\n }\n })\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'ChoiceGroup',\n attributes,\n children,\n } as ChoiceGroupElement\n}\n\nconst increaseLvl = (node: ChoiceCarrierNode) => {\n if (node.type !== 'mdxJsxFlowElement' || node.name !== 'ChoiceGroup') {\n return\n }\n\n const attribute = node.attributes.find(\n (candidate: ChoiceGroupElement['attributes'][number]): candidate is MdxJsxAttribute =>\n candidate.type === 'mdxJsxAttribute' && candidate.name === 'lvl',\n )\n\n if (typeof attribute?.value === 'string') {\n attribute.value = `${Number(attribute.value) + 1}`\n }\n}\n","import { transform as detype } from 'detype'\nimport { visit } from 'unist-util-visit'\nimport type { ChoiceGroupElement, CodeNode, FileLike, ParentNode, RootNode } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\nconst prettierOptions = {\n semi: false,\n singleQuote: true,\n trailingComma: 'none',\n} as const\n\ntype TransformNode = {\n codeBlock: CodeNode\n index: number\n parent: ParentNode\n}\n\nexport const remarkDetype = () => {\n return async (tree: RootNode, file: FileLike) => {\n const codeNodes: TransformNode[] = []\n\n visit(tree, 'code', (node: CodeNode, index: number | undefined, parent: ParentNode | undefined) => {\n if (!parent || typeof index !== 'number') {\n return\n }\n\n if (!['ts', 'tsx', 'vue', 'yaml'].includes(node.lang ?? '')) {\n return\n }\n\n if (typeof node.meta === 'string' && node.meta.includes('ts-only')) {\n return\n }\n\n codeNodes.push({ codeBlock: node, index, parent })\n })\n\n for (const node of [...codeNodes].reverse()) {\n if (node.codeBlock.lang === 'yaml') {\n transformYaml(node)\n } else {\n await transformTsToJs(node, file)\n }\n }\n }\n}\n\nconst transformYaml = (node: TransformNode) => {\n const { codeBlock, index, parent } = node\n const codeBlockContentJs = replaceFileNameSuffixes(codeBlock.value)\n\n if (codeBlockContentJs === codeBlock.value) {\n return\n }\n\n const meta = parseMetaString(codeBlock.meta, ['choice'])\n const choice = meta.props.choice\n codeBlock.meta = meta.rest\n\n const yamlJsCode = {\n ...codeBlock,\n value: codeBlockContentJs,\n }\n\n const replacement = generateChoiceGroupCode([\n { choiceValue: 'JavaScript', children: [yamlJsCode] },\n { choiceValue: 'TypeScript', children: [codeBlock] },\n ]) as ChoiceGroupElement\n\n replacement.attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n replacement.data ??= {}\n replacement.data.customDataChoice = choice\n replacement.data.customDataFilter = 'codeLang'\n parent.children.splice(index, 1, replacement)\n}\n\nconst transformTsToJs = async (node: TransformNode, file: FileLike) => {\n const { codeBlock, index, parent } = node\n const meta = parseMetaString(codeBlock.meta, ['max-width', 'choice'])\n const maxWidth = Number(meta.props['max-width'])\n const choice = meta.props.choice\n codeBlock.meta = meta.rest\n\n codeBlock.data ??= {}\n codeBlock.data.customDataChoice = choice\n codeBlock.data.customDataFilter = 'codeLang'\n\n if (choice === 'TypeScript') {\n return\n }\n\n const codeBlockReplacedJs = replaceFileNameSuffixes(codeBlock.value)\n let codeBlockContentJs = ''\n\n try {\n codeBlockContentJs = await detype(codeBlockReplacedJs, `snippet.${codeBlock.lang}`, {\n customizeBabelConfig(config) {\n if (!config.presets || config.presets.length !== 1) {\n return\n }\n\n config.presets = [[config.presets[0], { onlyRemoveTypeImports: true }]]\n },\n removeTsComments: true,\n prettierOptions: {\n ...prettierOptions,\n printWidth: Number.isFinite(maxWidth) && maxWidth > 0 ? maxWidth : 99,\n },\n })\n } catch (error) {\n console.error(\n [\n `Failed to detype code block in ${file?.path ?? 'an MDX file'}.`,\n error instanceof Error ? error.message : String(error),\n ].join('\\n'),\n )\n return\n }\n\n codeBlockContentJs = cleanUpCode(codeBlockContentJs.trimEnd(), true)\n codeBlock.value = cleanUpCode(codeBlock.value)\n codeBlockContentJs = preserveSourceLineBreaks(codeBlock.value, codeBlockContentJs)\n codeBlockContentJs = preserveSourceBlankLines(codeBlock.value, codeBlockContentJs)\n\n if (codeBlockContentJs === codeBlock.value) {\n return\n }\n\n const tsCode: CodeNode = { ...codeBlock, lang: codeBlock.lang }\n const jsCode: CodeNode = {\n ...codeBlock,\n lang: String(codeBlock.lang).replace('t', 'j'),\n meta: replaceCodeBlockTitleFileExtension(codeBlock.meta, String(codeBlock.lang).replace('t', 'j')),\n value: codeBlockContentJs,\n }\n\n const replacement = generateChoiceGroupCode([\n { choiceValue: 'JavaScript', children: [jsCode] },\n { choiceValue: 'TypeScript', children: [tsCode] },\n ]) as ChoiceGroupElement\n\n if (codeBlockReplacedJs === codeBlockContentJs) {\n replacement.attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n }\n\n replacement.data ??= {}\n replacement.data.customDataChoice = codeBlock.data.customDataChoice\n replacement.data.customDataFilter = codeBlock.data.customDataFilter\n parent.children.splice(index, 1, replacement)\n}\n\nconst replaceFileNameSuffixes = (value: string) => value.replaceAll('.ts', '.js')\n\nconst replaceCodeBlockTitleFileExtension = (meta: unknown, outputLang: string): string | null | undefined => {\n if (typeof meta !== 'string' || meta.trim() === '') {\n return typeof meta === 'string' ? meta : undefined\n }\n\n const parsedMeta = parseMetaString(meta)\n const titleToken = parsedMeta.tokens.find((token) => token.name === 'title' && token.hasExplicitValue)\n const titleValue = typeof parsedMeta.props.title === 'string' ? parsedMeta.props.title : null\n\n if (!titleToken || !titleValue) {\n return meta\n }\n\n const nextTitleValue = replaceTitleFileExtension(titleValue, outputLang)\n if (nextTitleValue === titleValue) {\n return meta\n }\n\n const quote = titleToken.raw.includes(\"title='\") ? \"'\" : '\"'\n return meta.replace(titleToken.raw, `title=${quote}${nextTitleValue}${quote}`)\n}\n\nconst replaceTitleFileExtension = (title: string, outputLang: string) => {\n if (outputLang === 'jsx') {\n return title.replace(/\\.tsx$/i, '.jsx').replace(/\\.ts$/i, '.js')\n }\n\n if (outputLang === 'js') {\n return title.replace(/\\.tsx$/i, '.jsx').replace(/\\.ts$/i, '.js')\n }\n\n return title\n}\n\nconst cleanUpCode = (code: string, isJsCode = false) => {\n if (isJsCode) {\n code = correctCodeDiffComments(code)\n }\n\n return processMagicComments(code)\n}\n\nconst processMagicComments = (code: string) => {\n const renameCommentRe = /^\\s*\\/\\/\\s@docpress-replace\\s([^ ]+) ([^ ]+)\\n/gm\n const matches = Array.from(code.matchAll(renameCommentRe))\n\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n const match = matches[index]\n if (!match) {\n continue\n }\n\n const [fullMatch, renameFrom, renameTo] = match\n code = code.split(fullMatch).join('').replaceAll(renameFrom, renameTo)\n }\n\n return code.replaceAll('// @docpress-uncomment ', '')\n}\n\nconst correctCodeDiffComments = (code: string) => {\n return code.replaceAll(/\\n\\s*\\/\\/\\s\\[!code.+\\]/g, (codeDiff) => codeDiff.trimStart())\n}\n\nconst preserveSourceLineBreaks = (sourceCode: string, outputCode: string) => {\n const multilineSegments = collectMultilineSourceSegments(sourceCode)\n\n if (multilineSegments.length === 0) {\n return outputCode\n }\n\n const outputLines = outputCode.split('\\n')\n\n for (const segmentLines of multilineSegments) {\n const segmentNormalized = normalizeCodeSegment(segmentLines.join('\\n'))\n\n if (!segmentNormalized) {\n continue\n }\n\n for (let start = 0; start < outputLines.length; start += 1) {\n let replaced = false\n\n for (let size = 1; size <= segmentLines.length; size += 1) {\n if (start + size > outputLines.length) {\n break\n }\n\n const outputSegment = outputLines.slice(start, start + size)\n\n if (normalizeCodeSegment(outputSegment.join('\\n')) !== segmentNormalized) {\n continue\n }\n\n if (outputSegment.join('\\n') !== segmentLines.join('\\n')) {\n outputLines.splice(start, size, ...segmentLines)\n }\n\n start += segmentLines.length - 1\n replaced = true\n break\n }\n\n if (replaced) {\n break\n }\n }\n }\n\n return outputLines.join('\\n')\n}\n\nconst collectMultilineSourceSegments = (code: string) => {\n const lines = code.split('\\n')\n const segments: string[][] = []\n let paragraphStart = -1\n\n for (let index = 0; index <= lines.length; index += 1) {\n if (index < lines.length && lines[index]?.trim() !== '') {\n if (paragraphStart === -1) {\n paragraphStart = index\n }\n continue\n }\n\n if (paragraphStart !== -1) {\n const paragraphEnd = index - 1\n\n for (let size = paragraphEnd - paragraphStart + 1; size >= 2; size -= 1) {\n for (let start = paragraphStart; start + size - 1 <= paragraphEnd; start += 1) {\n segments.push(lines.slice(start, start + size).map(replaceFileNameSuffixes))\n }\n }\n }\n\n paragraphStart = -1\n }\n\n return segments\n}\n\nconst preserveSourceBlankLines = (sourceCode: string, outputCode: string) => {\n const blankLineAnchors = collectBlankLineAnchors(sourceCode)\n\n if (blankLineAnchors.length === 0) {\n return outputCode\n }\n\n const outputLines = outputCode.split('\\n')\n let searchFrom = 0\n\n for (const anchor of blankLineAnchors) {\n const lineIndex = outputLines.findIndex((line, index) => index >= searchFrom && normalizeCodeLine(line) === anchor)\n\n if (lineIndex <= 0) {\n continue\n }\n\n if (outputLines[lineIndex - 1]?.trim() !== '') {\n outputLines.splice(lineIndex, 0, '')\n searchFrom = lineIndex + 2\n } else {\n searchFrom = lineIndex + 1\n }\n }\n\n return outputLines.join('\\n')\n}\n\nconst collectBlankLineAnchors = (code: string) => {\n const lines = code.split('\\n')\n const anchors: string[] = []\n\n for (let index = 1; index < lines.length; index += 1) {\n if (lines[index]?.trim() !== '' || lines[index - 1]?.trim() === '') {\n continue\n }\n\n let nextLineIndex = index + 1\n\n while (nextLineIndex < lines.length && lines[nextLineIndex]?.trim() === '') {\n nextLineIndex += 1\n }\n\n const anchor = lines[nextLineIndex]\n\n if (anchor) {\n anchors.push(normalizeCodeLine(anchor))\n }\n }\n\n return anchors\n}\n\nconst normalizeCodeLine = (line: string) => {\n return stripTypeSyntax(replaceFileNameSuffixes(line)).trim().replace(/\\s+/g, ' ')\n}\n\nconst normalizeCodeSegment = (code: string) => {\n return replaceFileNameSuffixes(code).replace(/\\s+/g, '')\n}\n\nconst stripTypeSyntax = (line: string) => {\n return line\n .replace(/\\??:\\s*[A-Za-z_$][\\w$.<>, |&[\\]]*/g, '')\n .replace(/\\s+as\\s+const\\b/g, '')\n .replace(/\\s+as\\s+[A-Za-z_$][\\w$.<>, |&[\\]]*/g, '')\n}\n","import convert_ from 'npm-to-yarn'\nimport { visit } from 'unist-util-visit'\nimport type { ChoiceGroupElement, CodeNode, ParentNode, RootNode } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\nconst convert: (input: string, target: 'npm' | 'pnpm' | 'bun' | 'yarn') => string = convert_\n\nconst PACKAGE_MANAGERS = ['pnpm', 'Bun', 'Yarn'] as const\n\nexport const remarkPkgManager = () => {\n return (tree: RootNode) => {\n visit(tree, 'code', (node: CodeNode, index: number | undefined, parent: ParentNode | undefined) => {\n if (!parent || typeof index !== 'number') {\n return\n }\n\n if (!['bash', 'sh', 'shell'].includes(node.lang ?? '')) {\n return\n }\n\n if (node.value.includes('pnpm')) {\n return\n }\n\n if (!node.value.includes('npm ') && !node.value.includes('npx ')) {\n return\n }\n\n let choice: string | undefined\n if (node.meta) {\n const meta = parseMetaString(node.meta, ['choice'])\n choice = meta.props.choice\n node.meta = meta.rest\n }\n\n node.value = node.value.replaceAll('npm i ', 'npm install ')\n\n const nodes = new Map<string, CodeNode>()\n nodes.set('npm', node)\n\n for (const packageManager of PACKAGE_MANAGERS) {\n const packageManagerNode: CodeNode = {\n ...node,\n value: convert(node.value, packageManager.toLowerCase() as 'pnpm' | 'bun' | 'yarn'),\n }\n nodes.set(packageManager, packageManagerNode)\n }\n\n const replacement = generateChoiceGroupCode(\n [...nodes].map(([choiceValue, childNode]) => ({\n choiceValue,\n children: [childNode],\n })),\n ) as ChoiceGroupElement\n\n replacement.data ??= {}\n replacement.data.customDataChoice = choice\n replacement.data.customDataFilter = replacement.type\n parent.children.splice(index, 1, replacement)\n })\n }\n}\n","import type { ShikiTransformer } from 'shiki'\n\nconst LINK_RE = /https:\\/\\/[^\\s]*[^.,\\s\"'`]/g\n\nexport const shikiTransformerAutoLinks = (): ShikiTransformer => {\n return {\n name: 'solid-docpress-shiki-autolinks',\n span(span) {\n if (span.children.length !== 1) {\n return\n }\n\n let child = span.children[0]\n if (child.type !== 'text') {\n return\n }\n\n const matches = Array.from(child.value.matchAll(LINK_RE)).filter(([href]) => !href.includes('${'))\n if (matches.length === 0) {\n return\n }\n\n const links = matches\n .map((match) => ({ href: match[0], index: match.index ?? 0 }))\n .sort((left, right) => right.index - left.index)\n\n const nextChildren: typeof span.children = []\n\n for (const { href, index } of links) {\n const endIndex = index + href.length\n const trailingText = child.value.slice(endIndex)\n\n if (trailingText) {\n nextChildren.unshift({ type: 'text', value: trailingText })\n }\n\n nextChildren.unshift({\n type: 'element',\n tagName: 'a',\n properties: { href },\n children: [{ type: 'text', value: href }],\n })\n\n child = {\n type: 'text',\n value: child.value.slice(0, index),\n }\n }\n\n if (child.value) {\n nextChildren.unshift(child)\n }\n\n span.children = nextChildren\n },\n }\n}\n"],"mappings":"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","names":["visit","visit","visit","visit","visit","visit"]}
|