@astrojs/markdown-remark 0.5.0 → 0.6.1-next.2
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 +37 -4
- package/dist/index.js +10 -3
- package/dist/load-plugins.d.ts +1 -1
- package/dist/load-plugins.js +6 -5
- package/dist/rehype-collect-headers.js +1 -1
- package/dist/rehype-escape.js +1 -1
- package/dist/rehype-expressions.js +1 -1
- package/dist/rehype-islands.js +3 -2
- package/dist/rehype-jsx.js +1 -1
- package/dist/remark-expressions.js +1 -1
- package/dist/remark-jsx.js +1 -1
- package/dist/remark-prism.js +1 -1
- package/dist/remark-scoped-styles.js +1 -1
- package/dist/remark-shiki.d.ts +30 -0
- package/dist/remark-shiki.js +29 -0
- package/dist/remark-slug.js +1 -1
- package/dist/remark-unwrap.js +3 -2
- package/dist/types.d.ts +5 -5
- package/package.json +9 -4
- package/src/index.ts +68 -60
- package/src/load-plugins.ts +21 -20
- package/src/rehype-collect-headers.ts +25 -25
- package/src/rehype-escape.ts +8 -8
- package/src/rehype-expressions.ts +8 -8
- package/src/rehype-islands.ts +28 -24
- package/src/rehype-jsx.ts +24 -24
- package/src/remark-expressions.ts +19 -19
- package/src/remark-jsx.ts +19 -19
- package/src/remark-prism.ts +42 -42
- package/src/remark-scoped-styles.ts +10 -10
- package/src/remark-shiki.ts +62 -0
- package/src/remark-slug.ts +14 -14
- package/src/remark-unwrap.ts +30 -26
- package/src/types.ts +12 -10
- package/tsconfig.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @astrojs/markdown-remark
|
|
2
2
|
|
|
3
|
+
## 0.6.1-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#2564](https://github.com/withastro/astro/pull/2564) [`d71c4620`](https://github.com/withastro/astro/commit/d71c46207af40de6811596ca4f5e10aa9006377b) Thanks [@JuanM04](https://github.com/JuanM04)! - Fixed curly braces inside Shiki codeblocks
|
|
8
|
+
|
|
9
|
+
## 0.6.1-next.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#2534](https://github.com/withastro/astro/pull/2534) [`cfeaa941`](https://github.com/withastro/astro/commit/cfeaa9414acdecec6f5d66ee0e33fe4fde574eee) Thanks [@JuanM04](https://github.com/JuanM04)! - Now you can use local plugins by passing a function instead of an `import`
|
|
14
|
+
|
|
15
|
+
* [#2518](https://github.com/withastro/astro/pull/2518) [`2bc91543`](https://github.com/withastro/astro/commit/2bc91543ceeb5f3dd45e201bf75d79f186e85141) Thanks [@JuanM04](https://github.com/JuanM04)! - Added the ability to use custom themes and langs with Shiki (`<Code />` and `@astrojs/markdown-remark`)
|
|
16
|
+
|
|
17
|
+
- [#2518](https://github.com/withastro/astro/pull/2518) [`2bc91543`](https://github.com/withastro/astro/commit/2bc91543ceeb5f3dd45e201bf75d79f186e85141) Thanks [@JuanM04](https://github.com/JuanM04)! - Added `wrap` to Shiki config
|
|
18
|
+
|
|
19
|
+
## 0.6.1-next.0
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- [#2497](https://github.com/withastro/astro/pull/2497) [`6fe1b027`](https://github.com/withastro/astro/commit/6fe1b0279fce5a7a0e90ff79746ea0b641da3e21) Thanks [@JuanM04](https://github.com/JuanM04)! - Add Shiki as an alternative to Prism
|
|
24
|
+
|
|
25
|
+
## 0.6.0
|
|
26
|
+
|
|
27
|
+
### Minor Changes
|
|
28
|
+
|
|
29
|
+
- [#2202](https://github.com/withastro/astro/pull/2202) [`45cea6ae`](https://github.com/withastro/astro/commit/45cea6aec5a310fed4cb8da0d96670d6b99a2539) Thanks [@jonathantneal](https://github.com/jonathantneal)! - Officially drop support for Node v12. The minimum supported version is now Node v14.15+,
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- Updated dependencies [[`45cea6ae`](https://github.com/withastro/astro/commit/45cea6aec5a310fed4cb8da0d96670d6b99a2539)]:
|
|
34
|
+
- @astrojs/prism@0.4.0
|
|
35
|
+
|
|
3
36
|
## 0.5.0
|
|
4
37
|
|
|
5
38
|
### Minor Changes
|
|
@@ -94,10 +127,10 @@
|
|
|
94
127
|
|
|
95
128
|
```js
|
|
96
129
|
export default {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
130
|
+
markdownOptions: {
|
|
131
|
+
remarkPlugins: ['remark-slug', ['remark-autolink-headings', { behavior: 'prepend' }]],
|
|
132
|
+
rehypePlugins: ['rehype-slug', ['rehype-autolink-headings', { behavior: 'prepend' }]],
|
|
133
|
+
},
|
|
101
134
|
};
|
|
102
135
|
```
|
|
103
136
|
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,7 @@ import { remarkJsx, loadRemarkJsx } from "./remark-jsx.js";
|
|
|
26
26
|
import rehypeJsx from "./rehype-jsx.js";
|
|
27
27
|
import rehypeEscape from "./rehype-escape.js";
|
|
28
28
|
import remarkPrism from "./remark-prism.js";
|
|
29
|
+
import remarkShiki from "./remark-shiki.js";
|
|
29
30
|
import remarkUnwrap from "./remark-unwrap.js";
|
|
30
31
|
import { loadPlugins } from "./load-plugins.js";
|
|
31
32
|
import { unified } from "unified";
|
|
@@ -42,10 +43,12 @@ async function renderMarkdownWithFrontmatter(contents, opts) {
|
|
|
42
43
|
const DEFAULT_REMARK_PLUGINS = ["remark-gfm", "remark-smartypants"];
|
|
43
44
|
const DEFAULT_REHYPE_PLUGINS = ["rehype-slug"];
|
|
44
45
|
async function renderMarkdown(content, opts) {
|
|
45
|
-
var _a, _b;
|
|
46
|
+
var _a, _b, _c, _d;
|
|
46
47
|
let { remarkPlugins = [], rehypePlugins = [] } = opts != null ? opts : {};
|
|
47
48
|
const scopedClassName = (_a = opts == null ? void 0 : opts.$) == null ? void 0 : _a.scopedClassName;
|
|
48
49
|
const mode = (_b = opts == null ? void 0 : opts.mode) != null ? _b : "mdx";
|
|
50
|
+
const syntaxHighlight = (_c = opts == null ? void 0 : opts.syntaxHighlight) != null ? _c : "prism";
|
|
51
|
+
const shikiConfig = (_d = opts == null ? void 0 : opts.shikiConfig) != null ? _d : {};
|
|
49
52
|
const isMDX = mode === "mdx";
|
|
50
53
|
const { headers, rehypeCollectHeaders } = createCollectHeaders();
|
|
51
54
|
await Promise.all([loadRemarkExpressions(), loadRemarkJsx()]);
|
|
@@ -62,7 +65,11 @@ async function renderMarkdown(content, opts) {
|
|
|
62
65
|
if (scopedClassName) {
|
|
63
66
|
parser.use([scopedStyles(scopedClassName)]);
|
|
64
67
|
}
|
|
65
|
-
|
|
68
|
+
if (syntaxHighlight === "prism") {
|
|
69
|
+
parser.use([remarkPrism(scopedClassName)]);
|
|
70
|
+
} else if (syntaxHighlight === "shiki") {
|
|
71
|
+
parser.use([await remarkShiki(shikiConfig)]);
|
|
72
|
+
}
|
|
66
73
|
parser.use([[markdownToHtml, { allowDangerousHtml: true, passThrough: ["raw", "mdxTextExpression", "mdxJsxTextElement", "mdxJsxFlowElement"] }]]);
|
|
67
74
|
loadedRehypePlugins.forEach(([plugin, opts2]) => {
|
|
68
75
|
parser.use([[plugin, opts2]]);
|
|
@@ -89,4 +96,4 @@ export {
|
|
|
89
96
|
renderMarkdown,
|
|
90
97
|
renderMarkdownWithFrontmatter
|
|
91
98
|
};
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,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
|
package/dist/load-plugins.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import * as unified from 'unified';
|
|
2
2
|
import type { Plugin } from './types';
|
|
3
|
-
export declare function loadPlugins(items: Plugin[]): Promise<[unified.Plugin
|
|
3
|
+
export declare function loadPlugins(items: Plugin[]): Promise<[unified.Plugin, any?]>[];
|
package/dist/load-plugins.js
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
async function importPlugin(p) {
|
|
2
2
|
if (typeof p === "string") {
|
|
3
|
-
|
|
3
|
+
const importResult = await import(p);
|
|
4
|
+
return importResult.default;
|
|
4
5
|
}
|
|
5
|
-
return
|
|
6
|
+
return p;
|
|
6
7
|
}
|
|
7
8
|
function loadPlugins(items) {
|
|
8
9
|
return items.map((p) => {
|
|
9
10
|
return new Promise((resolve, reject) => {
|
|
10
11
|
if (Array.isArray(p)) {
|
|
11
12
|
const [plugin, opts] = p;
|
|
12
|
-
return importPlugin(plugin).then((m) => resolve([m
|
|
13
|
+
return importPlugin(plugin).then((m) => resolve([m, opts])).catch((e) => reject(e));
|
|
13
14
|
}
|
|
14
|
-
return importPlugin(p).then((m) => resolve([m
|
|
15
|
+
return importPlugin(p).then((m) => resolve([m])).catch((e) => reject(e));
|
|
15
16
|
});
|
|
16
17
|
});
|
|
17
18
|
}
|
|
18
19
|
export {
|
|
19
20
|
loadPlugins
|
|
20
21
|
};
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2xvYWQtcGx1Z2lucy50cyJdLAogICJtYXBwaW5ncyI6ICJBQUdBLDRCQUE0QixHQUFxRDtBQUNoRixNQUFJLE9BQU8sTUFBTSxVQUFVO0FBQzFCLFVBQU0sZUFBZSxNQUFNLE9BQU87QUFDbEMsV0FBTyxhQUFhO0FBQUE7QUFHckIsU0FBTztBQUFBO0FBR0QscUJBQXFCLE9BQW9EO0FBQy9FLFNBQU8sTUFBTSxJQUFJLENBQUMsTUFBTTtBQUN2QixXQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QyxVQUFJLE1BQU0sUUFBUSxJQUFJO0FBQ3JCLGNBQU0sQ0FBQyxRQUFRLFFBQVE7QUFDdkIsZUFBTyxhQUFhLFFBQ2xCLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLFFBQ3hCLE1BQU0sQ0FBQyxNQUFNLE9BQU87QUFBQTtBQUd2QixhQUFPLGFBQWEsR0FDbEIsS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDLEtBQ3JCLE1BQU0sQ0FBQyxNQUFNLE9BQU87QUFBQTtBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -34,4 +34,4 @@ function createCollectHeaders() {
|
|
|
34
34
|
export {
|
|
35
35
|
createCollectHeaders as default
|
|
36
36
|
};
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlaHlwZS1jb2xsZWN0LWhlYWRlcnMudHMiXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUVBO0FBR2UsZ0NBQWdDO0FBQzlDLFFBQU0sVUFBaUI7QUFFdkIsa0NBQWdDO0FBQy9CLFdBQU8sU0FBVSxNQUFZO0FBQzVCLFlBQU0sTUFBTSxDQUFDLFNBQVM7QUFWekI7QUFXSSxZQUFJLEtBQUssU0FBUztBQUFXO0FBQzdCLGNBQU0sRUFBRSxZQUFZO0FBQ3BCLFlBQUksUUFBUSxPQUFPO0FBQUs7QUFDeEIsY0FBTSxDQUFDLEdBQUcsU0FBUyxjQUFRLE1BQU0sZ0JBQWQsWUFBNkI7QUFDaEQsWUFBSSxDQUFDO0FBQU87QUFDWixjQUFNLFFBQVEsT0FBTyxTQUFTO0FBRTlCLFlBQUksT0FBTztBQUVYLGNBQU0sTUFBTSxRQUFRLENBQUMsVUFBVTtBQUM5QixrQkFBUSxNQUFNO0FBQUE7QUFHZixZQUFJLE9BQU8sb0NBQU0sZUFBTixtQkFBa0IsT0FBTSxRQUFRLEtBQUs7QUFFaEQsYUFBSyxhQUFhLEtBQUssY0FBYztBQUNyQyxhQUFLLFdBQVcsS0FBSztBQUNyQixnQkFBUSxLQUFLLEVBQUUsT0FBTyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBSy9CLFNBQU87QUFBQSxJQUNOO0FBQUEsSUFDQTtBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/dist/rehype-escape.js
CHANGED
|
@@ -12,4 +12,4 @@ function rehypeEscape() {
|
|
|
12
12
|
export {
|
|
13
13
|
rehypeEscape as default
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlaHlwZS1lc2NhcGUudHMiXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUVlLHdCQUE2QjtBQUMzQyxTQUFPLFNBQVUsTUFBZ0I7QUFDaEMsV0FBTyxNQUFNLE1BQU0sV0FBVyxDQUFDLE9BQU87QUFDckMsVUFBSSxHQUFHLFlBQVksVUFBVSxHQUFHLFlBQVksT0FBTztBQUNsRCxXQUFHLFdBQVcsb0JBQW9CO0FBQUE7QUFFbkMsYUFBTztBQUFBO0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -12,4 +12,4 @@ function rehypeExpressions() {
|
|
|
12
12
|
export {
|
|
13
13
|
rehypeExpressions as default
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlaHlwZS1leHByZXNzaW9ucy50cyJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBRWUsNkJBQWtDO0FBQ2hELFNBQU8sU0FBVSxNQUFnQjtBQUNoQyxXQUFPLElBQUksTUFBTSxDQUFDLFVBQVU7QUFDM0IsVUFBSSxNQUFNLFNBQVMscUJBQXFCO0FBQ3ZDLGVBQU8sRUFBRSxNQUFNLFFBQVEsT0FBTyxJQUFLLE1BQWM7QUFBQTtBQUVsRCxhQUFPO0FBQUE7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/rehype-islands.js
CHANGED
|
@@ -17,7 +17,8 @@ var __spreadValues = (a, b) => {
|
|
|
17
17
|
return a;
|
|
18
18
|
};
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
-
import { SKIP, visit } from "unist-util-visit";
|
|
20
|
+
import { SKIP, visit as _visit } from "unist-util-visit";
|
|
21
|
+
const visit = _visit;
|
|
21
22
|
function rehypeIslands() {
|
|
22
23
|
return function(node) {
|
|
23
24
|
return visit(node, "element", (el) => {
|
|
@@ -39,4 +40,4 @@ function rehypeIslands() {
|
|
|
39
40
|
export {
|
|
40
41
|
rehypeIslands as default
|
|
41
42
|
};
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlaHlwZS1pc2xhbmRzLnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBSUEsTUFBTSxRQUFRO0FBTUMseUJBQThCO0FBQzVDLFNBQU8sU0FBVSxNQUFnQjtBQUNoQyxXQUFPLE1BQU0sTUFBTSxXQUFXLENBQUMsT0FBTztBQUVyQyxVQUFJLEdBQUcsV0FBVyxjQUFjO0FBQy9CLGNBQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxPQUFPLFdBQVc7QUFDM0MsY0FBSSxNQUFNLFNBQVMsUUFBUTtBQUcxQixnQkFBSSxVQUFVLE1BQU0sTUFBTSxRQUFRLFVBQVUsTUFBTSxTQUFTLE1BQU07QUFDaEUscUJBQU8sU0FBUyxPQUFPLE9BQU8sR0FBRyxpQ0FBSyxRQUFMLEVBQVksTUFBTSxXQUFXLE9BQU8sTUFBTSxNQUFNLFFBQVEsUUFBUSxJQUFJLFFBQVEsT0FBTyxJQUFJO0FBQ3hILHFCQUFPLENBQUMsTUFBTTtBQUFBO0FBTWYsa0JBQU0sUUFBUSxNQUFNLE1BQU0sUUFBUSxRQUFRO0FBQzFDLG1CQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/rehype-jsx.js
CHANGED
|
@@ -47,4 +47,4 @@ function rehypeJsx() {
|
|
|
47
47
|
export {
|
|
48
48
|
rehypeJsx as default
|
|
49
49
|
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlaHlwZS1qc3gudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQSxNQUFNLGVBQWUsSUFBSSxJQUFJLENBQUMscUJBQXFCO0FBQ3BDLHFCQUEwQjtBQUN4QyxTQUFPLFNBQVUsTUFBZ0I7QUFDaEMsV0FBTyxJQUFJLE1BQU0sQ0FBQyxVQUFlO0FBQ2hDLFVBQUksTUFBTSxTQUFTLFdBQVc7QUFDN0IsZUFBTyxpQ0FBSyxRQUFMLEVBQVksU0FBUyxHQUFHLE1BQU07QUFBQTtBQUV0QyxVQUFJLGFBQWEsSUFBSSxNQUFNLE9BQU87QUFDakMsZUFBTyxpQ0FDSCxRQURHO0FBQUEsVUFFTixNQUFNO0FBQUEsVUFDTixTQUFTLEdBQUcsTUFBTTtBQUFBLFVBQ2xCLFlBQVksTUFBTSxXQUFXLE9BQU8sQ0FBQyxLQUFZLFVBQWU7QUFDL0QsZ0JBQUksT0FBTyxNQUFNO0FBQ2pCLGdCQUFJLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFDckMscUJBQU8sSUFBSSxLQUFLO0FBQUEsdUJBQ04sU0FBUyxNQUFNO0FBQ3pCLHFCQUFPO0FBQUE7QUFFUixtQkFBTyxPQUFPLE9BQU8sS0FBSyxHQUFHLE1BQU0sT0FBTztBQUFBLGFBQ3hDO0FBQUE7QUFBQTtBQUdMLGFBQU87QUFBQTtBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -29,4 +29,4 @@ export {
|
|
|
29
29
|
loadRemarkExpressions,
|
|
30
30
|
remarkExpressions
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlbWFyay1leHByZXNzaW9ucy50cyJdLAogICJtYXBwaW5ncyI6ICJBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0osSUFBSTtBQUVHLDJCQUFzQyxTQUFjO0FBQzFELE1BQUksV0FBVyxXQUFXO0FBQzFCLE1BQUksT0FBTyxLQUFLO0FBRWhCLE1BQUksdUJBQXVCLGNBQWM7QUFDekMsTUFBSSwwQkFBMEI7QUFDOUIsTUFBSSx3QkFBd0I7QUFFNUIsZUFBYSxPQUFZLE9BQVk7QUFFcEMsUUFBSSxLQUFLO0FBQVEsV0FBSyxPQUFPLEtBQUs7QUFBQTtBQUM3QixXQUFLLFNBQVMsQ0FBQztBQUFBO0FBQUE7QUFJdEIsdUNBQThDO0FBQzdDLE1BQUksQ0FBQyxlQUFlO0FBQ25CLFVBQU0seUJBQXlCLE1BQU0sT0FBTztBQUM1QyxvQkFBZ0IsdUJBQXVCO0FBQUE7QUFFeEMsTUFBSSxDQUFDLDZCQUE2QixDQUFDLHlCQUF5QjtBQUMzRCxVQUFNLHlCQUF5QixNQUFNLE9BQU87QUFDNUMsZ0NBQTRCLHVCQUF1QjtBQUNuRCw4QkFBMEIsdUJBQXVCO0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/remark-jsx.js
CHANGED
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
loadRemarkJsx,
|
|
29
29
|
remarkJsx
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlbWFyay1qc3gudHMiXSwKICAibWFwcGluZ3MiOiAiQUFDQSxJQUFJO0FBQ0osSUFBSTtBQUNKLElBQUk7QUFFRyxtQkFBOEIsU0FBYztBQUNsRCxNQUFJLFdBQVcsV0FBVztBQUMxQixNQUFJLE9BQU8sS0FBSztBQUdoQixNQUFJLDBCQUEwQjtBQUM5QixNQUFJLHdCQUF3QjtBQUU1QixlQUFhLE9BQVksT0FBWTtBQUVwQyxRQUFJLEtBQUs7QUFBUSxXQUFLLE9BQU8sS0FBSztBQUFBO0FBQzdCLFdBQUssU0FBUyxDQUFDO0FBQUE7QUFBQTtBQUl0QiwrQkFBc0M7QUFDckMsTUFBSSxDQUFDLFFBQVE7QUFDWixVQUFNLGtCQUFrQixNQUFNLE9BQU87QUFDckMsYUFBUyxnQkFBZ0I7QUFBQTtBQUUxQixNQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCO0FBQzdDLFVBQU0sa0JBQWtCLE1BQU0sT0FBTztBQUNyQyx5QkFBcUIsZ0JBQWdCO0FBQ3JDLHVCQUFtQixnQkFBZ0I7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/remark-prism.js
CHANGED
|
@@ -56,4 +56,4 @@ var remark_prism_default = plugin;
|
|
|
56
56
|
export {
|
|
57
57
|
remark_prism_default as default
|
|
58
58
|
};
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlbWFyay1wcmlzbS50cyJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsUUFBUTtBQUV6QyxNQUFNLGNBQWMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBRXBDLHdCQUF3QixNQUFjLE1BQWM7QUFDbkQsTUFBSSxnQkFBZ0IsWUFBWTtBQUVoQyxNQUFJLFFBQVEsTUFBTTtBQUNqQixXQUFPO0FBQUE7QUFHUixRQUFNLGVBQWUsQ0FBQyxVQUFpQjtBQUN0QyxRQUFJLFNBQVEsQ0FBQyxNQUFNLFVBQVUsUUFBTztBQUNuQyxvQkFBYyxDQUFDO0FBQUE7QUFBQTtBQUlqQixNQUFJLFlBQVksSUFBSSxPQUFPO0FBQzFCLGlCQUFhLFlBQVksSUFBSTtBQUFBLGFBQ25CLFNBQVMsU0FBUztBQUM1QixpQkFBYTtBQUNiLGFBQVM7QUFBQSxTQUNIO0FBQ04saUJBQWE7QUFDYixpQkFBYTtBQUFBO0FBR2QsTUFBSSxRQUFRLENBQUMsTUFBTSxVQUFVLE9BQU87QUFDbkMsWUFBUSxLQUFLLGdDQUFnQztBQUFBO0FBRzlDLFFBQU0sVUFBVSxNQUFNLFVBQVU7QUFDaEMsTUFBSSxPQUFPO0FBQ1gsTUFBSSxTQUFTO0FBQ1osV0FBTyxNQUFNLFVBQVUsTUFBTSxTQUFTO0FBQUE7QUFHdkMsU0FBTyxFQUFFLGVBQWU7QUFBQTtBQU16QixxQkFBcUIsV0FBd0I7QUFDNUMsU0FBTyxTQUFVLE1BQVc7QUFDM0IsVUFBTSxVQUFVLENBQUMsU0FBYztBQUM5QixVQUFJLEVBQUUsTUFBTSxVQUFVO0FBQ3RCLFdBQUssT0FBTztBQUVaLFVBQUksRUFBRSxNQUFNLGtCQUFrQixlQUFlLE1BQU07QUFDbkQsVUFBSSxVQUFVLENBQUM7QUFDZixVQUFJLFdBQVc7QUFDZCxnQkFBUSxLQUFLO0FBQUE7QUFFZCxXQUFLLFFBQVEsZUFBZSxRQUFRLEtBQUsscUNBQXFDLGtCQUFrQjtBQUNoRyxhQUFPO0FBQUE7QUFFUixXQUFPLE1BQU0sTUFBTSxRQUFRO0FBQUE7QUFBQTtBQUk3QixnQkFBZ0IsV0FBd0I7QUFDdkMsU0FBTyxZQUFZLEtBQUssTUFBTTtBQUFBO0FBRy9CLElBQU8sdUJBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -17,4 +17,4 @@ function scopedStyles(className) {
|
|
|
17
17
|
export {
|
|
18
18
|
scopedStyles as default
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlbWFyay1zY29wZWQtc3R5bGVzLnRzIl0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFDQSxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxRQUFRO0FBRzFCLHNCQUFzQixXQUFtQjtBQUN2RCxRQUFNLFVBQVUsQ0FBQyxTQUFjO0FBTGhDO0FBTUUsUUFBSSxRQUFRLElBQUksS0FBSztBQUFPO0FBRTVCLFVBQU0sRUFBRSxTQUFTO0FBQ2pCLFFBQUksbUJBQW1CLHlDQUFNLGdCQUFOLG1CQUFtQixVQUFuQixZQUE0QjtBQUNuRCxTQUFLLE9BQU8sS0FBSyxRQUFRO0FBQ3pCLFNBQUssS0FBSyxjQUFjLEtBQUssS0FBSyxlQUFlO0FBQ2pELFNBQUssS0FBSyxZQUFZLFFBQVEsR0FBRyxhQUFhLG1CQUFtQjtBQUVqRSxXQUFPO0FBQUE7QUFFUixTQUFPLE1BQU0sQ0FBQyxTQUFjLE1BQU0sTUFBTTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import shiki from 'shiki';
|
|
2
|
+
export interface ShikiConfig {
|
|
3
|
+
/**
|
|
4
|
+
* The languages loaded to Shiki.
|
|
5
|
+
* Supports all languages listed here: https://github.com/shikijs/shiki/blob/main/docs/languages.md#all-languages
|
|
6
|
+
* Instructions for loading a custom language: https://github.com/shikijs/shiki/blob/main/docs/languages.md#supporting-your-own-languages-with-shiki
|
|
7
|
+
*
|
|
8
|
+
* @default []
|
|
9
|
+
*/
|
|
10
|
+
langs?: shiki.ILanguageRegistration[];
|
|
11
|
+
/**
|
|
12
|
+
* The styling theme.
|
|
13
|
+
* Supports all themes listed here: https://github.com/shikijs/shiki/blob/main/docs/themes.md#all-themes
|
|
14
|
+
* Instructions for loading a custom theme: https://github.com/shikijs/shiki/blob/main/docs/themes.md#loading-theme
|
|
15
|
+
*
|
|
16
|
+
* @default "github-dark"
|
|
17
|
+
*/
|
|
18
|
+
theme?: shiki.IThemeRegistration;
|
|
19
|
+
/**
|
|
20
|
+
* Enable word wrapping.
|
|
21
|
+
* - true: enabled.
|
|
22
|
+
* - false: enabled.
|
|
23
|
+
* - null: All overflow styling removed. Code will overflow the element by default.
|
|
24
|
+
*
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
wrap?: boolean | null;
|
|
28
|
+
}
|
|
29
|
+
declare const remarkShiki: ({ langs, theme, wrap }: ShikiConfig) => Promise<() => (tree: any) => void>;
|
|
30
|
+
export default remarkShiki;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import shiki from "shiki";
|
|
2
|
+
import { visit } from "unist-util-visit";
|
|
3
|
+
const remarkShiki = async ({ langs = [], theme = "github-dark", wrap = false }) => {
|
|
4
|
+
const highlighter = await shiki.getHighlighter({ theme });
|
|
5
|
+
for (const lang of langs) {
|
|
6
|
+
await highlighter.loadLanguage(lang);
|
|
7
|
+
}
|
|
8
|
+
return () => (tree) => {
|
|
9
|
+
visit(tree, "code", (node) => {
|
|
10
|
+
var _a;
|
|
11
|
+
let html = highlighter.codeToHtml(node.value, { lang: (_a = node.lang) != null ? _a : "plaintext" });
|
|
12
|
+
html = html.replace('<pre class="shiki"', '<pre data-astro-raw class="astro-code"');
|
|
13
|
+
html = html.replace(/style="(background-)?color: var\(--shiki-/g, 'style="$1color: var(--astro-code-');
|
|
14
|
+
if (wrap === false) {
|
|
15
|
+
html = html.replace(/style="(.*?)"/, 'style="$1; overflow-x: auto;"');
|
|
16
|
+
} else if (wrap === true) {
|
|
17
|
+
html = html.replace(/style="(.*?)"/, 'style="$1; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;"');
|
|
18
|
+
}
|
|
19
|
+
node.type = "html";
|
|
20
|
+
node.value = html;
|
|
21
|
+
node.children = [];
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
var remark_shiki_default = remarkShiki;
|
|
26
|
+
export {
|
|
27
|
+
remark_shiki_default as default
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlbWFyay1zaGlraS50cyJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQ0E7QUE4QkEsTUFBTSxjQUFjLE9BQU8sRUFBRSxRQUFRLElBQUksUUFBUSxlQUFlLE9BQU8sWUFBeUI7QUFDL0YsUUFBTSxjQUFjLE1BQU0sTUFBTSxlQUFlLEVBQUU7QUFFakQsYUFBVyxRQUFRLE9BQU87QUFDekIsVUFBTSxZQUFZLGFBQWE7QUFBQTtBQUdoQyxTQUFPLE1BQU0sQ0FBQyxTQUFjO0FBQzNCLFVBQU0sTUFBTSxRQUFRLENBQUMsU0FBUztBQXZDaEM7QUF3Q0csVUFBSSxPQUFPLFlBQVksV0FBVyxLQUFLLE9BQU8sRUFBRSxNQUFNLFdBQUssU0FBTCxZQUFhO0FBR25FLGFBQU8sS0FBSyxRQUFRLHNCQUFzQjtBQUUxQyxhQUFPLEtBQUssUUFBUSw4Q0FBOEM7QUFHbEUsVUFBSSxTQUFTLE9BQU87QUFDbkIsZUFBTyxLQUFLLFFBQVEsaUJBQWlCO0FBQUEsaUJBQzNCLFNBQVMsTUFBTTtBQUN6QixlQUFPLEtBQUssUUFBUSxpQkFBaUI7QUFBQTtBQUd0QyxXQUFLLE9BQU87QUFDWixXQUFLLFFBQVE7QUFDYixXQUFLLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFLbkIsSUFBTyx1QkFBUTsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/remark-slug.js
CHANGED
|
@@ -21,4 +21,4 @@ function remarkSlug() {
|
|
|
21
21
|
export {
|
|
22
22
|
remarkSlug as default
|
|
23
23
|
};
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlbWFyay1zbHVnLnRzIl0sCiAgIm1hcHBpbmdzIjogIkFBS0E7QUFDQTtBQUNBO0FBRUEsTUFBTSxRQUFRLElBQUk7QUFPSCxzQkFBc0I7QUFDcEMsU0FBTyxDQUFDLFNBQWM7QUFDckIsVUFBTTtBQUNOLFVBQU0sTUFBTSxDQUFDLFNBQVM7QUFDckIsY0FBUSxJQUFJO0FBQUE7QUFFYixVQUFNLE1BQU0sV0FBVyxDQUFDLFNBQVM7QUFDaEMsWUFBTSxPQUFPLEtBQUssUUFBUyxNQUFLLE9BQU87QUFDdkMsWUFBTSxRQUFrQyxLQUFLLGVBQWdCLE1BQUssY0FBYztBQUNoRixVQUFJLEtBQUssTUFBTTtBQUNmLFdBQUssS0FBSyxNQUFNLEtBQUssT0FBTyxLQUFLLFFBQVEsTUFBTSxLQUFLLFNBQVM7QUFDN0QsV0FBSyxLQUFLO0FBQ1YsWUFBTSxLQUFLO0FBQUE7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/remark-unwrap.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { visit, SKIP } from "unist-util-visit";
|
|
1
|
+
import { visit as _visit, SKIP } from "unist-util-visit";
|
|
2
|
+
const visit = _visit;
|
|
2
3
|
function remarkUnwrap() {
|
|
3
4
|
const astroRootNodes = new Set();
|
|
4
5
|
let insideAstroRoot = false;
|
|
@@ -28,4 +29,4 @@ function remarkUnwrap() {
|
|
|
28
29
|
export {
|
|
29
30
|
remarkUnwrap as default
|
|
30
31
|
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JlbWFyay11bndyYXAudHMiXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUlBLE1BQU0sUUFBUTtBQUdDLHdCQUF3QjtBQUN0QyxRQUFNLGlCQUFpQixJQUFJO0FBQzNCLE1BQUksa0JBQWtCO0FBRXRCLFNBQU8sQ0FBQyxTQUFjO0FBRXJCLHNCQUFrQjtBQUNsQixtQkFBZTtBQUVmLFVBQU0sTUFBTSxRQUFRLENBQUMsU0FBUztBQUM3QixVQUFJLEtBQUssTUFBTSxRQUFRLGlCQUFpQixNQUFNLENBQUMsaUJBQWlCO0FBQy9ELDBCQUFrQjtBQUFBO0FBRW5CLFVBQUksS0FBSyxNQUFNLFFBQVEsa0JBQWtCLE1BQU0saUJBQWlCO0FBQy9ELDBCQUFrQjtBQUFBO0FBRW5CLHFCQUFlLElBQUk7QUFBQTtBQUdwQixVQUFNLE1BQU0sYUFBYSxDQUFDLE1BQU0sT0FBTyxXQUFXO0FBQ2pELFVBQUksVUFBVSxPQUFPLFVBQVUsWUFBWSxzQkFBc0IsT0FBTztBQUN2RSxlQUFPLFNBQVMsT0FBTyxPQUFPLEdBQUcsR0FBRyxLQUFLO0FBQ3pDLGVBQU8sQ0FBQyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBS2pCLGlDQUErQixNQUFXO0FBQ3pDLFdBQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxVQUFlLGVBQWUsSUFBSSxRQUFRLE9BQU8sQ0FBQyxLQUFjLE1BQWdCLE1BQU0sTUFBTSxHQUFJO0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/types.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import * as unified from 'unified';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}>;
|
|
5
|
-
export declare type Plugin = string | [string, any] | UnifiedPluginImport | [UnifiedPluginImport, any];
|
|
1
|
+
import type * as unified from 'unified';
|
|
2
|
+
import type { ShikiConfig } from './remark-shiki';
|
|
3
|
+
export declare type Plugin = string | [string, any] | unified.Plugin | [unified.Plugin, any];
|
|
6
4
|
export interface AstroMarkdownOptions {
|
|
7
5
|
mode?: 'md' | 'mdx';
|
|
6
|
+
syntaxHighlight?: 'prism' | 'shiki' | false;
|
|
7
|
+
shikiConfig?: ShikiConfig;
|
|
8
8
|
remarkPlugins?: Plugin[];
|
|
9
9
|
rehypePlugins?: Plugin[];
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astrojs/markdown-remark",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"main": "./dist/index.js",
|
|
3
|
+
"version": "0.6.1-next.2",
|
|
5
4
|
"type": "module",
|
|
5
|
+
"author": "withastro",
|
|
6
|
+
"license": "MIT",
|
|
6
7
|
"repository": {
|
|
7
8
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/
|
|
9
|
+
"url": "https://github.com/withastro/astro.git",
|
|
9
10
|
"directory": "packages/markdown/remark"
|
|
10
11
|
},
|
|
12
|
+
"bugs": "https://github.com/withastro/astro/issues",
|
|
13
|
+
"homepage": "https://astro.build",
|
|
14
|
+
"main": "./dist/index.js",
|
|
11
15
|
"exports": {
|
|
12
16
|
".": "./dist/index.js"
|
|
13
17
|
},
|
|
@@ -18,7 +22,7 @@
|
|
|
18
22
|
"dev": "astro-scripts dev \"src/**/*.ts\""
|
|
19
23
|
},
|
|
20
24
|
"dependencies": {
|
|
21
|
-
"@astrojs/prism": "^0.
|
|
25
|
+
"@astrojs/prism": "^0.4.0",
|
|
22
26
|
"assert": "^2.0.0",
|
|
23
27
|
"github-slugger": "^1.4.0",
|
|
24
28
|
"gray-matter": "^4.0.3",
|
|
@@ -34,6 +38,7 @@
|
|
|
34
38
|
"remark-parse": "^10.0.1",
|
|
35
39
|
"remark-rehype": "^10.0.1",
|
|
36
40
|
"remark-smartypants": "^2.0.0",
|
|
41
|
+
"shiki": "^0.10.0",
|
|
37
42
|
"unified": "^10.1.1",
|
|
38
43
|
"unist-util-map": "^3.0.0",
|
|
39
44
|
"unist-util-visit": "^4.1.0"
|
package/src/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { remarkJsx, loadRemarkJsx } from './remark-jsx.js';
|
|
|
9
9
|
import rehypeJsx from './rehype-jsx.js';
|
|
10
10
|
import rehypeEscape from './rehype-escape.js';
|
|
11
11
|
import remarkPrism from './remark-prism.js';
|
|
12
|
+
import remarkShiki from './remark-shiki.js';
|
|
12
13
|
import remarkUnwrap from './remark-unwrap.js';
|
|
13
14
|
import { loadPlugins } from './load-plugins.js';
|
|
14
15
|
|
|
@@ -23,9 +24,9 @@ export { AstroMarkdownOptions, MarkdownRenderingOptions };
|
|
|
23
24
|
|
|
24
25
|
/** Internal utility for rendering a full markdown file and extracting Frontmatter data */
|
|
25
26
|
export async function renderMarkdownWithFrontmatter(contents: string, opts?: MarkdownRenderingOptions | null) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const { data: frontmatter, content } = matter(contents);
|
|
28
|
+
const value = await renderMarkdown(content, opts);
|
|
29
|
+
return { ...value, frontmatter };
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
export const DEFAULT_REMARK_PLUGINS = ['remark-gfm', 'remark-smartypants'];
|
|
@@ -34,63 +35,70 @@ export const DEFAULT_REHYPE_PLUGINS = ['rehype-slug'];
|
|
|
34
35
|
|
|
35
36
|
/** Shared utility for rendering markdown */
|
|
36
37
|
export async function renderMarkdown(content: string, opts?: MarkdownRenderingOptions | null) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
38
|
+
let { remarkPlugins = [], rehypePlugins = [] } = opts ?? {};
|
|
39
|
+
const scopedClassName = opts?.$?.scopedClassName;
|
|
40
|
+
const mode = opts?.mode ?? 'mdx';
|
|
41
|
+
const syntaxHighlight = opts?.syntaxHighlight ?? 'prism';
|
|
42
|
+
const shikiConfig = opts?.shikiConfig ?? {};
|
|
43
|
+
const isMDX = mode === 'mdx';
|
|
44
|
+
const { headers, rehypeCollectHeaders } = createCollectHeaders();
|
|
45
|
+
|
|
46
|
+
await Promise.all([loadRemarkExpressions(), loadRemarkJsx()]); // Vite bug: dynamically import() these because of CJS interop (this will cache)
|
|
47
|
+
|
|
48
|
+
let parser = unified()
|
|
49
|
+
.use(markdown)
|
|
50
|
+
.use(isMDX ? [remarkJsx] : [])
|
|
51
|
+
.use(isMDX ? [remarkExpressions] : [])
|
|
52
|
+
.use([remarkUnwrap]);
|
|
53
|
+
|
|
54
|
+
if (remarkPlugins.length === 0 && rehypePlugins.length === 0) {
|
|
55
|
+
remarkPlugins = [...DEFAULT_REMARK_PLUGINS];
|
|
56
|
+
rehypePlugins = [...DEFAULT_REHYPE_PLUGINS];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const loadedRemarkPlugins = await Promise.all(loadPlugins(remarkPlugins));
|
|
60
|
+
const loadedRehypePlugins = await Promise.all(loadPlugins(rehypePlugins));
|
|
61
|
+
|
|
62
|
+
loadedRemarkPlugins.forEach(([plugin, opts]) => {
|
|
63
|
+
parser.use([[plugin, opts]]);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
if (scopedClassName) {
|
|
67
|
+
parser.use([scopedStyles(scopedClassName)]);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (syntaxHighlight === 'prism') {
|
|
71
|
+
parser.use([remarkPrism(scopedClassName)]);
|
|
72
|
+
} else if (syntaxHighlight === 'shiki') {
|
|
73
|
+
parser.use([await remarkShiki(shikiConfig)]);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
parser.use([[markdownToHtml as any, { allowDangerousHtml: true, passThrough: ['raw', 'mdxTextExpression', 'mdxJsxTextElement', 'mdxJsxFlowElement'] }]]);
|
|
77
|
+
|
|
78
|
+
loadedRehypePlugins.forEach(([plugin, opts]) => {
|
|
79
|
+
parser.use([[plugin, opts]]);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
parser
|
|
83
|
+
.use(isMDX ? [rehypeJsx] : [])
|
|
84
|
+
.use(isMDX ? [rehypeExpressions] : [])
|
|
85
|
+
.use(isMDX ? [] : [rehypeRaw])
|
|
86
|
+
.use(isMDX ? [rehypeEscape] : [])
|
|
87
|
+
.use(rehypeIslands);
|
|
88
|
+
|
|
89
|
+
let result: string;
|
|
90
|
+
try {
|
|
91
|
+
const vfile = await parser.use([rehypeCollectHeaders]).use(rehypeStringify, { allowDangerousHtml: true }).process(content);
|
|
92
|
+
result = vfile.toString();
|
|
93
|
+
} catch (err) {
|
|
94
|
+
console.error(err);
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
metadata: { headers, source: content, html: result.toString() },
|
|
100
|
+
code: result.toString(),
|
|
101
|
+
};
|
|
94
102
|
}
|
|
95
103
|
|
|
96
104
|
export default renderMarkdownWithFrontmatter;
|
package/src/load-plugins.ts
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
import * as unified from 'unified';
|
|
2
|
-
import type { Plugin
|
|
2
|
+
import type { Plugin } from './types';
|
|
3
3
|
|
|
4
|
-
async function importPlugin(p: string |
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
async function importPlugin(p: string | unified.Plugin): Promise<unified.Plugin> {
|
|
5
|
+
if (typeof p === 'string') {
|
|
6
|
+
const importResult = await import(p);
|
|
7
|
+
return importResult.default;
|
|
8
|
+
}
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
return p;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
export function loadPlugins(items: Plugin[]): Promise<[unified.Plugin
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
export function loadPlugins(items: Plugin[]): Promise<[unified.Plugin, any?]>[] {
|
|
14
|
+
return items.map((p) => {
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
if (Array.isArray(p)) {
|
|
17
|
+
const [plugin, opts] = p;
|
|
18
|
+
return importPlugin(plugin)
|
|
19
|
+
.then((m) => resolve([m, opts]))
|
|
20
|
+
.catch((e) => reject(e));
|
|
21
|
+
}
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
return importPlugin(p)
|
|
24
|
+
.then((m) => resolve([m]))
|
|
25
|
+
.catch((e) => reject(e));
|
|
26
|
+
});
|
|
27
|
+
});
|
|
27
28
|
}
|