@scalar/code-highlight 0.2.3 → 0.2.4
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.
- package/CHANGELOG.md +6 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +2 -2
- package/dist/markdown/markdown.d.ts +13 -1
- package/dist/markdown/markdown.d.ts.map +1 -1
- package/dist/markdown/markdown.js +13 -13
- package/dist/markdown/markdown.js.map +2 -2
- package/package.json +1 -2
package/CHANGELOG.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { syntaxHighlight } from './code/index.js';
|
|
2
2
|
export { lowlightLanguageMappings } from './constants.js';
|
|
3
3
|
export * from './languages/index.js';
|
|
4
|
-
export { htmlFromMarkdown } from './markdown/index.js';
|
|
4
|
+
export { type Node, htmlFromMarkdown, isHeading, textFromNode } from './markdown/index.js';
|
|
5
5
|
export { rehypeHighlight } from './rehype-highlight/index.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACtD,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACtD,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,KAAK,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { syntaxHighlight } from "./code/index.js";
|
|
2
2
|
import { lowlightLanguageMappings } from "./constants.js";
|
|
3
3
|
export * from "./languages/index.js";
|
|
4
|
-
import { htmlFromMarkdown } from "./markdown/index.js";
|
|
4
|
+
import { htmlFromMarkdown, isHeading, textFromNode } from "./markdown/index.js";
|
|
5
5
|
import { rehypeHighlight } from "./rehype-highlight/index.js";
|
|
6
6
|
export {
|
|
7
7
|
htmlFromMarkdown,
|
|
8
|
+
isHeading,
|
|
8
9
|
lowlightLanguageMappings,
|
|
9
10
|
rehypeHighlight,
|
|
10
|
-
syntaxHighlight
|
|
11
|
+
syntaxHighlight,
|
|
12
|
+
textFromNode
|
|
11
13
|
};
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["export { syntaxHighlight } from './code'\nexport { lowlightLanguageMappings } from './constants'\nexport * from './languages'\nexport { htmlFromMarkdown } from './markdown'\nexport { rehypeHighlight } from './rehype-highlight'\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAS,gCAAgC;AACzC,cAAc;AACd,
|
|
4
|
+
"sourcesContent": ["export { syntaxHighlight } from './code'\nexport { lowlightLanguageMappings } from './constants'\nexport * from './languages'\nexport { type Node, htmlFromMarkdown, isHeading, textFromNode } from './markdown'\nexport { rehypeHighlight } from './rehype-highlight'\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAS,gCAAgC;AACzC,cAAc;AACd,SAAoB,kBAAkB,WAAW,oBAAoB;AACrE,SAAS,uBAAuB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import type { Heading, Node, PhrasingContent } from 'mdast';
|
|
2
|
+
export type { Node } from 'mdast';
|
|
3
|
+
/**
|
|
4
|
+
* Type-guard to check if a node is a heading.
|
|
5
|
+
*/
|
|
6
|
+
export declare const isHeading: (node: Node) => node is Heading;
|
|
1
7
|
/**
|
|
2
8
|
* Take a Markdown string and generate HTML from it
|
|
3
9
|
*/
|
|
4
10
|
export declare function htmlFromMarkdown(markdown: string, options?: {
|
|
5
11
|
removeTags?: string[];
|
|
6
12
|
allowTags?: string[];
|
|
7
|
-
transform?: (node:
|
|
13
|
+
transform?: (node: Node) => Node;
|
|
8
14
|
transformType?: string;
|
|
9
15
|
}): string;
|
|
10
16
|
/**
|
|
@@ -14,6 +20,12 @@ export declare function getHeadings(markdown: string, depth?: number): {
|
|
|
14
20
|
depth: number;
|
|
15
21
|
value: string;
|
|
16
22
|
}[];
|
|
23
|
+
/**
|
|
24
|
+
* Extract plain text from a Markdown AST node (recursively).
|
|
25
|
+
*
|
|
26
|
+
* Handles headings with nested phrasing content such as links.
|
|
27
|
+
*/
|
|
28
|
+
export declare function textFromNode(node: Heading | PhrasingContent): string;
|
|
17
29
|
/**
|
|
18
30
|
* Return multiple Markdown documents. Every heading should be its own document.
|
|
19
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/markdown/markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/markdown/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAqB,MAAM,OAAO,CAAA;AAsB9E,YAAY,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAEjC;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,KAAG,IAAI,IAAI,OAE9C,CAAA;AAqBD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAChC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,UAuDF;AASD;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAU,GAChB;IACD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,EAAE,CAiBF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,MAAM,CAUpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,YAgC5C"}
|
|
@@ -12,6 +12,9 @@ import { SKIP, visit } from "unist-util-visit";
|
|
|
12
12
|
import { standardLanguages } from "../languages/index.js";
|
|
13
13
|
import { rehypeAlert } from "../rehype-alert/index.js";
|
|
14
14
|
import { rehypeHighlight } from "../rehype-highlight/index.js";
|
|
15
|
+
const isHeading = (node) => {
|
|
16
|
+
return node.type === "heading" && "depth" in node && "children" in node;
|
|
17
|
+
};
|
|
15
18
|
const transformNodes = (options, ..._ignored) => (tree) => {
|
|
16
19
|
if (!options?.transform || !options?.type) {
|
|
17
20
|
return;
|
|
@@ -58,26 +61,21 @@ function getHeadings(markdown, depth = 1) {
|
|
|
58
61
|
const tree = getMarkdownAst(markdown);
|
|
59
62
|
const nodes = [];
|
|
60
63
|
visit(tree, "heading", (node) => {
|
|
61
|
-
const text =
|
|
64
|
+
const text = textFromNode(node);
|
|
62
65
|
if (text) {
|
|
63
|
-
nodes.push({ depth: node.depth ?? depth, value: text
|
|
66
|
+
nodes.push({ depth: node.depth ?? depth, value: text });
|
|
64
67
|
}
|
|
65
68
|
});
|
|
66
69
|
return nodes;
|
|
67
70
|
}
|
|
68
|
-
function
|
|
71
|
+
function textFromNode(node) {
|
|
69
72
|
if (node.type === "text") {
|
|
70
|
-
return node;
|
|
73
|
+
return node.value ?? "";
|
|
71
74
|
}
|
|
72
|
-
if ("children" in node && node.children) {
|
|
73
|
-
|
|
74
|
-
const text = findTextInHeading(child);
|
|
75
|
-
if (text) {
|
|
76
|
-
return text;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
75
|
+
if ("children" in node && Array.isArray(node.children)) {
|
|
76
|
+
return node.children.map((child) => textFromNode(child)).join("");
|
|
79
77
|
}
|
|
80
|
-
return
|
|
78
|
+
return "";
|
|
81
79
|
}
|
|
82
80
|
function splitContent(markdown) {
|
|
83
81
|
const tree = getMarkdownAst(markdown);
|
|
@@ -109,6 +107,8 @@ function createDocument(nodes) {
|
|
|
109
107
|
export {
|
|
110
108
|
getHeadings,
|
|
111
109
|
htmlFromMarkdown,
|
|
112
|
-
|
|
110
|
+
isHeading,
|
|
111
|
+
splitContent,
|
|
112
|
+
textFromNode
|
|
113
113
|
};
|
|
114
114
|
//# sourceMappingURL=markdown.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/markdown/markdown.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Heading, PhrasingContent, Root, RootContent
|
|
5
|
-
"mappings": "AACA,OAAO,yBAAyB;AAChC,OAAO,kBAAkB;AACzB,OAAO,eAAe;AACtB,OAAO,kBAAkB,qBAAqB;AAC9C,OAAO,qBAAqB;AAC5B,OAAO,eAAe;AACtB,OAAO,iBAAiB;AACxB,OAAO,kBAAkB;AACzB,OAAO,qBAAqB;AAC5B,SAAS,eAAe;
|
|
4
|
+
"sourcesContent": ["import type { Heading, Node, PhrasingContent, Root, RootContent } from 'mdast'\nimport rehypeExternalLinks from 'rehype-external-links'\nimport rehypeFormat from 'rehype-format'\nimport rehypeRaw from 'rehype-raw'\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize'\nimport rehypeStringify from 'rehype-stringify'\nimport remarkGfm from 'remark-gfm'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport remarkStringify from 'remark-stringify'\nimport { unified } from 'unified'\nimport { SKIP, visit } from 'unist-util-visit'\n\nimport { standardLanguages } from '@/languages'\nimport { rehypeAlert } from '@/rehype-alert'\nimport { rehypeHighlight } from '@/rehype-highlight'\n\ntype Options = {\n transform?: (node: Node) => Node\n type?: string\n}\n\nexport type { Node } from 'mdast'\n\n/**\n * Type-guard to check if a node is a heading.\n */\nexport const isHeading = (node: Node): node is Heading => {\n return node.type === 'heading' && 'depth' in node && 'children' in node\n}\n\n/**\n * Plugin to transform nodes in a Markdown AST\n */\nconst transformNodes =\n (options?: Readonly<Options> | null | undefined, ..._ignored: any[]) =>\n (tree: Node) => {\n if (!options?.transform || !options?.type) {\n return\n }\n\n visit(tree, options?.type, (node) => {\n options?.transform ? options?.transform(node) : node\n\n return SKIP\n })\n\n return\n }\n\n/**\n * Take a Markdown string and generate HTML from it\n */\nexport function htmlFromMarkdown(\n markdown: string,\n options?: {\n removeTags?: string[]\n allowTags?: string[]\n transform?: (node: Node) => Node\n transformType?: string\n },\n) {\n // Add permitted tags and remove stripped ones\n const removeTags = options?.removeTags ?? []\n const tagNames = [...(defaultSchema.tagNames ?? []), ...(options?.allowTags ?? [])].filter(\n (t) => !removeTags.includes(t),\n )\n\n const html = unified()\n // Parses markdown\n .use(remarkParse)\n // Support autolink literals, footnotes, strikethrough, tables and tasklists\n .use(remarkGfm)\n .use(transformNodes, {\n transform: options?.transform,\n type: options?.transformType,\n })\n // Allows any HTML tags\n .use(remarkRehype, { allowDangerousHtml: true })\n // Adds GitHub alerts\n .use(rehypeAlert)\n // Creates a HTML AST\n .use(rehypeRaw)\n // Removes disallowed tags\n .use(rehypeSanitize, {\n ...defaultSchema,\n // Don't prefix the heading ids\n clobberPrefix: '',\n // Makes it even more strict\n tagNames,\n attributes: {\n ...defaultSchema.attributes,\n abbr: ['title'],\n // Allow all class names while preserving the existing default attributes\n '*': [...(defaultSchema.attributes?.['*'] ?? []), 'className'],\n },\n // Strip content of dangerous elements, not just the tags\n strip: ['script', 'style', 'object', 'embed', 'form'],\n })\n // Syntax highlighting\n .use(rehypeHighlight, {\n languages: standardLanguages,\n // Enable auto detection\n detect: true,\n })\n // Adds target=\"_blank\" to external links\n .use(rehypeExternalLinks, { target: '_blank' })\n // Formats the HTML\n .use(rehypeFormat)\n // Converts the HTML AST to a string\n .use(rehypeStringify)\n // Run the pipeline\n .processSync(markdown)\n\n return html.toString()\n}\n\n/**\n * Create a Markdown AST from a string.\n */\nfunction getMarkdownAst(markdown: string): Root {\n return unified().use(remarkParse).use(remarkGfm).parse(markdown)\n}\n\n/**\n * Find all headings of a specific type in a Markdown AST.\n */\nexport function getHeadings(\n markdown: string,\n depth: number = 1,\n): {\n depth: number\n value: string\n}[] {\n const tree = getMarkdownAst(markdown)\n\n const nodes: {\n depth: number\n value: string\n }[] = []\n\n visit(tree, 'heading', (node) => {\n const text = textFromNode(node)\n\n if (text) {\n nodes.push({ depth: node.depth ?? depth, value: text })\n }\n })\n\n return nodes\n}\n\n/**\n * Extract plain text from a Markdown AST node (recursively).\n *\n * Handles headings with nested phrasing content such as links.\n */\nexport function textFromNode(node: Heading | PhrasingContent): string {\n if (node.type === 'text') {\n return node.value ?? ''\n }\n\n if ('children' in node && Array.isArray(node.children)) {\n return node.children.map((child) => textFromNode(child)).join('')\n }\n\n return ''\n}\n\n/**\n * Return multiple Markdown documents. Every heading should be its own document.\n */\nexport function splitContent(markdown: string) {\n const tree = getMarkdownAst(markdown)\n\n /** Sections */\n const sections: RootContent[][] = []\n\n /** Nodes inside a section */\n let nodes: RootContent[] = []\n\n tree.children?.forEach((node) => {\n // If the node is a heading, start a new section\n if (node.type === 'heading') {\n if (nodes.length) {\n sections.push(nodes)\n }\n\n sections.push([node])\n\n nodes = []\n }\n // Otherwise, add the node to the current section\n else {\n nodes.push(node)\n }\n })\n\n // Add any remaining nodes\n if (nodes.length) {\n sections.push(nodes)\n }\n\n return sections.map((section) => createDocument(section))\n}\n\n/**\n * Use remark to create a Markdown document from a list of nodes.\n */\nfunction createDocument(nodes: RootContent[]) {\n // Create the Markdown string\n const markdown = unified().use(remarkStringify).use(remarkGfm).stringify({\n type: 'root',\n children: nodes,\n })\n\n // Remove the whitespace\n return markdown.trim()\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"lowlight",
|
|
17
17
|
"highlightjs"
|
|
18
18
|
],
|
|
19
|
-
"version": "0.2.
|
|
19
|
+
"version": "0.2.4",
|
|
20
20
|
"engines": {
|
|
21
21
|
"node": ">=20"
|
|
22
22
|
},
|
|
@@ -91,7 +91,6 @@
|
|
|
91
91
|
"devDependencies": {
|
|
92
92
|
"@types/hast": "^3.0.4",
|
|
93
93
|
"@types/mdast": "^4.0.4",
|
|
94
|
-
"@types/unist": "^3.0.3",
|
|
95
94
|
"vfile": "^6.0.1",
|
|
96
95
|
"vite": "^7.3.1",
|
|
97
96
|
"@scalar/build-tooling": "0.4.1",
|