@rasenganjs/mdx 1.2.0-beta.7 → 1.2.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/chunk-U2MZHTHK.js +89 -0
  3. package/dist/index.cjs +922 -0
  4. package/dist/index.d.cts +150 -0
  5. package/dist/index.d.ts +150 -0
  6. package/dist/index.js +798 -0
  7. package/dist/plugin.cjs +289 -0
  8. package/dist/plugin.d.cts +20 -0
  9. package/dist/plugin.d.ts +20 -0
  10. package/dist/plugin.js +174 -0
  11. package/package.json +15 -15
  12. package/tsup.config.ts +11 -0
  13. package/types/client.d.ts +1 -1
  14. package/lib/components/codeblock.d.ts +0 -15
  15. package/lib/components/codeblock.js +0 -62
  16. package/lib/components/codeblock.js.map +0 -1
  17. package/lib/components/codeblock2.d.ts +0 -14
  18. package/lib/components/codeblock2.js +0 -47
  19. package/lib/components/codeblock2.js.map +0 -1
  20. package/lib/components/heading.d.ts +0 -2
  21. package/lib/components/heading.js +0 -27
  22. package/lib/components/heading.js.map +0 -1
  23. package/lib/components/index.d.ts +0 -5
  24. package/lib/components/index.js +0 -8
  25. package/lib/components/index.js.map +0 -1
  26. package/lib/components/markdown.d.ts +0 -7
  27. package/lib/components/markdown.js +0 -28
  28. package/lib/components/markdown.js.map +0 -1
  29. package/lib/components/renderer.d.ts +0 -12
  30. package/lib/components/renderer.js +0 -45
  31. package/lib/components/renderer.js.map +0 -1
  32. package/lib/components/table.d.ts +0 -3
  33. package/lib/components/table.js +0 -5
  34. package/lib/components/table.js.map +0 -1
  35. package/lib/components/toc.d.ts +0 -7
  36. package/lib/components/toc.js +0 -26
  37. package/lib/components/toc.js.map +0 -1
  38. package/lib/hooks/use-toc-observer.d.ts +0 -8
  39. package/lib/hooks/use-toc-observer.js +0 -60
  40. package/lib/hooks/use-toc-observer.js.map +0 -1
  41. package/lib/index.d.ts +0 -13
  42. package/lib/index.js +0 -16
  43. package/lib/index.js.map +0 -1
  44. package/lib/styles/rasengan-mdx.min.css +0 -1
  45. package/lib/types/index.d.ts +0 -67
  46. package/lib/types/index.js +0 -2
  47. package/lib/types/index.js.map +0 -1
  48. package/lib/utils/create-filter.d.ts +0 -8
  49. package/lib/utils/create-filter.js +0 -23
  50. package/lib/utils/create-filter.js.map +0 -1
  51. package/lib/utils/create-heading.d.ts +0 -4
  52. package/lib/utils/create-heading.js +0 -19
  53. package/lib/utils/create-heading.js.map +0 -1
  54. package/lib/utils/define-mdx-config.d.ts +0 -2
  55. package/lib/utils/define-mdx-config.js +0 -4
  56. package/lib/utils/define-mdx-config.js.map +0 -1
  57. package/lib/utils/extract-toc.d.ts +0 -23
  58. package/lib/utils/extract-toc.js +0 -113
  59. package/lib/utils/extract-toc.js.map +0 -1
  60. package/lib/utils/generate-navigation.d.ts +0 -0
  61. package/lib/utils/generate-navigation.js +0 -75
  62. package/lib/utils/generate-navigation.js.map +0 -1
  63. package/lib/utils/index.d.ts +0 -15
  64. package/lib/utils/index.js +0 -4
  65. package/lib/utils/index.js.map +0 -1
  66. package/lib/utils/mark-to-html.d.ts +0 -1
  67. package/lib/utils/mark-to-html.js +0 -15
  68. package/lib/utils/mark-to-html.js.map +0 -1
  69. package/lib/utils/plugin.d.ts +0 -26
  70. package/lib/utils/plugin.js +0 -149
  71. package/lib/utils/plugin.js.map +0 -1
  72. package/lib/utils/polyfill.d.ts +0 -10
  73. package/lib/utils/polyfill.js +0 -15
  74. package/lib/utils/polyfill.js.map +0 -1
