diff options
author | 2021-07-01 19:55:22 +0300 | |
---|---|---|
committer | 2021-07-01 11:55:22 -0500 | |
commit | d3969436dcbe40a3d41a036ff7c2761aed176109 (patch) | |
tree | 5b79d1ce306566bc53a71e2fe2e5b494adf20904 /packages/markdown-support/src/load-plugins.ts | |
parent | e773771b917d1d11e8a5647ccdc2d44c903f1f4c (diff) | |
download | astro-d3969436dcbe40a3d41a036ff7c2761aed176109.tar.gz astro-d3969436dcbe40a3d41a036ff7c2761aed176109.tar.zst astro-d3969436dcbe40a3d41a036ff7c2761aed176109.zip |
Remark and rehype plugins (#562)
* remark plugins
* remove unused dependency
* enable codeblocks
* backward compatibility with remark-code-titles
* add support for rehype plugins
* add proper types for plugins
* fixes after review
- connect plugins by name
- make plugins configurable
- connect gfm and footnotes if no plugins provided from config
- add more plugins to example
* update and rename example
* add documentation for markdown plugins
* chore: rename with-markdown-plugins example
* chore: restructure dependencies
* feat: add back smartypants, fix mdx expressions
* chore: remove log
* test: add markdown plugin tests
* chore: add changeset
* docs: update markdown doc
Co-authored-by: Nate Moore <nate@skypack.dev>
Diffstat (limited to 'packages/markdown-support/src/load-plugins.ts')
-rw-r--r-- | packages/markdown-support/src/load-plugins.ts | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/packages/markdown-support/src/load-plugins.ts b/packages/markdown-support/src/load-plugins.ts new file mode 100644 index 000000000..52bc287f8 --- /dev/null +++ b/packages/markdown-support/src/load-plugins.ts @@ -0,0 +1,27 @@ +import unified from "unified"; +import type { Plugin, UnifiedPluginImport } from "./types"; + +async function importPlugin(p: string | UnifiedPluginImport): UnifiedPluginImport { + if (typeof p === 'string') { + return await import(p); + } + + return await p; +} + +export function loadPlugins(items: Plugin[]): Promise<[unified.Plugin] | [unified.Plugin, unified.Settings]>[] { + return items.map((p) => { + return new Promise((resolve, reject) => { + if (Array.isArray(p)) { + const [plugin, opts] = p; + return importPlugin(plugin) + .then((m) => resolve([m.default, opts])) + .catch((e) => reject(e)); + } + + return importPlugin(p) + .then((m) => resolve([m.default])) + .catch((e) => reject(e)); + }); + }); +} |