diff options
author | 2021-10-29 19:31:54 +0000 | |
---|---|---|
committer | 2021-10-29 19:31:54 +0000 | |
commit | 93489946ccd59c27d85cc9fa3a255edf6efeb861 (patch) | |
tree | 23b08860577f39d2fa2c29b52e6d42cfdd5d1bf6 /packages/markdown/remark/src | |
parent | d84bfe719a546ad855640338d5ed49ad3aa4ccb4 (diff) | |
download | astro-93489946ccd59c27d85cc9fa3a255edf6efeb861.tar.gz astro-93489946ccd59c27d85cc9fa3a255edf6efeb861.tar.zst astro-93489946ccd59c27d85cc9fa3a255edf6efeb861.zip |
[ci] yarn format
Diffstat (limited to 'packages/markdown/remark/src')
-rw-r--r-- | packages/markdown/remark/src/index.ts | 21 | ||||
-rw-r--r-- | packages/markdown/remark/src/rehype-islands.ts | 10 | ||||
-rw-r--r-- | packages/markdown/remark/src/rehype-jsx.ts | 10 | ||||
-rw-r--r-- | packages/markdown/remark/src/remark-prism.ts | 27 | ||||
-rw-r--r-- | packages/markdown/remark/src/remark-slug.ts | 24 | ||||
-rw-r--r-- | packages/markdown/remark/src/remark-unwrap.ts | 20 | ||||
-rw-r--r-- | packages/markdown/remark/src/types.ts | 2 |
7 files changed, 51 insertions, 63 deletions
diff --git a/packages/markdown/remark/src/index.ts b/packages/markdown/remark/src/index.ts index a5fb403d4..5c707a4db 100644 --- a/packages/markdown/remark/src/index.ts +++ b/packages/markdown/remark/src/index.ts @@ -32,17 +32,17 @@ export const DEFAULT_REMARK_PLUGINS = [ 'remark-footnotes', // TODO: reenable smartypants! // '@silvenon/remark-smartypants' -] +]; export const DEFAULT_REHYPE_PLUGINS = [ // empty -] +]; /** Shared utility for rendering markdown */ export async function renderMarkdown(content: string, opts?: MarkdownRenderingOptions | null) { const { remarkPlugins = DEFAULT_REMARK_PLUGINS, rehypePlugins = DEFAULT_REHYPE_PLUGINS } = opts ?? {}; const scopedClassName = opts?.$?.scopedClassName; - const mode = opts?.mode ?? "mdx"; + const mode = opts?.mode ?? 'mdx'; const isMDX = mode === 'mdx'; const { headers, rehypeCollectHeaders } = createCollectHeaders(); @@ -52,7 +52,7 @@ export async function renderMarkdown(content: string, opts?: MarkdownRenderingOp .use(markdown) .use(isMDX ? [remarkJsx] : []) .use(isMDX ? [remarkExpressions] : []) - .use([remarkUnwrap]) + .use([remarkUnwrap]); const loadedRemarkPlugins = await Promise.all(loadPlugins(remarkPlugins)); const loadedRehypePlugins = await Promise.all(loadPlugins(rehypePlugins)); @@ -62,28 +62,25 @@ export async function renderMarkdown(content: string, opts?: MarkdownRenderingOp }); if (scopedClassName) { - parser.use([scopedStyles(scopedClassName)]); + parser.use([scopedStyles(scopedClassName)]); } parser.use([remarkPrism(scopedClassName)]); - parser.use([[markdownToHtml as any, { allowDangerousHtml: true, passThrough: ['raw', 'mdxTextExpression', 'mdxJsxTextElement', 'mdxJsxFlowElement']}]]); + parser.use([[markdownToHtml as any, { allowDangerousHtml: true, passThrough: ['raw', 'mdxTextExpression', 'mdxJsxTextElement', 'mdxJsxFlowElement'] }]]); loadedRehypePlugins.forEach(([plugin, opts]) => { parser.use([[plugin, opts]]); }); - + parser .use(isMDX ? [rehypeJsx] : []) .use(isMDX ? [rehypeExpressions] : []) .use(isMDX ? [] : [rehypeRaw]) - .use(rehypeIslands) + .use(rehypeIslands); let result: string; try { - const vfile = await parser - .use([rehypeCollectHeaders]) - .use(rehypeStringify, { allowDangerousHtml: true }) - .process(content); + const vfile = await parser.use([rehypeCollectHeaders]).use(rehypeStringify, { allowDangerousHtml: true }).process(content); result = vfile.toString(); } catch (err) { console.error(err); diff --git a/packages/markdown/remark/src/rehype-islands.ts b/packages/markdown/remark/src/rehype-islands.ts index 099dc4d75..b98419cd4 100644 --- a/packages/markdown/remark/src/rehype-islands.ts +++ b/packages/markdown/remark/src/rehype-islands.ts @@ -1,4 +1,4 @@ -import {SKIP, visit} from 'unist-util-visit'; +import { SKIP, visit } from 'unist-util-visit'; // This fixes some confusing bugs coming from somewhere inside of our Markdown pipeline. // `unist`/`remark`/`rehype` (not sure) often generate malformed HTML inside of <astro-root> @@ -11,11 +11,11 @@ export default function rehypeIslands(): any { if (el.tagName == 'astro-root') { visit(el, 'text', (child, index, parent) => { if (child.type === 'text') { - // Sometimes comments can be trapped as text, which causes them to be escaped + // Sometimes comments can be trapped as text, which causes them to be escaped // This casts them back to real HTML comments if (parent && child.value.indexOf('<!--') > -1 && index != null) { - parent.children.splice(index, 1, { ...child, type: 'comment', value: child.value.replace('<!--', '').replace('-->', '').trim()}); - return [SKIP, index] + parent.children.splice(index, 1, { ...child, type: 'comment', value: child.value.replace('<!--', '').replace('-->', '').trim() }); + return [SKIP, index]; } // For some reason `rehype` likes to inject extra linebreaks, // but React and Vue throw hydration errors when they see these! @@ -24,7 +24,7 @@ export default function rehypeIslands(): any { child.value = child.value.replace(/\n+/g, ''); return child; } - }) + }); } }); }; diff --git a/packages/markdown/remark/src/rehype-jsx.ts b/packages/markdown/remark/src/rehype-jsx.ts index c5270e2af..94632efed 100644 --- a/packages/markdown/remark/src/rehype-jsx.ts +++ b/packages/markdown/remark/src/rehype-jsx.ts @@ -5,22 +5,22 @@ export default function rehypeJsx(): any { return function (node: any): any { return map(node, (child: any) => { if (child.type === 'element') { - return { ...child, tagName: `${child.tagName}` } + return { ...child, tagName: `${child.tagName}` }; } if (MDX_ELEMENTS.has(child.type)) { - return { + return { ...child, type: 'element', tagName: `${child.name}`, properties: child.attributes.reduce((acc: any[], entry: any) => { let attr = entry.value; if (attr && typeof attr === 'object') { - attr = `{${attr.value}}` + attr = `{${attr.value}}`; } else if (attr === null) { - attr = `{true}` + attr = `{true}`; } return Object.assign(acc, { [entry.name]: attr }); - }, {}) + }, {}), }; } return child; diff --git a/packages/markdown/remark/src/remark-prism.ts b/packages/markdown/remark/src/remark-prism.ts index d8dd8d922..d7a4ff996 100644 --- a/packages/markdown/remark/src/remark-prism.ts +++ b/packages/markdown/remark/src/remark-prism.ts @@ -4,26 +4,24 @@ import { addAstro } from '@astrojs/prism'; import loadLanguages from 'prismjs/components/index.js'; const noVisit = new Set(['root', 'html', 'text']); -const languageMap = new Map([ - ['ts', 'typescript'] -]); +const languageMap = new Map([['ts', 'typescript']]); function runHighlighter(lang: string, code: string) { - let classLanguage = `language-${lang}` + let classLanguage = `language-${lang}`; if (lang == null) { lang = 'plaintext'; } const ensureLoaded = (lang: string) => { - if(lang && !Prism.languages[lang]) { + if (lang && !Prism.languages[lang]) { loadLanguages([lang]); } }; - if(languageMap.has(lang)) { + if (languageMap.has(lang)) { ensureLoaded(languageMap.get(lang)!); - } else if(lang === 'astro') { + } else if (lang === 'astro') { ensureLoaded('typescript'); addAstro(Prism); } else { @@ -31,7 +29,7 @@ function runHighlighter(lang: string, code: string) { ensureLoaded(lang); } - if(lang && !Prism.languages[lang]) { + if (lang && !Prism.languages[lang]) { console.warn(`Unable to load the language: ${lang}`); } @@ -48,26 +46,25 @@ type MaybeString = string | null | undefined; /** */ function transformer(className: MaybeString) { - return function(tree: any) { + return function (tree: any) { const visitor = (node: any) => { - let {lang, value} = node; + let { lang, value } = node; node.type = 'html'; let { html, classLanguage } = runHighlighter(lang, value); let classes = [classLanguage]; - if(className) { + if (className) { classes.push(className); } node.value = `<pre class="${classes.join(' ')}"><code data-astro-raw class="${classLanguage}">${html}</code></pre>`; return node; }; - return visit(tree, 'code', visitor) - } + return visit(tree, 'code', visitor); + }; } - function plugin(className: MaybeString) { return transformer.bind(null, className); } -export default plugin;
\ No newline at end of file +export default plugin; diff --git a/packages/markdown/remark/src/remark-slug.ts b/packages/markdown/remark/src/remark-slug.ts index b7c9c29de..4454d1087 100644 --- a/packages/markdown/remark/src/remark-slug.ts +++ b/packages/markdown/remark/src/remark-slug.ts @@ -3,11 +3,11 @@ * @typedef {import('hast').Properties} Properties */ -import {toString} from 'mdast-util-to-string' -import {visit} from 'unist-util-visit' -import BananaSlug from 'github-slugger' +import { toString } from 'mdast-util-to-string'; +import { visit } from 'unist-util-visit'; +import BananaSlug from 'github-slugger'; -const slugs = new BananaSlug() +const slugs = new BananaSlug(); /** * Plugin to add anchors headings using GitHub’s algorithm. @@ -16,19 +16,17 @@ const slugs = new BananaSlug() */ export default function remarkSlug() { return (tree: any) => { - slugs.reset() + slugs.reset(); visit(tree, (node) => { console.log(node); }); visit(tree, 'heading', (node) => { - const data = node.data || (node.data = {}) - const props = /** @type {Properties} */ ( - data.hProperties || (data.hProperties = {}) - ) - let id = props.id - id = id ? slugs.slug(String(id), true) : slugs.slug(toString(node)) + const data = node.data || (node.data = {}); + const props = /** @type {Properties} */ data.hProperties || (data.hProperties = {}); + let id = props.id; + id = id ? slugs.slug(String(id), true) : slugs.slug(toString(node)); data.id = id; props.id = id; - }) - } + }); + }; } diff --git a/packages/markdown/remark/src/remark-unwrap.ts b/packages/markdown/remark/src/remark-unwrap.ts index e43a57a0c..d6f3275ab 100644 --- a/packages/markdown/remark/src/remark-unwrap.ts +++ b/packages/markdown/remark/src/remark-unwrap.ts @@ -1,4 +1,4 @@ -import {visit, SKIP} from 'unist-util-visit' +import { visit, SKIP } from 'unist-util-visit'; // Remove the wrapping paragraph for <astro-root> islands export default function remarkUnwrap() { @@ -18,21 +18,17 @@ export default function remarkUnwrap() { insideAstroRoot = false; } astroRootNodes.add(node); - }) + }); visit(tree, 'paragraph', (node, index, parent) => { - if ( - parent && - typeof index === 'number' && - containsAstroRootNode(node) - ) { - parent.children.splice(index, 1, ...node.children) - return [SKIP, index] + if (parent && typeof index === 'number' && containsAstroRootNode(node)) { + parent.children.splice(index, 1, ...node.children); + return [SKIP, index]; } - }) - } + }); + }; function containsAstroRootNode(node: any) { - return node.children.map((child: any) => astroRootNodes.has(child)).reduce((all: boolean, v: boolean) => all ? all : v, false) + return node.children.map((child: any) => astroRootNodes.has(child)).reduce((all: boolean, v: boolean) => (all ? all : v), false); } } diff --git a/packages/markdown/remark/src/types.ts b/packages/markdown/remark/src/types.ts index 201e50931..8ae7795d0 100644 --- a/packages/markdown/remark/src/types.ts +++ b/packages/markdown/remark/src/types.ts @@ -4,7 +4,7 @@ export type UnifiedPluginImport = Promise<{ default: unified.Plugin }>; export type Plugin = string | [string, any] | UnifiedPluginImport | [UnifiedPluginImport, any]; export interface AstroMarkdownOptions { - mode?: 'md'|'mdx'; + mode?: 'md' | 'mdx'; remarkPlugins?: Plugin[]; rehypePlugins?: Plugin[]; } |