diff options
author | 2022-09-26 18:23:47 -0400 | |
---|---|---|
committer | 2022-09-26 18:23:47 -0400 | |
commit | 58a2dca2286cb14f6211cf51267c02447e78433a (patch) | |
tree | 2595109fafef818469382b1600205665dde264d0 /packages/integrations/mdx/src/utils.ts | |
parent | b73ec1417117ccc479183fec6efcf06990e5b905 (diff) | |
download | astro-58a2dca2286cb14f6211cf51267c02447e78433a.tar.gz astro-58a2dca2286cb14f6211cf51267c02447e78433a.tar.zst astro-58a2dca2286cb14f6211cf51267c02447e78433a.zip |
Fix: correctly transform `import.meta.env.*` in MDX (#4858)
* fix: serialize route pattern for Netlify edge
Co-authored-by: Jackie Macharia <jackiewmacharia>
* fix: escape import.meta.env in MDX compiler output
* test: env vars in mdx
* chore: changeset
* deps: estree-util-visit, @types/estree
* feat: inject import.meta.env w/ recma
* feat: pull importMetaEnv from vite + astro configs
* test: `import.meta.env` in JSX
* fix: lockfile
* chore: update changeset
* fix: remove stray stashed commit
Diffstat (limited to 'packages/integrations/mdx/src/utils.ts')
-rw-r--r-- | packages/integrations/mdx/src/utils.ts | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/packages/integrations/mdx/src/utils.ts b/packages/integrations/mdx/src/utils.ts index d4d13ab05..60a50c85a 100644 --- a/packages/integrations/mdx/src/utils.ts +++ b/packages/integrations/mdx/src/utils.ts @@ -1,32 +1,8 @@ -import { nodeTypes } from '@mdx-js/mdx'; -import type { PluggableList } from '@mdx-js/mdx/lib/core.js'; -import type { Options as MdxRollupPluginOptions } from '@mdx-js/rollup'; import type { Options as AcornOpts } from 'acorn'; import { parse } from 'acorn'; import type { AstroConfig, SSRError } from 'astro'; import matter from 'gray-matter'; -import { bold, yellow } from 'kleur/colors'; import type { MdxjsEsm } from 'mdast-util-mdx'; -import rehypeRaw from 'rehype-raw'; -import remarkGfm from 'remark-gfm'; -import remarkSmartypants from 'remark-smartypants'; -import { remarkInitializeAstroData } from './astro-data-utils.js'; -import rehypeCollectHeadings from './rehype-collect-headings.js'; -import remarkPrism from './remark-prism.js'; -import remarkShiki from './remark-shiki.js'; - -export type MdxOptions = { - remarkPlugins?: PluggableList; - rehypePlugins?: PluggableList; - /** - * Choose which remark and rehype plugins to inherit, if any. - * - * - "markdown" (default) - inherit your project’s markdown plugin config ([see Markdown docs](https://docs.astro.build/en/guides/markdown-content/#configuring-markdown)) - * - "astroDefaults" - inherit Astro’s default plugins only ([see defaults](https://docs.astro.build/en/reference/configuration-reference/#markdownextenddefaultplugins)) - * - false - do not inherit any plugins - */ - extendPlugins?: 'markdown' | 'astroDefaults' | false; -}; function appendForwardSlash(path: string) { return path.endsWith('/') ? path : path + '/'; @@ -37,9 +13,6 @@ interface FileInfo { fileUrl: string; } -const DEFAULT_REMARK_PLUGINS: PluggableList = [remarkGfm, remarkSmartypants]; -const DEFAULT_REHYPE_PLUGINS: PluggableList = []; - /** @see 'vite-plugin-utils' for source */ export function getFileInfo(id: string, config: AstroConfig): FileInfo { const sitePathname = appendForwardSlash( @@ -110,97 +83,6 @@ export function jsToTreeNode( }; } -export async function getRemarkPlugins( - mdxOptions: MdxOptions, - config: AstroConfig -): Promise<MdxRollupPluginOptions['remarkPlugins']> { - let remarkPlugins: PluggableList = [ - // Set "vfile.data.astro" for plugins to inject frontmatter - remarkInitializeAstroData, - ]; - switch (mdxOptions.extendPlugins) { - case false: - break; - case 'astroDefaults': - remarkPlugins = [...remarkPlugins, ...DEFAULT_REMARK_PLUGINS]; - break; - default: - remarkPlugins = [ - ...remarkPlugins, - ...(markdownShouldExtendDefaultPlugins(config) ? DEFAULT_REMARK_PLUGINS : []), - ...ignoreStringPlugins(config.markdown.remarkPlugins ?? []), - ]; - break; - } - if (config.markdown.syntaxHighlight === 'shiki') { - remarkPlugins.push([await remarkShiki(config.markdown.shikiConfig)]); - } - if (config.markdown.syntaxHighlight === 'prism') { - remarkPlugins.push(remarkPrism); - } - - remarkPlugins = [...remarkPlugins, ...(mdxOptions.remarkPlugins ?? [])]; - return remarkPlugins; -} - -export function getRehypePlugins( - mdxOptions: MdxOptions, - config: AstroConfig -): MdxRollupPluginOptions['rehypePlugins'] { - let rehypePlugins: PluggableList = [ - // getHeadings() is guaranteed by TS, so we can't allow user to override - rehypeCollectHeadings, - // rehypeRaw allows custom syntax highlighters to work without added config - [rehypeRaw, { passThrough: nodeTypes }] as any, - ]; - switch (mdxOptions.extendPlugins) { - case false: - break; - case 'astroDefaults': - rehypePlugins = [...rehypePlugins, ...DEFAULT_REHYPE_PLUGINS]; - break; - default: - rehypePlugins = [ - ...rehypePlugins, - ...(markdownShouldExtendDefaultPlugins(config) ? DEFAULT_REHYPE_PLUGINS : []), - ...ignoreStringPlugins(config.markdown.rehypePlugins ?? []), - ]; - break; - } - - rehypePlugins = [...rehypePlugins, ...(mdxOptions.rehypePlugins ?? [])]; - return rehypePlugins; -} - -function markdownShouldExtendDefaultPlugins(config: AstroConfig): boolean { - return ( - config.markdown.extendDefaultPlugins || - (config.markdown.remarkPlugins.length === 0 && config.markdown.rehypePlugins.length === 0) - ); -} - -function ignoreStringPlugins(plugins: any[]) { - let validPlugins: PluggableList = []; - let hasInvalidPlugin = false; - for (const plugin of plugins) { - if (typeof plugin === 'string') { - console.warn(yellow(`[MDX] ${bold(plugin)} not applied.`)); - hasInvalidPlugin = true; - } else if (Array.isArray(plugin) && typeof plugin[0] === 'string') { - console.warn(yellow(`[MDX] ${bold(plugin[0])} not applied.`)); - hasInvalidPlugin = true; - } else { - validPlugins.push(plugin); - } - } - if (hasInvalidPlugin) { - console.warn( - `To inherit Markdown plugins in MDX, please use explicit imports in your config instead of "strings." See Markdown docs: https://docs.astro.build/en/guides/markdown-content/#markdown-plugins` - ); - } - return validPlugins; -} - // TODO: remove for 1.0 export function handleExtendsNotSupported(pluginConfig: any) { if ( |