@astrojs/markdown-remark 0.5.0 → 0.6.0
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 +11 -0
- package/dist/index.js +1 -1
- package/dist/load-plugins.js +1 -1
- 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-slug.js +1 -1
- package/dist/remark-unwrap.js +3 -2
- package/package.json +8 -4
- package/src/index.ts +60 -60
- package/src/load-plugins.ts +17 -17
- 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-slug.ts +14 -14
- package/src/remark-unwrap.ts +30 -26
- package/src/types.ts +7 -7
- package/tsconfig.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @astrojs/markdown-remark
|
|
2
2
|
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#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+,
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`45cea6ae`](https://github.com/withastro/astro/commit/45cea6aec5a310fed4cb8da0d96670d6b99a2539)]:
|
|
12
|
+
- @astrojs/prism@0.4.0
|
|
13
|
+
|
|
3
14
|
## 0.5.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
package/dist/index.js
CHANGED
|
@@ -89,4 +89,4 @@ export {
|
|
|
89
89
|
renderMarkdown,
|
|
90
90
|
renderMarkdownWithFrontmatter
|
|
91
91
|
};
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,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
|
package/dist/load-plugins.js
CHANGED
|
@@ -18,4 +18,4 @@ function loadPlugins(items) {
|
|
|
18
18
|
export {
|
|
19
19
|
loadPlugins
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2xvYWQtcGx1Z2lucy50cyJdLAogICJtYXBwaW5ncyI6ICJBQUdBLDRCQUE0QixHQUFzRDtBQUNqRixNQUFJLE9BQU8sTUFBTSxVQUFVO0FBQzFCLFdBQU8sTUFBTSxPQUFPO0FBQUE7QUFHckIsU0FBTyxNQUFNO0FBQUE7QUFHUCxxQkFBcUIsT0FBc0U7QUFDakcsU0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNO0FBQ3ZCLFdBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3ZDLFVBQUksTUFBTSxRQUFRLElBQUk7QUFDckIsY0FBTSxDQUFDLFFBQVEsUUFBUTtBQUN2QixlQUFPLGFBQWEsUUFDbEIsS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDLEVBQUUsU0FBUyxRQUNoQyxNQUFNLENBQUMsTUFBTSxPQUFPO0FBQUE7QUFHdkIsYUFBTyxhQUFhLEdBQ2xCLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxFQUFFLFdBQ3ZCLE1BQU0sQ0FBQyxNQUFNLE9BQU87QUFBQTtBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -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=
|
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/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.0",
|
|
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",
|
package/src/index.ts
CHANGED
|
@@ -23,9 +23,9 @@ export { AstroMarkdownOptions, MarkdownRenderingOptions };
|
|
|
23
23
|
|
|
24
24
|
/** Internal utility for rendering a full markdown file and extracting Frontmatter data */
|
|
25
25
|
export async function renderMarkdownWithFrontmatter(contents: string, opts?: MarkdownRenderingOptions | null) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
const { data: frontmatter, content } = matter(contents);
|
|
27
|
+
const value = await renderMarkdown(content, opts);
|
|
28
|
+
return { ...value, frontmatter };
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export const DEFAULT_REMARK_PLUGINS = ['remark-gfm', 'remark-smartypants'];
|
|
@@ -34,63 +34,63 @@ export const DEFAULT_REHYPE_PLUGINS = ['rehype-slug'];
|
|
|
34
34
|
|
|
35
35
|
/** Shared utility for rendering markdown */
|
|
36
36
|
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
|
-
|
|
37
|
+
let { remarkPlugins = [], rehypePlugins = [] } = opts ?? {};
|
|
38
|
+
const scopedClassName = opts?.$?.scopedClassName;
|
|
39
|
+
const mode = opts?.mode ?? 'mdx';
|
|
40
|
+
const isMDX = mode === 'mdx';
|
|
41
|
+
const { headers, rehypeCollectHeaders } = createCollectHeaders();
|
|
42
|
+
|
|
43
|
+
await Promise.all([loadRemarkExpressions(), loadRemarkJsx()]); // Vite bug: dynamically import() these because of CJS interop (this will cache)
|
|
44
|
+
|
|
45
|
+
let parser = unified()
|
|
46
|
+
.use(markdown)
|
|
47
|
+
.use(isMDX ? [remarkJsx] : [])
|
|
48
|
+
.use(isMDX ? [remarkExpressions] : [])
|
|
49
|
+
.use([remarkUnwrap]);
|
|
50
|
+
|
|
51
|
+
if (remarkPlugins.length === 0 && rehypePlugins.length === 0) {
|
|
52
|
+
remarkPlugins = [...DEFAULT_REMARK_PLUGINS];
|
|
53
|
+
rehypePlugins = [...DEFAULT_REHYPE_PLUGINS];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const loadedRemarkPlugins = await Promise.all(loadPlugins(remarkPlugins));
|
|
57
|
+
const loadedRehypePlugins = await Promise.all(loadPlugins(rehypePlugins));
|
|
58
|
+
|
|
59
|
+
loadedRemarkPlugins.forEach(([plugin, opts]) => {
|
|
60
|
+
parser.use([[plugin, opts]]);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
if (scopedClassName) {
|
|
64
|
+
parser.use([scopedStyles(scopedClassName)]);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
parser.use([remarkPrism(scopedClassName)]);
|
|
68
|
+
parser.use([[markdownToHtml as any, { allowDangerousHtml: true, passThrough: ['raw', 'mdxTextExpression', 'mdxJsxTextElement', 'mdxJsxFlowElement'] }]]);
|
|
69
|
+
|
|
70
|
+
loadedRehypePlugins.forEach(([plugin, opts]) => {
|
|
71
|
+
parser.use([[plugin, opts]]);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
parser
|
|
75
|
+
.use(isMDX ? [rehypeJsx] : [])
|
|
76
|
+
.use(isMDX ? [rehypeExpressions] : [])
|
|
77
|
+
.use(isMDX ? [] : [rehypeRaw])
|
|
78
|
+
.use(isMDX ? [rehypeEscape] : [])
|
|
79
|
+
.use(rehypeIslands);
|
|
80
|
+
|
|
81
|
+
let result: string;
|
|
82
|
+
try {
|
|
83
|
+
const vfile = await parser.use([rehypeCollectHeaders]).use(rehypeStringify, { allowDangerousHtml: true }).process(content);
|
|
84
|
+
result = vfile.toString();
|
|
85
|
+
} catch (err) {
|
|
86
|
+
console.error(err);
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
metadata: { headers, source: content, html: result.toString() },
|
|
92
|
+
code: result.toString(),
|
|
93
|
+
};
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
export default renderMarkdownWithFrontmatter;
|
package/src/load-plugins.ts
CHANGED
|
@@ -2,26 +2,26 @@ import * as unified from 'unified';
|
|
|
2
2
|
import type { Plugin, UnifiedPluginImport } from './types';
|
|
3
3
|
|
|
4
4
|
async function importPlugin(p: string | UnifiedPluginImport): UnifiedPluginImport {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
if (typeof p === 'string') {
|
|
6
|
+
return await import(p);
|
|
7
|
+
}
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
return await p;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export function loadPlugins(items: Plugin[]): Promise<[unified.Plugin] | [unified.Plugin, any]>[] {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
return items.map((p) => {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
if (Array.isArray(p)) {
|
|
16
|
+
const [plugin, opts] = p;
|
|
17
|
+
return importPlugin(plugin)
|
|
18
|
+
.then((m) => resolve([m.default, opts]))
|
|
19
|
+
.catch((e) => reject(e));
|
|
20
|
+
}
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
return importPlugin(p)
|
|
23
|
+
.then((m) => resolve([m.default]))
|
|
24
|
+
.catch((e) => reject(e));
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
27
|
}
|
|
@@ -4,35 +4,35 @@ import slugger from 'github-slugger';
|
|
|
4
4
|
|
|
5
5
|
/** */
|
|
6
6
|
export default function createCollectHeaders() {
|
|
7
|
-
|
|
7
|
+
const headers: any[] = [];
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
function rehypeCollectHeaders() {
|
|
10
|
+
return function (tree: Root) {
|
|
11
|
+
visit(tree, (node) => {
|
|
12
|
+
if (node.type !== 'element') return;
|
|
13
|
+
const { tagName } = node;
|
|
14
|
+
if (tagName[0] !== 'h') return;
|
|
15
|
+
const [_, level] = tagName.match(/h([0-6])/) ?? [];
|
|
16
|
+
if (!level) return;
|
|
17
|
+
const depth = Number.parseInt(level);
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
let text = '';
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
visit(node, 'text', (child) => {
|
|
22
|
+
text += child.value;
|
|
23
|
+
});
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
let slug = node?.properties?.id || slugger.slug(text);
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
node.properties = node.properties || {};
|
|
28
|
+
node.properties.id = slug;
|
|
29
|
+
headers.push({ depth, slug, text });
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
return {
|
|
35
|
+
headers,
|
|
36
|
+
rehypeCollectHeaders,
|
|
37
|
+
};
|
|
38
38
|
}
|
package/src/rehype-escape.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { SKIP, visit } from 'unist-util-visit';
|
|
2
2
|
|
|
3
3
|
export default function rehypeEscape(): any {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
return function (node: any): any {
|
|
5
|
+
return visit(node, 'element', (el) => {
|
|
6
|
+
if (el.tagName === 'code' || el.tagName === 'pre') {
|
|
7
|
+
el.properties['data-astro-raw'] = true;
|
|
8
|
+
}
|
|
9
|
+
return el;
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
12
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { map } from 'unist-util-map';
|
|
2
2
|
|
|
3
3
|
export default function rehypeExpressions(): any {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
return function (node: any): any {
|
|
5
|
+
return map(node, (child) => {
|
|
6
|
+
if (child.type === 'mdxTextExpression') {
|
|
7
|
+
return { type: 'text', value: `{${(child as any).value}}` };
|
|
8
|
+
}
|
|
9
|
+
return child;
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
12
|
}
|
package/src/rehype-islands.ts
CHANGED
|
@@ -1,31 +1,35 @@
|
|
|
1
|
-
import { SKIP, visit } from 'unist-util-visit';
|
|
1
|
+
import { SKIP, visit as _visit } from 'unist-util-visit';
|
|
2
|
+
|
|
3
|
+
// This is a workaround.
|
|
4
|
+
// It fixes a compatibility issue between different, incompatible ASTs given by plugins to Unist
|
|
5
|
+
const visit = _visit as (node: any, type: string, callback?: (node: any, index: number, parent: any) => any) => any;
|
|
2
6
|
|
|
3
7
|
// This fixes some confusing bugs coming from somewhere inside of our Markdown pipeline.
|
|
4
8
|
// `unist`/`remark`/`rehype` (not sure) often generate malformed HTML inside of <astro-root>
|
|
5
9
|
// For hydration to work properly, frameworks need the DOM to be the exact same on server/client.
|
|
6
10
|
// This reverts some "helpful corrections" that are applied to our perfectly valid HTML!
|
|
7
11
|
export default function rehypeIslands(): any {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
12
|
+
return function (node: any): any {
|
|
13
|
+
return visit(node, 'element', (el) => {
|
|
14
|
+
// Bugs only happen inside of <astro-root> islands
|
|
15
|
+
if (el.tagName == 'astro-root') {
|
|
16
|
+
visit(el, 'text', (child, index, parent) => {
|
|
17
|
+
if (child.type === 'text') {
|
|
18
|
+
// Sometimes comments can be trapped as text, which causes them to be escaped
|
|
19
|
+
// This casts them back to real HTML comments
|
|
20
|
+
if (parent && child.value.indexOf('<!--') > -1 && index != null) {
|
|
21
|
+
parent.children.splice(index, 1, { ...child, type: 'comment', value: child.value.replace('<!--', '').replace('-->', '').trim() });
|
|
22
|
+
return [SKIP, index];
|
|
23
|
+
}
|
|
24
|
+
// For some reason `rehype` likes to inject extra linebreaks,
|
|
25
|
+
// but React and Vue throw hydration errors when they see these!
|
|
26
|
+
// This removes any extra linebreaks, which is fine because
|
|
27
|
+
// framework compilers don't preserve them anyway
|
|
28
|
+
child.value = child.value.replace(/\n+/g, '');
|
|
29
|
+
return child;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
};
|
|
31
35
|
}
|
package/src/rehype-jsx.ts
CHANGED
|
@@ -2,28 +2,28 @@ import { map } from 'unist-util-map';
|
|
|
2
2
|
|
|
3
3
|
const MDX_ELEMENTS = new Set(['mdxJsxFlowElement', 'mdxJsxTextElement']);
|
|
4
4
|
export default function rehypeJsx(): any {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
5
|
+
return function (node: any): any {
|
|
6
|
+
return map(node, (child: any) => {
|
|
7
|
+
if (child.type === 'element') {
|
|
8
|
+
return { ...child, tagName: `${child.tagName}` };
|
|
9
|
+
}
|
|
10
|
+
if (MDX_ELEMENTS.has(child.type)) {
|
|
11
|
+
return {
|
|
12
|
+
...child,
|
|
13
|
+
type: 'element',
|
|
14
|
+
tagName: `${child.name}`,
|
|
15
|
+
properties: child.attributes.reduce((acc: any[], entry: any) => {
|
|
16
|
+
let attr = entry.value;
|
|
17
|
+
if (attr && typeof attr === 'object') {
|
|
18
|
+
attr = `{${attr.value}}`;
|
|
19
|
+
} else if (attr === null) {
|
|
20
|
+
attr = `{true}`;
|
|
21
|
+
}
|
|
22
|
+
return Object.assign(acc, { [entry.name]: attr });
|
|
23
|
+
}, {}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return child;
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
29
|
}
|
|
@@ -4,28 +4,28 @@ let mdxExpressionFromMarkdown: any;
|
|
|
4
4
|
let mdxExpressionToMarkdown: any;
|
|
5
5
|
|
|
6
6
|
export function remarkExpressions(this: any, options: any) {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
let settings = options || {};
|
|
8
|
+
let data = this.data();
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
add('micromarkExtensions', mdxExpression({}));
|
|
11
|
+
add('fromMarkdownExtensions', mdxExpressionFromMarkdown);
|
|
12
|
+
add('toMarkdownExtensions', mdxExpressionToMarkdown);
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
function add(field: any, value: any) {
|
|
15
|
+
/* istanbul ignore if - other extensions. */
|
|
16
|
+
if (data[field]) data[field].push(value);
|
|
17
|
+
else data[field] = [value];
|
|
18
|
+
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export async function loadRemarkExpressions() {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
if (!mdxExpression) {
|
|
23
|
+
const micromarkMdxExpression = await import('micromark-extension-mdx-expression');
|
|
24
|
+
mdxExpression = micromarkMdxExpression.mdxExpression;
|
|
25
|
+
}
|
|
26
|
+
if (!mdxExpressionFromMarkdown || !mdxExpressionToMarkdown) {
|
|
27
|
+
const mdastUtilMdxExpression = await import('mdast-util-mdx-expression');
|
|
28
|
+
mdxExpressionFromMarkdown = mdastUtilMdxExpression.mdxExpressionFromMarkdown;
|
|
29
|
+
mdxExpressionToMarkdown = mdastUtilMdxExpression.mdxExpressionToMarkdown;
|
|
30
|
+
}
|
|
31
31
|
}
|
package/src/remark-jsx.ts
CHANGED
|
@@ -4,28 +4,28 @@ let mdxJsxFromMarkdown: any;
|
|
|
4
4
|
let mdxJsxToMarkdown: any;
|
|
5
5
|
|
|
6
6
|
export function remarkJsx(this: any, options: any) {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
let settings = options || {};
|
|
8
|
+
let data = this.data();
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
// TODO this seems to break adding slugs, no idea why add('micromarkExtensions', mdxJsx({}));
|
|
11
|
+
add('fromMarkdownExtensions', mdxJsxFromMarkdown);
|
|
12
|
+
add('toMarkdownExtensions', mdxJsxToMarkdown);
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
function add(field: any, value: any) {
|
|
15
|
+
/* istanbul ignore if - other extensions. */
|
|
16
|
+
if (data[field]) data[field].push(value);
|
|
17
|
+
else data[field] = [value];
|
|
18
|
+
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export async function loadRemarkJsx() {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
if (!mdxJsx) {
|
|
23
|
+
const micromarkMdxJsx = await import('micromark-extension-mdx-jsx');
|
|
24
|
+
mdxJsx = micromarkMdxJsx.mdxJsx;
|
|
25
|
+
}
|
|
26
|
+
if (!mdxJsxFromMarkdown || !mdxJsxToMarkdown) {
|
|
27
|
+
const mdastUtilMdxJsx = await import('mdast-util-mdx-jsx');
|
|
28
|
+
mdxJsxFromMarkdown = mdastUtilMdxJsx.mdxJsxFromMarkdown;
|
|
29
|
+
mdxJsxToMarkdown = mdastUtilMdxJsx.mdxJsxToMarkdown;
|
|
30
|
+
}
|
|
31
31
|
}
|
package/src/remark-prism.ts
CHANGED
|
@@ -7,64 +7,64 @@ const noVisit = new Set(['root', 'html', 'text']);
|
|
|
7
7
|
const languageMap = new Map([['ts', 'typescript']]);
|
|
8
8
|
|
|
9
9
|
function runHighlighter(lang: string, code: string) {
|
|
10
|
-
|
|
10
|
+
let classLanguage = `language-${lang}`;
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
if (lang == null) {
|
|
13
|
+
lang = 'plaintext';
|
|
14
|
+
}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
const ensureLoaded = (lang: string) => {
|
|
17
|
+
if (lang && !Prism.languages[lang]) {
|
|
18
|
+
loadLanguages([lang]);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
if (languageMap.has(lang)) {
|
|
23
|
+
ensureLoaded(languageMap.get(lang)!);
|
|
24
|
+
} else if (lang === 'astro') {
|
|
25
|
+
ensureLoaded('typescript');
|
|
26
|
+
addAstro(Prism);
|
|
27
|
+
} else {
|
|
28
|
+
ensureLoaded('markup-templating'); // Prism expects this to exist for a number of other langs
|
|
29
|
+
ensureLoaded(lang);
|
|
30
|
+
}
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
if (lang && !Prism.languages[lang]) {
|
|
33
|
+
console.warn(`Unable to load the language: ${lang}`);
|
|
34
|
+
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
const grammar = Prism.languages[lang];
|
|
37
|
+
let html = code;
|
|
38
|
+
if (grammar) {
|
|
39
|
+
html = Prism.highlight(code, grammar, lang);
|
|
40
|
+
}
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
return { classLanguage, html };
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
type MaybeString = string | null | undefined;
|
|
46
46
|
|
|
47
47
|
/** */
|
|
48
48
|
function transformer(className: MaybeString) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
return function (tree: any) {
|
|
50
|
+
const visitor = (node: any) => {
|
|
51
|
+
let { lang, value } = node;
|
|
52
|
+
node.type = 'html';
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
54
|
+
let { html, classLanguage } = runHighlighter(lang, value);
|
|
55
|
+
let classes = [classLanguage];
|
|
56
|
+
if (className) {
|
|
57
|
+
classes.push(className);
|
|
58
|
+
}
|
|
59
|
+
node.value = `<pre class="${classes.join(' ')}"><code data-astro-raw class="${classLanguage}">${html}</code></pre>`;
|
|
60
|
+
return node;
|
|
61
|
+
};
|
|
62
|
+
return visit(tree, 'code', visitor);
|
|
63
|
+
};
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
function plugin(className: MaybeString) {
|
|
67
|
-
|
|
67
|
+
return transformer.bind(null, className);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
export default plugin;
|
|
@@ -3,16 +3,16 @@ const noVisit = new Set(['root', 'html', 'text']);
|
|
|
3
3
|
|
|
4
4
|
/** */
|
|
5
5
|
export default function scopedStyles(className: string) {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const visitor = (node: any) => {
|
|
7
|
+
if (noVisit.has(node.type)) return;
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
const { data } = node;
|
|
10
|
+
let currentClassName = data?.hProperties?.class ?? '';
|
|
11
|
+
node.data = node.data || {};
|
|
12
|
+
node.data.hProperties = node.data.hProperties || {};
|
|
13
|
+
node.data.hProperties.class = `${className} ${currentClassName}`.trim();
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
return node;
|
|
16
|
+
};
|
|
17
|
+
return () => (tree: any) => visit(tree, visitor);
|
|
18
18
|
}
|
package/src/remark-slug.ts
CHANGED
|
@@ -15,18 +15,18 @@ const slugs = new BananaSlug();
|
|
|
15
15
|
* @type {import('unified').Plugin<void[], Root>}
|
|
16
16
|
*/
|
|
17
17
|
export default function remarkSlug() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
return (tree: any) => {
|
|
19
|
+
slugs.reset();
|
|
20
|
+
visit(tree, (node) => {
|
|
21
|
+
console.log(node);
|
|
22
|
+
});
|
|
23
|
+
visit(tree, 'heading', (node) => {
|
|
24
|
+
const data = node.data || (node.data = {});
|
|
25
|
+
const props = /** @type {Properties} */ data.hProperties || (data.hProperties = {});
|
|
26
|
+
let id = props.id;
|
|
27
|
+
id = id ? slugs.slug(String(id), true) : slugs.slug(toString(node));
|
|
28
|
+
data.id = id;
|
|
29
|
+
props.id = id;
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
32
|
}
|
package/src/remark-unwrap.ts
CHANGED
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
import { visit, SKIP } from 'unist-util-visit';
|
|
1
|
+
import { visit as _visit, SKIP } from 'unist-util-visit';
|
|
2
|
+
|
|
3
|
+
// This is a workaround.
|
|
4
|
+
// It fixes a compatibility issue between different, incompatible ASTs given by plugins to Unist
|
|
5
|
+
const visit = _visit as (node: any, type: string, callback?: (node: any, index: number, parent: any) => any) => any;
|
|
2
6
|
|
|
3
7
|
// Remove the wrapping paragraph for <astro-root> islands
|
|
4
8
|
export default function remarkUnwrap() {
|
|
5
|
-
|
|
6
|
-
|
|
9
|
+
const astroRootNodes = new Set();
|
|
10
|
+
let insideAstroRoot = false;
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
return (tree: any) => {
|
|
13
|
+
// reset state
|
|
14
|
+
insideAstroRoot = false;
|
|
15
|
+
astroRootNodes.clear();
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
visit(tree, 'html', (node) => {
|
|
18
|
+
if (node.value.indexOf('<astro-root') > -1 && !insideAstroRoot) {
|
|
19
|
+
insideAstroRoot = true;
|
|
20
|
+
}
|
|
21
|
+
if (node.value.indexOf('</astro-root') > -1 && insideAstroRoot) {
|
|
22
|
+
insideAstroRoot = false;
|
|
23
|
+
}
|
|
24
|
+
astroRootNodes.add(node);
|
|
25
|
+
});
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
visit(tree, 'paragraph', (node, index, parent) => {
|
|
28
|
+
if (parent && typeof index === 'number' && containsAstroRootNode(node)) {
|
|
29
|
+
parent.children.splice(index, 1, ...node.children);
|
|
30
|
+
return [SKIP, index];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
};
|
|
30
34
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
function containsAstroRootNode(node: any) {
|
|
36
|
+
return node.children.map((child: any) => astroRootNodes.has(child)).reduce((all: boolean, v: boolean) => (all ? all : v), false);
|
|
37
|
+
}
|
|
34
38
|
}
|
package/src/types.ts
CHANGED
|
@@ -4,14 +4,14 @@ export type UnifiedPluginImport = Promise<{ default: unified.Plugin }>;
|
|
|
4
4
|
export type Plugin = string | [string, any] | UnifiedPluginImport | [UnifiedPluginImport, any];
|
|
5
5
|
|
|
6
6
|
export interface AstroMarkdownOptions {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
mode?: 'md' | 'mdx';
|
|
8
|
+
remarkPlugins?: Plugin[];
|
|
9
|
+
rehypePlugins?: Plugin[];
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export interface MarkdownRenderingOptions extends Partial<AstroMarkdownOptions> {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
/** @internal */
|
|
14
|
+
$?: {
|
|
15
|
+
scopedClassName: string | null;
|
|
16
|
+
};
|
|
17
17
|
}
|