@timvir/mdx 0.1.37 → 0.1.40

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 (2) hide show
  1. package/index.js +81 -9
  2. package/package.json +6 -1
package/index.js CHANGED
@@ -1,11 +1,15 @@
1
- import * as fs from "fs";
1
+ import generate from "@babel/generator";
2
+ import { parse } from "@babel/parser";
3
+ import * as t from "@babel/types";
4
+ import * as crypto from "node:crypto";
5
+ import * as espree from "espree";
6
+ import * as fs from "node:fs";
2
7
  import { fromMarkdown } from "mdast-util-from-markdown";
3
8
  import { mdxFromMarkdown } from "mdast-util-mdx";
4
9
  import { mdxjs } from "micromark-extension-mdxjs";
5
- import * as crypto from "crypto";
6
- import * as path from "path";
10
+ import * as path from "node:path";
11
+ import prettier from "prettier";
7
12
  import { visit } from "unist-util-visit";
8
- import * as espree from "espree";
9
13
 
10
14
  export function remarkPlugin() {
11
15
  let counter = 0;
@@ -32,6 +36,14 @@ export function remarkPlugin() {
32
36
  */
33
37
  const module = path.join(path.dirname(filename), component, "samples", variant);
34
38
 
39
+ function loadSource() {
40
+ if (fs.existsSync(module)) {
41
+ return fs.readFileSync(module, "utf8");
42
+ } else {
43
+ return fs.readFileSync(module + ".tsx", "utf8");
44
+ }
45
+ }
46
+
35
47
  ({
36
48
  component: () => {
37
49
  /*
@@ -90,12 +102,72 @@ export function remarkPlugin() {
90
102
  }
91
103
  },
92
104
  source: () => {
105
+ const source = loadSource();
106
+
107
+ const { children } = fromMarkdown(`{${JSON.stringify(source)}}`, {
108
+ extensions: [mdxjs()],
109
+ mdastExtensions: [mdxFromMarkdown()],
110
+ });
111
+
112
+ for (const [k] of Object.keys(node)) {
113
+ delete node[k];
114
+ }
115
+
116
+ for (const [k, v] of Object.entries(children[0])) {
117
+ node[k] = v;
118
+ }
119
+ },
120
+ [`source/component`]: () => {
93
121
  const source = (() => {
94
- if (fs.existsSync(module)) {
95
- return fs.readFileSync(module, "utf8");
96
- } else {
97
- return fs.readFileSync(module + ".tsx", "utf8");
98
- }
122
+ const file = parse(loadSource(), {
123
+ sourceType: "module",
124
+ plugins: ["jsx", "typescript"],
125
+ });
126
+
127
+ const exportDefaultDeclaration = file.program.body.find((node) => t.isExportDefaultDeclaration(node));
128
+ const { declaration } = exportDefaultDeclaration;
129
+ const { code } = generate.default(declaration);
130
+ return prettier
131
+ .format(code, {
132
+ parser: "typescript",
133
+ printWidth: 80,
134
+ })
135
+ .trim()
136
+ .slice(0, -1);
137
+ })();
138
+
139
+ const { children } = fromMarkdown(`{${JSON.stringify(source)}}`, {
140
+ extensions: [mdxjs()],
141
+ mdastExtensions: [mdxFromMarkdown()],
142
+ });
143
+
144
+ for (const [k] of Object.keys(node)) {
145
+ delete node[k];
146
+ }
147
+
148
+ for (const [k, v] of Object.entries(children[0])) {
149
+ node[k] = v;
150
+ }
151
+ },
152
+ [`source/markup`]: () => {
153
+ const source = (() => {
154
+ const file = parse(loadSource(), {
155
+ sourceType: "module",
156
+ plugins: ["jsx", "typescript"],
157
+ });
158
+
159
+ const exportDefaultDeclaration = file.program.body.find((node) => t.isExportDefaultDeclaration(node));
160
+ const { declaration } = exportDefaultDeclaration;
161
+ const body = declaration.body.body;
162
+ const returnStatement = body.find((node) => t.isReturnStatement(node));
163
+ const { code } = generate.default(returnStatement.argument);
164
+ return prettier
165
+ .format(code, {
166
+ parser: "typescript",
167
+ printWidth: 80,
168
+ })
169
+ .trim()
170
+ .slice(0, -1);
99
171
  })();
100
172
 
101
173
  const { children } = fromMarkdown(`{${JSON.stringify(source)}}`, {
package/package.json CHANGED
@@ -1,16 +1,21 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@timvir/mdx",
4
- "version": "0.1.37",
4
+ "version": "0.1.40",
5
5
  "license": "MIT",
6
6
  "sideEffects": false,
7
7
  "exports": {
8
8
  ".": "./index.js"
9
9
  },
10
10
  "dependencies": {
11
+ "@babel/generator": "^7.17.0",
12
+ "@babel/parser": "^7.17.0",
13
+ "@babel/types": "^7.17.0",
14
+ "espree": "^9.3.1",
11
15
  "mdast-util-from-markdown": "^1.2.0",
12
16
  "mdast-util-mdx": "^2.0.0",
13
17
  "micromark-extension-mdxjs": "^1.0.0",
18
+ "prettier": "^2.6.2",
14
19
  "unist-util-visit": "^4.1.0"
15
20
  },
16
21
  "repository": {