diff options
author | 2022-08-01 16:23:56 -0500 | |
---|---|---|
committer | 2022-08-01 17:23:56 -0400 | |
commit | 40ef43a59b08a1a8fbcd9f4a53745a9636a4fbb9 (patch) | |
tree | 8de04dac9061ee3febc6daea482e34ec08f9295a /packages/integrations/mdx/src/utils.ts | |
parent | f62f05f181502dba1d8e705b6c33e6cdcca7340a (diff) | |
download | astro-40ef43a59b08a1a8fbcd9f4a53745a9636a4fbb9.tar.gz astro-40ef43a59b08a1a8fbcd9f4a53745a9636a4fbb9.tar.zst astro-40ef43a59b08a1a8fbcd9f4a53745a9636a4fbb9.zip |
[MDX] Add `getHeadings` + generate anchor links (#4095)
* deps: mdx github-slugger
* feat: add getHeadings via rehype plugin
* chore: stray console.log
* test: getHeadings w/ & w/0 JSX expressions
* docs: add generated exports
* refactor: pass headings using vfile.data
* deps: vfile
* test: heading anchor IDs
* docs: add collect-headings to default rehype plugins
* chore: changeset
* deps: estree-util-value-to-estree
* refactor: inject getHeadings export the right way!
* deps: switch to acorn
* refactor: just use acorn
* docs: `getHeadings` info structuring
Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>
* docs: clarify `url` example
Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>
* fix: move slugger inside plugin call
* refactor: cleanup code reassignment
* chore: lint
* deps: mdast-util-mdx, test utils
* refactor: add jsToTreeNode util
* feat: expose utils for lib authors
* test: rehype plugins w/ and w/o extends
* test: fixture
* refactor: remove utils from package exports
Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>
Diffstat (limited to 'packages/integrations/mdx/src/utils.ts')
-rw-r--r-- | packages/integrations/mdx/src/utils.ts | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/integrations/mdx/src/utils.ts b/packages/integrations/mdx/src/utils.ts index ccce179c9..7b2c4f4ec 100644 --- a/packages/integrations/mdx/src/utils.ts +++ b/packages/integrations/mdx/src/utils.ts @@ -1,4 +1,8 @@ import type { AstroConfig, SSRError } from 'astro'; +import type { Options as AcornOpts } from 'acorn'; +import type { MdxjsEsm } from 'mdast-util-mdx'; +import { parse } from 'acorn'; + import matter from 'gray-matter'; function appendForwardSlash(path: string) { @@ -58,3 +62,24 @@ export function getFrontmatter(code: string, id: string) { } } } + +export function jsToTreeNode( + jsString: string, + acornOpts: AcornOpts = { + ecmaVersion: 'latest', + sourceType: 'module', + } +): MdxjsEsm { + return { + type: 'mdxjsEsm', + value: '', + data: { + estree: { + body: [], + ...parse(jsString, acornOpts), + type: 'Program', + sourceType: 'module', + }, + }, + }; +} |