@@ -1,113 +0,0 @@
1
- import React from 'react';
2
- /**
3
- * This function is used to extract TOC (Table Of Content) from markdown text
4
- * @param markdown
5
- * @returns
6
- */
7
- export function extractTOC(markdown) {
8
- const lines = markdown.split('\n');
9
- const toc = [];
10
- lines.forEach((line) => {
11
- const h2Match = line.match(/^## (.+)/); // Titres H2
12
- const h3Match = line.match(/^### (.+)/); // Titres H3
13
- if (h2Match) {
14
- const title = h2Match[1].trim();
15
- const anchor = generateAnchor(title);
16
- toc.push({
17
- title,
18
- anchor,
19
- level: 2,
20
- children: [],
21
- });
22
- }
23
- else if (h3Match && toc.length > 0) {
24
- const title = h3Match[1].trim();
25
- const anchor = generateAnchor(title);
26
- toc[toc.length - 1].children.push({
27
- title,
28
- anchor,
29
- level: 3,
30
- });
31
- }
32
- });
33
- return toc;
34
- }
35
- /**
36
- * This function is used to extract the link from a heading text coming from a markdown
37
- * @param title
38
- * @returns
39
- */
40
- export const generateAnchor = (title) => {
41
- if (Array.isArray(title)) {
42
- const text = title
43
- .map((item) => {
44
- if (React.isValidElement(item)) {
45
- return item.props['children'].toString().trim();
46
- }
47
- return item.toString().trim();
48
- })
49
- .join(' ');
50
- const lastItem = title[title.length - 1];
51
- if (typeof lastItem === 'string') {
52
- // Pattern to match a markdown anchor link at the end: [#something]
53
- const match1 = text.match(/\s\[#([^\]]+)\]$/);
54
- if (match1) {
55
- return {
56
- id: match1[1],
57
- // remove the last element from title
58
- text: title.slice(0, title.length - 1),
59
- };
60
- }
61
- }
62
- return {
63
- id: text.replace(/\s+/g, '-').toLowerCase(),
64
- text: title,
65
- };
66
- }
67
- // If the title is a React element
68
- if (React.isValidElement(title)) {
69
- return {
70
- id: title.props['children']
71
- .toString()
72
- .trim()
73
- .replace(/\s+/g, '-')
74
- .toLowerCase(),
75
- text: title,
76
- };
77
- }
78
- const strippedTitle = String(toText(title).trim());
79
- // Pattern to match a markdown anchor link at the end: [#something]
80
- const match = strippedTitle.match(/\s\[#([^\]]+)\]$/);
81
- let id;
82
- let text;
83
- if (match) {
84
- // match[1] is the content inside [#...]
85
- id = match[1].trim().replace(/\s+/g, '-').toLowerCase();
86
- // remove the matched anchor from the original text
87
- text = strippedTitle.replace(match[0], '').trim();
88
- }
89
- else {
90
- // No markdown anchor found, generate id from the whole title
91
- id = strippedTitle.replace(/\s+/g, '-').toLowerCase();
92
- text = strippedTitle;
93
- }
94
- return { id, text };
95
- };
96
- function toText(input) {
97
- if (input == null)
98
- return ''; // null/undefined
99
- if (typeof input === 'string')
100
- return input; // already a string
101
- if (Array.isArray(input))
102
- return input.map(toText).join(' ');
103
- if (input instanceof Uint8Array)
104
- // Buffer/typed array
105
- return new TextDecoder().decode(input);
106
- try {
107
- return String(input);
108
- }
109
- catch {
110
- return '';
111
- } // fallback
112
- }
113
- //# sourceMappingURL=extract-toc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract-toc.js","sourceRoot":"","sources":["../../src/utils/extract-toc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,GAAG,GAAc,EAAE,CAAC;IAE1B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY;QAErD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACrC,GAAG,CAAC,IAAI,CAAC;gBACP,KAAK;gBACL,MAAM;gBACN,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACrC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChC,KAAK;gBACL,MAAM;gBACN,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAE,EAAE;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YAClD,CAAC;YAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,mEAAmE;YACnE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAE9C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;oBACb,qCAAqC;oBACrC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;iBACvC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;YAC3C,IAAI,EAAE,KAAK;SACZ,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;iBACxB,QAAQ,EAAE;iBACV,IAAI,EAAE;iBACN,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,WAAW,EAAE;YAChB,IAAI,EAAE,KAAK;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnD,mEAAmE;IACnE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEtD,IAAI,EAAU,CAAC;IACf,IAAI,IAAY,CAAC;IAEjB,IAAI,KAAK,EAAE,CAAC;QACV,wCAAwC;QACxC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD,mDAAmD;QACnD,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,6DAA6D;QAC7D,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,GAAG,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC,CAAC,iBAAiB;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,CAAC,mBAAmB;IAChE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,KAAK,YAAY,UAAU;QAC7B,qBAAqB;QACrB,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,WAAW;AACf,CAAC"}
File without changes
@@ -1,75 +0,0 @@
1
- // // @ts-ignore
2
- // import { RouterComponent } from 'rasengan';
3
- // import { NavigationStructure } from '../types/index.js';
4
- // export const generateNavigation = (router: RouterComponent) => {
5
- // const navigation: NavigationStructure[] = [];
6
- // const { routers: subRouters, pages } = router;
7
- // for (const page of pages) {
8
- // // if (page.metadata?.hidden) {
9
- // // continue;
10
- // // }
11
- // const { exists, isParent, route } = checkIfRouteExists(
12
- // navigation,
13
- // page.path
14
- // );
15
- // if (exists) {
16
- // continue;
17
- // }
18
- // if (isParent) {
19
- // route.children.push({
20
- // title: page.metadata.title,
21
- // link: page.path,
22
- // level: route.level + 1,
23
- // });
24
- // continue;
25
- // }
26
- // navigation.push({
27
- // title: page.metadata.title,
28
- // link: page.path,
29
- // level: 1,
30
- // children: [],
31
- // });
32
- // }
33
- // // for (const subRouter of subRouters) {
34
- // // navigation.push({
35
- // // title: subRouter.layout.title,
36
- // // link: subRouter.layout.path,
37
- // // level: 1,
38
- // // children: generateNavigation(subRouter),
39
- // // });
40
- // // }
41
- // return navigation;
42
- // };
43
- // const checkIfRouteExists = (
44
- // navigation: NavigationStructure[],
45
- // path: string
46
- // ) => {
47
- // for (const route of navigation) {
48
- // if (route.link === path) {
49
- // return {
50
- // exists: true,
51
- // isParent: false,
52
- // route,
53
- // };
54
- // }
55
- // if (path.startsWith(route.link)) {
56
- // return {
57
- // exists: false,
58
- // isParent: true,
59
- // route,
60
- // };
61
- // }
62
- // if (route.children) {
63
- // const result = checkIfRouteExists(route.children, path);
64
- // if (result.exists) {
65
- // return result;
66
- // }
67
- // }
68
- // }
69
- // return {
70
- // exists: false,
71
- // isParent: false,
72
- // route: null,
73
- // };
74
- // };
75
- //# sourceMappingURL=generate-navigation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-navigation.js","sourceRoot":"","sources":["../../src/utils/generate-navigation.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,8CAA8C;AAC9C,2DAA2D;AAE3D,mEAAmE;AACnE,kDAAkD;AAElD,mDAAmD;AAEnD,gCAAgC;AAChC,sCAAsC;AACtC,qBAAqB;AACrB,WAAW;AAEX,8DAA8D;AAC9D,oBAAoB;AACpB,kBAAkB;AAClB,SAAS;AAET,oBAAoB;AACpB,kBAAkB;AAClB,QAAQ;AAER,sBAAsB;AACtB,8BAA8B;AAC9B,sCAAsC;AACtC,2BAA2B;AAC3B,kCAAkC;AAClC,YAAY;AAEZ,kBAAkB;AAClB,QAAQ;AAER,wBAAwB;AACxB,oCAAoC;AACpC,yBAAyB;AACzB,kBAAkB;AAClB,sBAAsB;AACtB,UAAU;AACV,MAAM;AAEN,6CAA6C;AAC7C,2BAA2B;AAC3B,0CAA0C;AAC1C,wCAAwC;AACxC,qBAAqB;AACrB,oDAAoD;AACpD,aAAa;AACb,SAAS;AAET,uBAAuB;AACvB,KAAK;AAEL,+BAA+B;AAC/B,uCAAuC;AACvC,iBAAiB;AACjB,SAAS;AACT,sCAAsC;AACtC,iCAAiC;AACjC,iBAAiB;AACjB,wBAAwB;AACxB,2BAA2B;AAC3B,iBAAiB;AACjB,WAAW;AACX,QAAQ;AAER,yCAAyC;AACzC,iBAAiB;AACjB,yBAAyB;AACzB,0BAA0B;AAC1B,iBAAiB;AACjB,WAAW;AACX,QAAQ;AAER,4BAA4B;AAC5B,iEAAiE;AAEjE,6BAA6B;AAC7B,yBAAyB;AACzB,UAAU;AACV,QAAQ;AACR,MAAM;AAEN,aAAa;AACb,qBAAqB;AACrB,uBAAuB;AACvB,mBAAmB;AACnB,OAAO;AACP,KAAK"}
@@ -1,15 +0,0 @@
1
- declare const plugin: () => (Promise<{
2
- name: string;
3
- enforce: string;
4
- config(config: unknown, env: any): void;
5
- configResolved(resolvedConfig: unknown): void;
6
- transform(code: string, id: string): Promise<{
7
- code: string;
8
- map: any;
9
- }>;
10
- }> | {
11
- name: string;
12
- resolveId(id: string): string;
13
- load(id: string): Promise<string>;
14
- })[];
15
- export default plugin;
@@ -1,4 +0,0 @@
1
- import mdxPlugin, { loadMDXComponentsPlugin } from './plugin.js';
2
- const plugin = () => [mdxPlugin(), loadMDXComponentsPlugin()];
3
- export default plugin;
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAE9D,eAAe,MAAM,CAAC"}
@@ -1 +0,0 @@
1
- export default function markToHtml(markdown: string): Promise<string>;
@@ -1,15 +0,0 @@
1
- import rehypeStringify from 'rehype-stringify';
2
- import remarkGfm from 'remark-gfm';
3
- import remarkParse from 'remark-parse';
4
- import remarkRehype from 'remark-rehype';
5
- import { unified } from 'unified';
6
- export default async function markToHtml(markdown) {
7
- const file = await unified()
8
- .use(remarkParse)
9
- .use(remarkGfm)
10
- .use(remarkRehype)
11
- .use(rehypeStringify)
12
- .process(markdown);
13
- return String(file);
14
- }
15
- //# sourceMappingURL=mark-to-html.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mark-to-html.js","sourceRoot":"","sources":["../../src/utils/mark-to-html.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IACvD,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE;SACzB,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,YAAY,CAAC;SACjB,GAAG,CAAC,eAAe,CAAC;SACpB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
@@ -1,26 +0,0 @@
1
- /**
2
- * A Vite plugin that transforms MDX files into a format that can be used in a RasenganJs application.
3
- *
4
- * The plugin performs the following tasks:
5
- * - Resolves the Vite configuration and stores it for later use.
6
- * - Transforms MDX files by applying the `@mdx-js/rollup` transformation.
7
- * - Extracts frontmatter data from the MDX files and creates a `metadata` object.
8
- * - Appends the `metadata` object to the transformed MDX content.
9
- *
10
- * The transformed MDX content can then be used in the RasenganJs application, with the `metadata` object providing additional information about the content.
11
- */
12
- export default function plugin(): Promise<{
13
- name: string;
14
- enforce: string;
15
- config(config: unknown, env: any): void;
16
- configResolved(resolvedConfig: unknown): void;
17
- transform(code: string, id: string): Promise<{
18
- code: string;
19
- map: any;
20
- }>;
21
- }>;
22
- export declare function loadMDXComponentsPlugin(): {
23
- name: string;
24
- resolveId(id: string): string;
25
- load(id: string): Promise<string>;
26
- };
@@ -1,149 +0,0 @@
1
- import matter from 'gray-matter';
2
- import createFilter from './create-filter.js';
3
- import remarkGfm from 'remark-gfm';
4
- import rehypeStringify from 'rehype-stringify';
5
- import remarkParse from 'remark-parse';
6
- import remarkRehype from 'remark-rehype';
7
- import rehypePrettyCode from 'rehype-pretty-code';
8
- import { extractTOC } from './extract-toc.js';
9
- /**
10
- * A Vite plugin that transforms MDX files into a format that can be used in a RasenganJs application.
11
- *
12
- * The plugin performs the following tasks:
13
- * - Resolves the Vite configuration and stores it for later use.
14
- * - Transforms MDX files by applying the `@mdx-js/rollup` transformation.
15
- * - Extracts frontmatter data from the MDX files and creates a `metadata` object.
16
- * - Appends the `metadata` object to the transformed MDX content.
17
- *
18
- * The transformed MDX content can then be used in the RasenganJs application, with the `metadata` object providing additional information about the content.
19
- */
20
- export default async function plugin() {
21
- const mdx = (await import('@mdx-js/rollup')).default;
22
- let config;
23
- const filter = createFilter('**/*.md?(x)');
24
- const mdxInstance = mdx({
25
- remarkPlugins: [remarkParse, remarkGfm],
26
- rehypePlugins: [
27
- remarkRehype,
28
- rehypeStringify,
29
- [
30
- rehypePrettyCode,
31
- {
32
- themes: {
33
- light: 'one-light',
34
- dark: 'one-dark-pro',
35
- },
36
- },
37
- ],
38
- ],
39
- });
40
- return {
41
- name: 'vite-plugin-rasengan-mdx',
42
- // Apply transformation of the mdx file before other plugins
43
- enforce: 'pre',
44
- config(config, env) {
45
- mdxInstance.config(config, env);
46
- },
47
- /**
48
- * Stores the resolved Vite configuration for later use.
49
- *
50
- * @param resolvedConfig - The resolved Vite configuration object.
51
- */
52
- configResolved(resolvedConfig) {
53
- // store the resolved config
54
- config = resolvedConfig;
55
- },
56
- /**
57
- * Transforms an MDX file by applying the `@mdx-js/rollup` transformation, extracting frontmatter data, and appending a `metadata` object to the transformed content.
58
- *
59
- * @param code - The content of the MDX file.
60
- * @param id - The ID of the MDX file.
61
- * @returns An object containing the transformed MDX code and a source map, or `null` if the file is not an MDX file.
62
- */
63
- async transform(code, id) {
64
- if (!filter(id)) {
65
- return null;
66
- }
67
- const { content, data: frontmatter } = matter(code);
68
- // Extract the table of content
69
- const isTocVisible = frontmatter.toc !== undefined ? frontmatter.toc : false;
70
- const toc = extractTOC(content);
71
- // Apply transformation of the mdx file
72
- const result = await mdxInstance.transform(content, id);
73
- // Extract the file name from the path
74
- const fileName = id
75
- .split('/')
76
- .pop()
77
- .replace(/.page.mdx?$/, '');
78
- // TODO: Consider other params of metadata from frontmatter
79
- const metadata = {
80
- path: frontmatter.path || `/${fileName}`,
81
- metadata: frontmatter.metadata || {
82
- title: fileName,
83
- },
84
- };
85
- let newCode = result.code;
86
- newCode = newCode.replace(/export default\s+/, 'const MDXContent = ');
87
- return {
88
- code: `
89
- import { MDXRenderer } from "@rasenganjs/mdx";
90
- import mdxConfig from "virtual:rasengan/mdx-components";
91
-
92
- ${newCode}
93
-
94
- const metadata = ${JSON.stringify(metadata)};
95
- const toc = ${isTocVisible ? JSON.stringify(toc) : undefined};
96
-
97
-
98
- const MDXWrapper = {
99
- metadata,
100
- toc,
101
- type: "MDXPageComponent", // Helps to differentiate PageComponent from MDXPageComponent
102
- Content: MDXContent, // The content of the MDX file
103
- Renderer: MDXRenderer, // The renderer component
104
- config: mdxConfig, // The MDX config coming from mdx-components virtual module
105
- };
106
-
107
-
108
- export default MDXWrapper;
109
- `,
110
- map: result.map,
111
- };
112
- },
113
- };
114
- }
115
- export function loadMDXComponentsPlugin() {
116
- const virtualModuleId = 'virtual:rasengan/mdx-components';
117
- const resolvedVirtualModuleId = '\0' + virtualModuleId;
118
- return {
119
- name: 'vite-plugin-rasengan-mdx-components',
120
- resolveId(id) {
121
- if (id === virtualModuleId) {
122
- return resolvedVirtualModuleId;
123
- }
124
- },
125
- async load(id) {
126
- if (id === resolvedVirtualModuleId) {
127
- return `
128
- const modules = import.meta.glob(
129
- [
130
- '/mdx-components.{js,jsx,ts,tsx}',
131
- ],
132
- { eager: true }
133
- );
134
- let config = {};
135
-
136
- const modulesArray = Object.entries(modules);
137
-
138
- if (modulesArray.length > 0) {
139
- const [filePath, mod] = modulesArray[0];
140
- config = mod.default;
141
- }
142
-
143
- export default config;
144
- `;
145
- }
146
- },
147
- };
148
- }
149
- //# sourceMappingURL=plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/utils/plugin.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- export default function polyfill(): {
2
- name: string;
3
- config: () => {
4
- define: {
5
- process: NodeJS.Process;
6
- };
7
- };
8
- enforce: string;
9
- apply: string;
10
- };
@@ -1,15 +0,0 @@
1
- export default function polyfill() {
2
- return {
3
- name: 'vite-plugin-rasengan-mdx-polyfill',
4
- config: () => {
5
- return {
6
- define: {
7
- process: process,
8
- },
9
- };
10
- },
11
- enforce: 'pre',
12
- apply: 'build',
13
- };
14
- }
15
- //# sourceMappingURL=polyfill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../../src/utils/polyfill.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,QAAQ;IAC9B,OAAO;QACL,IAAI,EAAE,mCAAmC;QAEzC,MAAM,EAAE,GAAG,EAAE;YACX,OAAO;gBACL,MAAM,EAAE;oBACN,OAAO,EAAE,OAAO;iBACjB;aACF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;KACf,CAAC;AACJ,CAAC"}