dumi 1.1.45 → 2.0.0-alpha.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/README.md +9 -167
- package/bin/dumi.js +3 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +30 -0
- package/dist/client/theme/DumiDemo.d.ts +4 -0
- package/dist/client/theme/DumiDemo.js +9 -0
- package/dist/client/theme/context.d.ts +5 -0
- package/dist/client/theme/context.js +4 -0
- package/dist/client/theme/index.d.ts +2 -0
- package/dist/client/theme/index.js +2 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +32 -0
- package/dist/features/compile.d.ts +3 -0
- package/dist/features/compile.js +56 -0
- package/dist/features/configPlugins/index.d.ts +3 -0
- package/dist/features/configPlugins/index.js +51 -0
- package/dist/features/configPlugins/schema.d.ts +4 -0
- package/dist/features/configPlugins/schema.js +36 -0
- package/dist/features/routes.d.ts +3 -0
- package/dist/features/routes.js +112 -0
- package/dist/features/theme/index.d.ts +3 -0
- package/dist/features/theme/index.js +143 -0
- package/dist/features/theme/loader.d.ts +51 -0
- package/dist/features/theme/loader.js +58 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +27 -0
- package/dist/loaders/demo/index.d.ts +6 -0
- package/dist/loaders/demo/index.js +35 -0
- package/dist/loaders/markdown/index.d.ts +12 -0
- package/dist/loaders/markdown/index.js +60 -0
- package/dist/loaders/markdown/transformer/index.d.ts +37 -0
- package/dist/loaders/markdown/transformer/index.js +49 -0
- package/dist/loaders/markdown/transformer/rehypeDemo.d.ts +6 -0
- package/dist/loaders/markdown/transformer/rehypeDemo.js +91 -0
- package/dist/loaders/markdown/transformer/rehypeIsolation.d.ts +3 -0
- package/dist/loaders/markdown/transformer/rehypeIsolation.js +60 -0
- package/dist/loaders/markdown/transformer/rehypeJsxify.d.ts +2 -0
- package/dist/loaders/markdown/transformer/rehypeJsxify.js +92 -0
- package/dist/loaders/markdown/transformer/rehypeRaw.d.ts +3 -0
- package/dist/loaders/markdown/transformer/rehypeRaw.js +58 -0
- package/dist/loaders/markdown/transformer/rehypeStrip.d.ts +3 -0
- package/dist/loaders/markdown/transformer/rehypeStrip.js +44 -0
- package/dist/preset.d.ts +5 -0
- package/dist/preset.js +41 -0
- package/dist/registerMethods.d.ts +3 -0
- package/dist/registerMethods.js +32 -0
- package/dist/techStacks/react.d.ts +6 -0
- package/dist/techStacks/react.js +79 -0
- package/dist/types.d.ts +56 -0
- package/dist/types.js +30 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +32 -0
- package/package.json +89 -23
- package/index.d.ts +0 -1
- package/index.js +0 -3
- package/lib/index.js +0 -32
- package/theme.d.ts +0 -2
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/features/theme/index.ts
|
|
23
|
+
var theme_exports = {};
|
|
24
|
+
__export(theme_exports, {
|
|
25
|
+
default: () => theme_default
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(theme_exports);
|
|
28
|
+
var import_constants = require("../../constants");
|
|
29
|
+
var import_fs = __toESM(require("fs"));
|
|
30
|
+
var import_path = __toESM(require("path"));
|
|
31
|
+
var import_plugin_utils = require("umi/plugin-utils");
|
|
32
|
+
var import_loader = __toESM(require("./loader"));
|
|
33
|
+
var DEFAULT_THEME_PATH = import_path.default.join(__dirname, "../../../theme-default");
|
|
34
|
+
function getPkgThemePath(api) {
|
|
35
|
+
const validDeps = Object.assign({}, api.pkg.dependencies, api.pkg.devDependencies);
|
|
36
|
+
const pkgThemeName = Object.keys(validDeps).find((pkg) => pkg.split("/").pop().startsWith(import_constants.THEME_PREFIX));
|
|
37
|
+
return pkgThemeName && import_path.default.basename(require.resolve(`${pkgThemeName}/package.json`, { paths: [api.cwd] }));
|
|
38
|
+
}
|
|
39
|
+
var theme_default = (api) => {
|
|
40
|
+
let localThemeData;
|
|
41
|
+
let originalThemeData;
|
|
42
|
+
const mdRouteFiles = [];
|
|
43
|
+
const themeMapKeys = [
|
|
44
|
+
"layouts",
|
|
45
|
+
"builtins",
|
|
46
|
+
"slots"
|
|
47
|
+
];
|
|
48
|
+
api.describe({ key: "dumi:theme" });
|
|
49
|
+
api.register({
|
|
50
|
+
key: "modifyAppData",
|
|
51
|
+
before: "appData",
|
|
52
|
+
async fn(memo) {
|
|
53
|
+
const defaultThemeData = (0, import_loader.default)(DEFAULT_THEME_PATH);
|
|
54
|
+
const pkgThemePath = getPkgThemePath(api);
|
|
55
|
+
const pkgThemeData = (0, import_plugin_utils.deepmerge)(defaultThemeData, pkgThemePath ? (0, import_loader.default)(pkgThemePath) : {});
|
|
56
|
+
originalThemeData = await api.applyPlugins({
|
|
57
|
+
key: "modifyTheme",
|
|
58
|
+
initialValue: pkgThemeData
|
|
59
|
+
});
|
|
60
|
+
api.service.themeData = originalThemeData;
|
|
61
|
+
const localThemePath = import_path.default.join(api.cwd, import_constants.LOCAL_THEME_DIR);
|
|
62
|
+
if (import_fs.default.existsSync(localThemePath)) {
|
|
63
|
+
localThemeData = (0, import_loader.default)(localThemePath);
|
|
64
|
+
api.service.themeData = (0, import_plugin_utils.deepmerge)(originalThemeData, localThemeData, {
|
|
65
|
+
clone: true
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
Object.assign(api.service.themeData.builtins, {
|
|
69
|
+
DumiDemo: {
|
|
70
|
+
specifier: "{ DumiDemo }",
|
|
71
|
+
source: "dumi/theme"
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return memo;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
api.modifyConfig((memo) => {
|
|
78
|
+
memo.alias["dumi/theme$"] = require.resolve("../../client/theme");
|
|
79
|
+
if (localThemeData) {
|
|
80
|
+
themeMapKeys.forEach((key) => {
|
|
81
|
+
Object.values(localThemeData[key] || {}).forEach((item) => {
|
|
82
|
+
memo.alias[`dumi/theme/${key}/${item.specifier}`] = item.source;
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
memo.alias["dumi/theme"] = "dumi/theme-original";
|
|
87
|
+
memo.alias["dumi/theme-original"] = import_path.default.join(api.paths.absTmpPath, "dumi/theme");
|
|
88
|
+
memo.alias["dumi/theme-default"] = DEFAULT_THEME_PATH;
|
|
89
|
+
memo.extraBabelIncludes ?? (memo.extraBabelIncludes = []);
|
|
90
|
+
memo.extraBabelIncludes.push(import_path.default.resolve(__dirname, "../../client/theme"));
|
|
91
|
+
return memo;
|
|
92
|
+
});
|
|
93
|
+
api.modifyRoutes((routes) => {
|
|
94
|
+
Object.values(routes).forEach((route) => {
|
|
95
|
+
if (route.file.endsWith(".md")) {
|
|
96
|
+
mdRouteFiles.push({ index: mdRouteFiles.length, file: route.file });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return routes;
|
|
100
|
+
});
|
|
101
|
+
api.onGenerateFiles(() => {
|
|
102
|
+
themeMapKeys.forEach((key) => {
|
|
103
|
+
Object.values(originalThemeData[key] || {}).forEach((item) => {
|
|
104
|
+
api.writeTmpFile({
|
|
105
|
+
noPluginDir: true,
|
|
106
|
+
path: `dumi/theme/${key}/${item.specifier}.ts`,
|
|
107
|
+
content: `export * from '${item.source}';
|
|
108
|
+
export { default } from '${item.source}';`
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
api.writeTmpFile({
|
|
113
|
+
noPluginDir: true,
|
|
114
|
+
path: "dumi/demos.ts",
|
|
115
|
+
content: import_plugin_utils.Mustache.render(`{{#mdRouteFiles}}
|
|
116
|
+
import demos{{{index}}} from '{{{file}}}?type=meta.demos';
|
|
117
|
+
{{/mdRouteFiles}}
|
|
118
|
+
|
|
119
|
+
export default {
|
|
120
|
+
{{#mdRouteFiles}}
|
|
121
|
+
...demos{{{index}}},
|
|
122
|
+
{{/mdRouteFiles}}
|
|
123
|
+
}`, { mdRouteFiles })
|
|
124
|
+
});
|
|
125
|
+
api.writeTmpFile({
|
|
126
|
+
noPluginDir: true,
|
|
127
|
+
path: "dumi/theme/ContextWrapper.tsx",
|
|
128
|
+
content: `import { Context } from 'dumi/theme';
|
|
129
|
+
import { useOutlet } from 'umi';
|
|
130
|
+
import demos from '../demos';
|
|
131
|
+
|
|
132
|
+
export default function DumiContextWrapper() {
|
|
133
|
+
const outlet = useOutlet();
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<Context.Provider value={{ demos }}>{outlet}</Context.Provider>
|
|
137
|
+
);
|
|
138
|
+
}`
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
143
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface IThemeComponent {
|
|
2
|
+
specifier: string;
|
|
3
|
+
source: string;
|
|
4
|
+
}
|
|
5
|
+
export interface IThemeLoadResult {
|
|
6
|
+
/**
|
|
7
|
+
* theme package name
|
|
8
|
+
*/
|
|
9
|
+
name: string;
|
|
10
|
+
/**
|
|
11
|
+
* theme package path
|
|
12
|
+
*/
|
|
13
|
+
path: string;
|
|
14
|
+
/**
|
|
15
|
+
* locale text data
|
|
16
|
+
*/
|
|
17
|
+
locales: {
|
|
18
|
+
[key: string]: Record<string, string>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* builtin components
|
|
22
|
+
*/
|
|
23
|
+
builtins: {
|
|
24
|
+
[key: string]: IThemeComponent;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* slots components
|
|
28
|
+
*/
|
|
29
|
+
slots: {
|
|
30
|
+
[key: string]: IThemeComponent;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* layout components
|
|
34
|
+
*/
|
|
35
|
+
layouts: {
|
|
36
|
+
/**
|
|
37
|
+
* apply for all routes
|
|
38
|
+
*/
|
|
39
|
+
GlobalLayout?: IThemeComponent;
|
|
40
|
+
/**
|
|
41
|
+
* apply for doc routes
|
|
42
|
+
*/
|
|
43
|
+
DocLayout?: IThemeComponent;
|
|
44
|
+
/**
|
|
45
|
+
* apply for demo routes /~demos/:id
|
|
46
|
+
*/
|
|
47
|
+
DemoLayout?: IThemeComponent;
|
|
48
|
+
} & Record<string, IThemeComponent>;
|
|
49
|
+
}
|
|
50
|
+
declare const _default: (dir: string) => IThemeLoadResult;
|
|
51
|
+
export default _default;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/features/theme/loader.ts
|
|
23
|
+
var loader_exports = {};
|
|
24
|
+
__export(loader_exports, {
|
|
25
|
+
default: () => loader_default
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(loader_exports);
|
|
28
|
+
var import_path = __toESM(require("path"));
|
|
29
|
+
var import_plugin_utils = require("umi/plugin-utils");
|
|
30
|
+
function getComponentMapFromDir(globExp, dir) {
|
|
31
|
+
return import_plugin_utils.glob.sync(globExp, { cwd: dir }).reduce((ret, file) => {
|
|
32
|
+
const specifier = import_path.default.basename(file.replace(/(\/index)?\.[a-z]+$/, ""));
|
|
33
|
+
ret[specifier] = {
|
|
34
|
+
specifier,
|
|
35
|
+
source: (0, import_plugin_utils.winPath)(import_path.default.join(dir, file))
|
|
36
|
+
};
|
|
37
|
+
return ret;
|
|
38
|
+
}, {});
|
|
39
|
+
}
|
|
40
|
+
function getLocaleMapFromDir(globExp, dir) {
|
|
41
|
+
return import_plugin_utils.glob.sync(globExp, { cwd: dir }).reduce((ret, file) => {
|
|
42
|
+
const locale = file.replace(/\.json$/, "");
|
|
43
|
+
ret[locale] = require(import_path.default.join(dir, file));
|
|
44
|
+
return ret;
|
|
45
|
+
}, {});
|
|
46
|
+
}
|
|
47
|
+
var loader_default = (dir) => {
|
|
48
|
+
return {
|
|
49
|
+
name: import_path.default.basename(dir),
|
|
50
|
+
path: dir,
|
|
51
|
+
locales: getLocaleMapFromDir("locales/*.json", dir),
|
|
52
|
+
builtins: getComponentMapFromDir("builtins/{*,*/index}.{js,jsx,ts,tsx}", dir),
|
|
53
|
+
slots: getComponentMapFromDir("slots/{*,*/index}.{js,jsx,ts,tsx}", dir),
|
|
54
|
+
layouts: getComponentMapFromDir("layouts/{GlobalLayout,DocLayout,DemoLayout}{.,/index.}{js,jsx,ts,tsx}", dir)
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
58
|
+
0 && (module.exports = {});
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/index.ts
|
|
20
|
+
var src_exports = {};
|
|
21
|
+
__export(src_exports, {
|
|
22
|
+
default: () => src_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(src_exports);
|
|
25
|
+
var src_default = "Hello dumi 2.0!";
|
|
26
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
27
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/loaders/demo/index.ts
|
|
20
|
+
var demo_exports = {};
|
|
21
|
+
__export(demo_exports, {
|
|
22
|
+
default: () => demoLoader
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(demo_exports);
|
|
25
|
+
function demoLoader(raw) {
|
|
26
|
+
const opts = this.getOptions();
|
|
27
|
+
const techStackName = new URLSearchParams(this.resourceQuery).get("techStack");
|
|
28
|
+
const techStack = opts.techStacks.find((t) => t.name === techStackName);
|
|
29
|
+
return techStack.transformCode(raw, {
|
|
30
|
+
type: "external",
|
|
31
|
+
fileAbsPath: this.resourcePath
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
35
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IThemeLoadResult } from "../../features/theme/loader";
|
|
2
|
+
import { type IMdTransformerOptions } from './transformer';
|
|
3
|
+
interface IMdLoaderDefaultModeOptions extends Omit<IMdTransformerOptions, 'fileAbsPath'> {
|
|
4
|
+
mode?: 'markdown';
|
|
5
|
+
builtins: IThemeLoadResult['builtins'];
|
|
6
|
+
}
|
|
7
|
+
interface IMdLoaderDemosModeOptions extends Omit<IMdLoaderDefaultModeOptions, 'builtins' | 'mode'> {
|
|
8
|
+
mode: 'demos';
|
|
9
|
+
}
|
|
10
|
+
export declare type IMdLoaderOptions = IMdLoaderDefaultModeOptions | IMdLoaderDemosModeOptions;
|
|
11
|
+
export default function mdLoader(this: any, raw: string): void;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/loaders/markdown/index.ts
|
|
23
|
+
var markdown_exports = {};
|
|
24
|
+
__export(markdown_exports, {
|
|
25
|
+
default: () => mdLoader
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(markdown_exports);
|
|
28
|
+
var import_plugin_utils = require("umi/plugin-utils");
|
|
29
|
+
var import_transformer = __toESM(require("./transformer"));
|
|
30
|
+
function mdLoader(raw) {
|
|
31
|
+
const opts = this.getOptions();
|
|
32
|
+
const cb = this.async();
|
|
33
|
+
(0, import_transformer.default)(raw, {
|
|
34
|
+
techStacks: opts.techStacks,
|
|
35
|
+
cwd: opts.cwd,
|
|
36
|
+
fileAbsPath: this.resourcePath
|
|
37
|
+
}).then((ret) => {
|
|
38
|
+
if (opts.mode === "demos") {
|
|
39
|
+
cb(null, import_plugin_utils.Mustache.render(`import React from 'react';
|
|
40
|
+
|
|
41
|
+
export default {
|
|
42
|
+
{{#demos}}
|
|
43
|
+
'{{{id}}}': {{{component}}},
|
|
44
|
+
{{/demos}}
|
|
45
|
+
}`, { demos: ret.meta.demos }));
|
|
46
|
+
} else {
|
|
47
|
+
cb(null, `${Object.values(opts.builtins).map((item) => `import ${item.specifier} from '${item.source}';`).join("\n")}
|
|
48
|
+
|
|
49
|
+
// export named function for fastRefresh
|
|
50
|
+
// ref: https://github.com/pmmmwh/react-refresh-webpack-plugin/blob/main/docs/TROUBLESHOOTING.md#edits-always-lead-to-full-reload
|
|
51
|
+
function DumiMarkdownContent() {
|
|
52
|
+
return ${ret.content};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default DumiMarkdownContent;`);
|
|
56
|
+
}
|
|
57
|
+
}, cb);
|
|
58
|
+
}
|
|
59
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
60
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { IDumiTechStack } from "../../../types";
|
|
2
|
+
declare module 'hast' {
|
|
3
|
+
interface Element {
|
|
4
|
+
JSXAttributes?: Array<{
|
|
5
|
+
type: 'JSXAttribute';
|
|
6
|
+
name: string;
|
|
7
|
+
value: string;
|
|
8
|
+
} | {
|
|
9
|
+
type: 'JSXSpreadAttribute';
|
|
10
|
+
argument: string;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export interface IMdTransformerOptions {
|
|
15
|
+
cwd: string;
|
|
16
|
+
fileAbsPath: string;
|
|
17
|
+
techStacks: IDumiTechStack[];
|
|
18
|
+
}
|
|
19
|
+
export interface IMdTransformerResult {
|
|
20
|
+
content: string;
|
|
21
|
+
meta: {
|
|
22
|
+
demos: {
|
|
23
|
+
id: string;
|
|
24
|
+
component: string;
|
|
25
|
+
}[];
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
declare const _default: (raw: string, opts: IMdTransformerOptions) => Promise<{
|
|
29
|
+
content: string;
|
|
30
|
+
meta: {
|
|
31
|
+
demos: {
|
|
32
|
+
id: string;
|
|
33
|
+
component: string;
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
}>;
|
|
37
|
+
export default _default;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/loaders/markdown/transformer/index.ts
|
|
23
|
+
var transformer_exports = {};
|
|
24
|
+
__export(transformer_exports, {
|
|
25
|
+
default: () => transformer_default
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(transformer_exports);
|
|
28
|
+
var import_rehypeDemo = __toESM(require("./rehypeDemo"));
|
|
29
|
+
var import_rehypeIsolation = __toESM(require("./rehypeIsolation"));
|
|
30
|
+
var import_rehypeJsxify = __toESM(require("./rehypeJsxify"));
|
|
31
|
+
var import_rehypeRaw = __toESM(require("./rehypeRaw"));
|
|
32
|
+
var import_rehypeStrip = __toESM(require("./rehypeStrip"));
|
|
33
|
+
var transformer_default = async (raw, opts) => {
|
|
34
|
+
const { unified } = await import("unified");
|
|
35
|
+
const { default: remarkParse } = await import("remark-parse");
|
|
36
|
+
const { default: remarkGfm } = await import("remark-gfm");
|
|
37
|
+
const { default: remarkRehype } = await import("remark-rehype");
|
|
38
|
+
const result = await unified().use(remarkParse).use(remarkGfm).use(remarkRehype, { allowDangerousHtml: true }).use(import_rehypeRaw.default).use(import_rehypeStrip.default).use(import_rehypeDemo.default, {
|
|
39
|
+
techStacks: opts.techStacks,
|
|
40
|
+
cwd: opts.cwd,
|
|
41
|
+
fileAbsPath: opts.fileAbsPath
|
|
42
|
+
}).use(import_rehypeIsolation.default).use(import_rehypeJsxify.default).process(raw);
|
|
43
|
+
return {
|
|
44
|
+
content: String(result.value),
|
|
45
|
+
meta: result.data
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
49
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Root } from 'hast';
|
|
2
|
+
import type { Transformer } from 'unified';
|
|
3
|
+
import type { IMdTransformerOptions } from '.';
|
|
4
|
+
declare type IRehypeDemoOptions = Pick<IMdTransformerOptions, 'techStacks' | 'cwd' | 'fileAbsPath'>;
|
|
5
|
+
export default function rehypeDemo(opts: IRehypeDemoOptions): Transformer<Root>;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/loaders/markdown/transformer/rehypeDemo.ts
|
|
23
|
+
var rehypeDemo_exports = {};
|
|
24
|
+
__export(rehypeDemo_exports, {
|
|
25
|
+
default: () => rehypeDemo
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(rehypeDemo_exports);
|
|
28
|
+
var import_utils = require("../../../utils");
|
|
29
|
+
var import_path = __toESM(require("path"));
|
|
30
|
+
var import_plugin_utils = require("umi/plugin-utils");
|
|
31
|
+
var visit;
|
|
32
|
+
var SKIP;
|
|
33
|
+
var toString;
|
|
34
|
+
(async () => {
|
|
35
|
+
({ visit, SKIP } = await import("unist-util-visit"));
|
|
36
|
+
({ toString } = await import("mdast-util-to-string"));
|
|
37
|
+
})();
|
|
38
|
+
function getCodeLang(node) {
|
|
39
|
+
var _a, _b;
|
|
40
|
+
let lang = "";
|
|
41
|
+
if (typeof ((_a = node.properties) == null ? void 0 : _a.src) === "string") {
|
|
42
|
+
lang = import_path.default.extname(node.properties.src).slice(1);
|
|
43
|
+
} else if (Array.isArray((_b = node.properties) == null ? void 0 : _b.className)) {
|
|
44
|
+
lang = String(node.properties.className[0]).replace("language-", "");
|
|
45
|
+
}
|
|
46
|
+
return lang;
|
|
47
|
+
}
|
|
48
|
+
function getCodeId(cwd, fileAbsPath, codeIndex, entityName) {
|
|
49
|
+
const prefix = entityName || (0, import_utils.getRoutePathFromFsPath)(import_path.default.relative(cwd, fileAbsPath)).replace(/\//g, "-");
|
|
50
|
+
return [prefix, "demo", String(codeIndex)].filter(Boolean).join("-");
|
|
51
|
+
}
|
|
52
|
+
function rehypeDemo(opts) {
|
|
53
|
+
return (tree, vFile) => {
|
|
54
|
+
let index = 0;
|
|
55
|
+
const demos = [];
|
|
56
|
+
visit(tree, "element", (node) => {
|
|
57
|
+
var _a;
|
|
58
|
+
if (["pre", "p"].includes(node.tagName) && node.children.length === 1 && node.children[0].type === "element" && node.children[0].tagName === "code") {
|
|
59
|
+
const codeNode = node.children[0];
|
|
60
|
+
const techStack = opts.techStacks.find((ts) => ts.isSupported(codeNode, getCodeLang(codeNode)));
|
|
61
|
+
const hasSrc = typeof ((_a = codeNode.properties) == null ? void 0 : _a.src) === "string";
|
|
62
|
+
const codeValue = toString(codeNode.children).trim();
|
|
63
|
+
if (techStack && (hasSrc || codeValue)) {
|
|
64
|
+
const codeId = getCodeId(opts.cwd, opts.fileAbsPath, index++);
|
|
65
|
+
if (hasSrc) {
|
|
66
|
+
const codeAbsPath = import_path.default.resolve(import_path.default.dirname(opts.fileAbsPath), codeNode.properties.src);
|
|
67
|
+
demos.push({
|
|
68
|
+
id: codeId,
|
|
69
|
+
component: `React.lazy(() => import('${(0, import_plugin_utils.winPath)(codeAbsPath)}?techStack=${techStack.name}'))`
|
|
70
|
+
});
|
|
71
|
+
} else {
|
|
72
|
+
demos.push({
|
|
73
|
+
id: codeId,
|
|
74
|
+
component: techStack.transformCode(codeValue, {
|
|
75
|
+
type: "code-block",
|
|
76
|
+
fileAbsPath: opts.fileAbsPath
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
node.tagName = "DumiDemo";
|
|
81
|
+
node.properties = { id: codeId };
|
|
82
|
+
node.children = [];
|
|
83
|
+
return SKIP;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
vFile.data.demos = demos;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
91
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/loaders/markdown/transformer/rehypeIsolation.ts
|
|
23
|
+
var rehypeIsolation_exports = {};
|
|
24
|
+
__export(rehypeIsolation_exports, {
|
|
25
|
+
default: () => rehypeIsolation
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(rehypeIsolation_exports);
|
|
28
|
+
var visit;
|
|
29
|
+
(async () => {
|
|
30
|
+
({ visit } = await import("unist-util-visit"));
|
|
31
|
+
})();
|
|
32
|
+
function isDemoNode(node) {
|
|
33
|
+
return node.tagName === "DumiDemo";
|
|
34
|
+
}
|
|
35
|
+
function rehypeIsolation() {
|
|
36
|
+
return (tree) => {
|
|
37
|
+
visit(tree, "root", (node) => {
|
|
38
|
+
node.children = node.children.reduce((nextChildren, current) => {
|
|
39
|
+
let prevSibling = nextChildren[nextChildren.length - 1];
|
|
40
|
+
if (isDemoNode(current)) {
|
|
41
|
+
nextChildren.push(current);
|
|
42
|
+
} else {
|
|
43
|
+
if (!prevSibling || isDemoNode(prevSibling)) {
|
|
44
|
+
prevSibling = {
|
|
45
|
+
type: "element",
|
|
46
|
+
tagName: "div",
|
|
47
|
+
properties: { className: "markdown" },
|
|
48
|
+
children: []
|
|
49
|
+
};
|
|
50
|
+
nextChildren.push(prevSibling);
|
|
51
|
+
}
|
|
52
|
+
prevSibling.children.push(current);
|
|
53
|
+
}
|
|
54
|
+
return nextChildren;
|
|
55
|
+
}, []);
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
60
|
+
0 && (module.exports = {});
|