Skip to content

Commit cb46d88

Browse files
authored
[add] MDX index creator (#6)
1 parent ad274f0 commit cb46d88

File tree

13 files changed

+1464
-949
lines changed

13 files changed

+1464
-949
lines changed

create-index.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { promises } from 'fs';
2+
import { filter, traverse } from 'fs-match';
3+
import { join } from 'path';
4+
import { parse } from 'yaml';
5+
6+
const title = 'MDX index creator',
7+
[folder] = process.argv.slice(2);
8+
9+
const MDXPattern = /\.(mdx?|markdown)$/,
10+
sourceCode: string[] = [],
11+
targetPath = join(folder, 'index.ts');
12+
13+
console.time(title);
14+
15+
(async () => {
16+
for await (const filePath of filter(traverse(folder), MDXPattern)) {
17+
const content = await promises.readFile(filePath, {
18+
encoding: 'utf-8'
19+
});
20+
const [_, frontMatter] = content.match(/^---([\s\S]*?)\n---/m) || [];
21+
22+
const meta = JSON.stringify(parse(frontMatter), null, 4)
23+
.slice(1, -1)
24+
.trim();
25+
const path = filePath.replaceAll('\\', '/').slice(folder.length);
26+
27+
sourceCode.push(`{
28+
path: '${path.replace(MDXPattern, '').toLowerCase()}',
29+
${meta},
30+
component: lazy(loadMDX(() => import('./${path}')))
31+
}`);
32+
}
33+
34+
await promises.writeFile(
35+
targetPath,
36+
`// This file is created by "${title}" script,
37+
// please don't edit it manually!
38+
39+
import { lazy } from 'web-cell';
40+
41+
import { loadMDX } from '../utility';
42+
43+
export default [
44+
${sourceCode}
45+
];
46+
`
47+
);
48+
49+
console.log(`[save] ${targetPath}`);
50+
console.timeEnd(title);
51+
})();

package.json

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,22 @@
44
"description": "Re-implemented Official Document site of BootStrap & FontAwesome based on WebCell, BootCell & MarkCell",
55
"dependencies": {
66
"@nuintun/qrcode": "^3.4.0",
7-
"boot-cell": "^2.0.0-beta.9",
7+
"boot-cell": "^2.0.0-beta.18",
88
"cell-router": "^3.0.0-rc.5",
99
"classnames": "^2.5.1",
10-
"dom-renderer": "^2.0.6",
10+
"dom-renderer": "^2.1.1",
1111
"github-web-widget": "^4.0.0-rc.1",
1212
"iterable-observer": "^1.0.1",
1313
"koajax": "^0.9.6",
1414
"lodash.groupby": "^4.6.0",
1515
"markdown-ime": "^1.0.3",
16-
"marked": "^11.1.1",
16+
"marked": "^12.0.0",
1717
"mobx": "^6.12.0",
1818
"quill": "^1.3.7",
1919
"quill-image-uploader": "^1.3.0",
2020
"turndown": "^7.1.2",
2121
"turndown-plugin-gfm": "^1.0.2",
22-
"web-cell": "^3.0.0-rc.8",
22+
"web-cell": "^3.0.0-rc.14",
2323
"web-utility": "^4.1.3"
2424
},
2525
"devDependencies": {
@@ -30,17 +30,20 @@
3030
"@parcel/transformer-typescript-tsc": "~2.11.0",
3131
"@parcel/transformer-webmanifest": "~2.11.0",
3232
"@types/lodash.groupby": "^4.6.9",
33-
"@types/mdx": "^2.0.10",
34-
"@types/node": "^18.19.9",
35-
"husky": "^9.0.5",
36-
"lint-staged": "^15.2.0",
33+
"@types/mdx": "^2.0.11",
34+
"@types/node": "^18.19.14",
35+
"fs-match": "^1.7.1",
36+
"husky": "^9.0.10",
37+
"lint-staged": "^15.2.2",
3738
"parcel": "~2.11.0",
3839
"parcel-transformer-mdx": "^0.3.1",
39-
"postcss": "^8.4.33",
40+
"postcss": "^8.4.35",
4041
"postcss-modules": "^4.3.1",
41-
"prettier": "^3.2.4",
42+
"prettier": "^3.2.5",
43+
"tsx": "^4.7.0",
4244
"typescript": "~5.3.3",
43-
"workbox-cli": "^7.0.0"
45+
"workbox-cli": "^7.0.0",
46+
"yaml": "^2.3.4"
4447
},
4548
"prettier": {
4649
"singleQuote": true,
@@ -52,9 +55,9 @@
5255
"*.{html,md,mdx,less,json,yml,ts,tsx}": "prettier --write"
5356
},
5457
"scripts": {
55-
"prepare": "husky",
58+
"prepare": "husky && npm run clean",
5659
"test": "lint-staged",
57-
"clean": "rm -rf .parcel-cache/ dist/",
60+
"clean": "rm -rf .parcel-cache/ dist/ && tsx create-index source/document/",
5861
"pack-tsx": "parcel build source/index.html --public-url .",
5962
"build": "npm run clean && npm run pack-tsx && workbox generateSW",
6063
"start": "npm run clean && parcel source/index.html --open"

0 commit comments

Comments
 (0)