dumi 2.0.0-alpha.0 → 2.0.0-alpha.2
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/dist/assetParsers/block.d.ts +17 -0
- package/dist/assetParsers/block.js +130 -0
- package/dist/client/theme-api/DumiDemo.d.ts +10 -0
- package/dist/client/theme-api/DumiDemo.js +16 -0
- package/dist/client/theme-api/DumiDemoGrid.d.ts +6 -0
- package/dist/client/theme-api/DumiDemoGrid.js +64 -0
- package/dist/client/theme-api/context.d.ts +10 -0
- package/dist/client/{theme → theme-api}/context.js +2 -1
- package/dist/client/theme-api/index.d.ts +6 -0
- package/dist/client/theme-api/index.js +6 -0
- package/dist/client/theme-api/types.d.ts +47 -0
- package/dist/client/theme-api/types.js +1 -0
- package/dist/client/theme-api/useMatchedRouteMeta.d.ts +5 -0
- package/dist/client/theme-api/useMatchedRouteMeta.js +55 -0
- package/dist/client/tsconfig.json +12 -0
- package/dist/features/compile.js +21 -3
- package/dist/features/configPlugins/index.js +2 -1
- package/dist/features/configPlugins/schema.js +8 -2
- package/dist/features/locales.d.ts +3 -0
- package/dist/features/locales.js +97 -0
- package/dist/features/meta.d.ts +3 -0
- package/dist/features/meta.js +77 -0
- package/dist/features/routes.js +27 -4
- package/dist/features/sideEffects/docSideEffectsWebpackPlugin.d.ts +14 -0
- package/dist/features/sideEffects/docSideEffectsWebpackPlugin.js +50 -0
- package/dist/features/sideEffects/index.d.ts +7 -0
- package/dist/features/sideEffects/index.js +47 -0
- package/dist/features/theme/index.js +13 -31
- package/dist/features/theme/loader.js +3 -3
- package/dist/index.d.ts +8 -2
- package/dist/index.js +16 -3
- package/dist/loaders/markdown/index.d.ts +1 -1
- package/dist/loaders/markdown/index.js +33 -7
- package/dist/loaders/markdown/transformer/index.d.ts +20 -13
- package/dist/loaders/markdown/transformer/index.js +29 -3
- package/dist/loaders/markdown/transformer/rehypeDemo.d.ts +1 -1
- package/dist/loaders/markdown/transformer/rehypeDemo.js +160 -29
- package/dist/loaders/markdown/transformer/rehypeEmbed.d.ts +4 -0
- package/dist/loaders/markdown/transformer/rehypeEmbed.js +75 -0
- package/dist/loaders/markdown/transformer/rehypeIsolation.js +1 -1
- package/dist/loaders/markdown/transformer/rehypeJsxify.js +1 -0
- package/dist/loaders/markdown/transformer/rehypeRaw.js +9 -1
- package/dist/loaders/markdown/transformer/remarkMeta.d.ts +3 -0
- package/dist/loaders/markdown/transformer/remarkMeta.js +44 -0
- package/dist/preset.js +4 -1
- package/dist/types.d.ts +17 -4
- package/dist/utils.d.ts +11 -0
- package/dist/utils.js +25 -1
- package/package.json +31 -13
- package/theme-default/builtins/Previewer.d.ts +4 -0
- package/theme-default/builtins/Previewer.js +11 -0
- package/theme-default/layouts/DocLayout/index.d.ts +3 -0
- package/theme-default/layouts/DocLayout/index.js +16 -0
- package/theme-default/locales/en-US.json +3 -0
- package/theme-default/locales/zh-CN.json +3 -0
- package/theme-default/slots/Content/index.d.ts +5 -0
- package/theme-default/slots/Content/index.js +13 -0
- package/theme-default/slots/Header/index.d.ts +3 -0
- package/theme-default/slots/Header/index.js +17 -0
- package/theme-default/slots/Logo/index.d.ts +3 -0
- package/theme-default/slots/Logo/index.js +7 -0
- package/theme-default/slots/Navbar/index.d.ts +3 -0
- package/theme-default/slots/Navbar/index.js +7 -0
- package/theme-default/slots/SearchBar/index.d.ts +3 -0
- package/theme-default/slots/SearchBar/index.js +9 -0
- package/theme-default/slots/Sidebar/index.d.ts +3 -0
- package/theme-default/slots/Sidebar/index.js +14 -0
- package/theme.d.ts +1 -0
- package/dist/client/theme/DumiDemo.d.ts +0 -4
- package/dist/client/theme/DumiDemo.js +0 -9
- package/dist/client/theme/context.d.ts +0 -5
- package/dist/client/theme/index.d.ts +0 -2
- package/dist/client/theme/index.js +0 -2
|
@@ -0,0 +1,77 @@
|
|
|
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/features/meta.ts
|
|
20
|
+
var meta_exports = {};
|
|
21
|
+
__export(meta_exports, {
|
|
22
|
+
default: () => meta_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(meta_exports);
|
|
25
|
+
var import_plugin_utils = require("umi/plugin-utils");
|
|
26
|
+
var meta_default = (api) => {
|
|
27
|
+
const mdRouteFiles = [];
|
|
28
|
+
api.modifyRoutes((routes) => {
|
|
29
|
+
Object.values(routes).forEach((route) => {
|
|
30
|
+
if (route.file.endsWith(".md")) {
|
|
31
|
+
mdRouteFiles.push({
|
|
32
|
+
index: mdRouteFiles.length,
|
|
33
|
+
file: route.file,
|
|
34
|
+
id: route.id
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return routes;
|
|
39
|
+
});
|
|
40
|
+
api.onGenerateFiles(() => {
|
|
41
|
+
api.writeTmpFile({
|
|
42
|
+
noPluginDir: true,
|
|
43
|
+
path: "dumi/meta/index.ts",
|
|
44
|
+
content: import_plugin_utils.Mustache.render(`{{#mdRouteFiles}}
|
|
45
|
+
import { demos as d{{{index}}}, frontmatter as fm{{{index}}} } from '{{{file}}}?type=meta';
|
|
46
|
+
{{/mdRouteFiles}}
|
|
47
|
+
|
|
48
|
+
export const demos = {
|
|
49
|
+
{{#mdRouteFiles}}
|
|
50
|
+
...d{{{index}}},
|
|
51
|
+
{{/mdRouteFiles}}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const routesMeta = {
|
|
55
|
+
{{#mdRouteFiles}}
|
|
56
|
+
'{{{id}}}': fm{{{index}}},
|
|
57
|
+
{{/mdRouteFiles}}
|
|
58
|
+
}`, { mdRouteFiles })
|
|
59
|
+
});
|
|
60
|
+
api.writeTmpFile({
|
|
61
|
+
noPluginDir: true,
|
|
62
|
+
path: "dumi/meta/runtime.ts",
|
|
63
|
+
content: `import { routesMeta } from '.';
|
|
64
|
+
export const patchRoutes = ({ routes }) => {
|
|
65
|
+
Object.values(routes).forEach((route) => {
|
|
66
|
+
if (routesMeta[route.id]) {
|
|
67
|
+
route.meta = { ...route.meta, ...routesMeta[route.id] };
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
`
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
api.addRuntimePlugin(() => "@@/dumi/meta/runtime.ts");
|
|
75
|
+
};
|
|
76
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
77
|
+
0 && (module.exports = {});
|
package/dist/features/routes.js
CHANGED
|
@@ -26,10 +26,20 @@ __export(routes_exports, {
|
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(routes_exports);
|
|
28
28
|
var import_core = require("@umijs/core");
|
|
29
|
+
var import_utils = require("@umijs/core/dist/route/utils");
|
|
29
30
|
var import_path = __toESM(require("path"));
|
|
30
31
|
var import_pluralize = require("pluralize");
|
|
31
32
|
var import_plugin_utils = require("umi/plugin-utils");
|
|
32
33
|
var CTX_LAYOUT_ID = "dumi-context-layout";
|
|
34
|
+
function localizeUmiRoute(route, locales) {
|
|
35
|
+
const locale = locales.find((locale2) => route.path.endsWith(`/${locale2.id}`) && import_path.default.parse(route.file).name.endsWith(`.${locale2.id}`));
|
|
36
|
+
if (locale) {
|
|
37
|
+
const base = !("base" in locale) || locale.base === "/" ? "" : locale.base.replace(/^(\/)(.+)$/, "$2$1");
|
|
38
|
+
const suffix = "suffix" in locale ? locale.suffix : "";
|
|
39
|
+
route.path = `${base}${route.path.replace(new RegExp(`/${locale.id}$`), "").replace(/(\/index|\/README)$/, "")}${suffix}`;
|
|
40
|
+
route.absPath = route.path !== "/" ? `/${route.path}` : route.path;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
33
43
|
var routes_default = (api) => {
|
|
34
44
|
api.describe({ key: "dumi:routes" });
|
|
35
45
|
api.modifyConfig((memo) => {
|
|
@@ -38,6 +48,17 @@ var routes_default = (api) => {
|
|
|
38
48
|
};
|
|
39
49
|
return memo;
|
|
40
50
|
});
|
|
51
|
+
api.modifyDefaultConfig((memo) => {
|
|
52
|
+
if (api.userConfig.resolve) {
|
|
53
|
+
const keys = ["docDirs", "entityDirs"];
|
|
54
|
+
keys.forEach((key) => {
|
|
55
|
+
var _a;
|
|
56
|
+
if (((_a = api.userConfig.resolve[key]) == null ? void 0 : _a.length) === 0)
|
|
57
|
+
memo.resolve[key] = [];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return memo;
|
|
61
|
+
});
|
|
41
62
|
api.modifyRoutes((oRoutes) => {
|
|
42
63
|
const routes = Object.values(oRoutes).reduce((ret, route) => {
|
|
43
64
|
if (route.isLayout) {
|
|
@@ -71,22 +92,24 @@ var routes_default = (api) => {
|
|
|
71
92
|
route.id = `${dir}/${key}`;
|
|
72
93
|
route.parentId = docLayoutId;
|
|
73
94
|
route.file = import_path.default.resolve(base, route.file);
|
|
95
|
+
localizeUmiRoute(route, api.config.locales);
|
|
74
96
|
routes[route.id] = route;
|
|
75
97
|
});
|
|
76
98
|
});
|
|
77
99
|
entityDirs.forEach(({ type, dir }) => {
|
|
78
100
|
const base = import_path.default.join(api.cwd, dir);
|
|
79
|
-
const entityFiles = import_plugin_utils.glob.sync("{*,*/index,*/README}.md", { cwd: base });
|
|
101
|
+
const entityFiles = import_plugin_utils.glob.sync("{*,*/index,*/index.*,*/README,*/README.*}.md", { cwd: base });
|
|
80
102
|
entityFiles.forEach((file) => {
|
|
81
|
-
const routePath = (0, import_plugin_utils.winPath)(import_path.default.join((0, import_pluralize.plural)(type), file)).replace(/(\/index|\/README)?\.md$/, "");
|
|
82
|
-
const routeId =
|
|
103
|
+
const routePath = (0, import_plugin_utils.winPath)(import_path.default.join((0, import_pluralize.plural)(type), file)).replace(/(\/index|\/README)?\.md$/, "").replace(/\./g, "/");
|
|
104
|
+
const routeId = (0, import_utils.createRouteId)(file);
|
|
83
105
|
routes[routeId] = {
|
|
84
106
|
id: routeId,
|
|
85
107
|
path: routePath,
|
|
86
|
-
absPath: routePath
|
|
108
|
+
absPath: `/${routePath}`,
|
|
87
109
|
parentId: docLayoutId,
|
|
88
110
|
file: import_path.default.resolve(base, file)
|
|
89
111
|
};
|
|
112
|
+
localizeUmiRoute(routes[routeId], api.config.locales);
|
|
90
113
|
});
|
|
91
114
|
});
|
|
92
115
|
return routes;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { webpack } from 'umi';
|
|
2
|
+
interface IOpts {
|
|
3
|
+
sideEffects: string[];
|
|
4
|
+
pkgPath: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* webpack plugin for add extra sideEffects item if user configured sideEffects in package.json
|
|
8
|
+
*/
|
|
9
|
+
export default class docSideEffectsWebpackPlugin {
|
|
10
|
+
opts: IOpts;
|
|
11
|
+
constructor(opts: IOpts);
|
|
12
|
+
apply(compiler: webpack.Compiler): void;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
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/sideEffects/docSideEffectsWebpackPlugin.ts
|
|
23
|
+
var docSideEffectsWebpackPlugin_exports = {};
|
|
24
|
+
__export(docSideEffectsWebpackPlugin_exports, {
|
|
25
|
+
default: () => docSideEffectsWebpackPlugin
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(docSideEffectsWebpackPlugin_exports);
|
|
28
|
+
var import_path = __toESM(require("path"));
|
|
29
|
+
var docSideEffectsWebpackPlugin = class {
|
|
30
|
+
constructor(opts) {
|
|
31
|
+
this.opts = opts;
|
|
32
|
+
}
|
|
33
|
+
apply(compiler) {
|
|
34
|
+
compiler.hooks.normalModuleFactory.tap(this.constructor.name, (normalModuleFactory) => {
|
|
35
|
+
normalModuleFactory.hooks.afterResolve.tap(this.constructor.name, (data) => {
|
|
36
|
+
var _a;
|
|
37
|
+
const createData = data.createData || data;
|
|
38
|
+
const resourceResolveData = createData.resourceResolveData;
|
|
39
|
+
const sideEffectsFlag = (_a = resourceResolveData == null ? void 0 : resourceResolveData.descriptionFileData) == null ? void 0 : _a.sideEffects;
|
|
40
|
+
if (resourceResolveData && (sideEffectsFlag === false || Array.isArray(sideEffectsFlag)) && import_path.default.normalize(resourceResolveData.descriptionFilePath) === this.opts.pkgPath) {
|
|
41
|
+
const list = new Set(sideEffectsFlag || []);
|
|
42
|
+
this.opts.sideEffects.forEach((item) => list.add(item));
|
|
43
|
+
resourceResolveData.descriptionFileData.sideEffects = Array.from(list);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
50
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IApi } from 'umi';
|
|
2
|
+
/**
|
|
3
|
+
* plugin for register the doc side-effects webpack plugin
|
|
4
|
+
* to avoid tree-shaking for .umi & .dumi/theme directory if package.json has sideEffects: false
|
|
5
|
+
*/
|
|
6
|
+
declare const _default: (api: IApi) => void;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,47 @@
|
|
|
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/sideEffects/index.ts
|
|
23
|
+
var sideEffects_exports = {};
|
|
24
|
+
__export(sideEffects_exports, {
|
|
25
|
+
default: () => sideEffects_default
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(sideEffects_exports);
|
|
28
|
+
var import_path = __toESM(require("path"));
|
|
29
|
+
var import_plugin_utils = require("umi/plugin-utils");
|
|
30
|
+
var import_docSideEffectsWebpackPlugin = __toESM(require("./docSideEffectsWebpackPlugin"));
|
|
31
|
+
var sideEffects_default = (api) => {
|
|
32
|
+
api.describe({ key: "dumi:sideEffects" });
|
|
33
|
+
api.chainWebpack((memo) => {
|
|
34
|
+
memo.plugin("docSideEffects").use(import_docSideEffectsWebpackPlugin.default, [
|
|
35
|
+
{
|
|
36
|
+
sideEffects: [
|
|
37
|
+
(0, import_plugin_utils.winPath)(import_path.default.relative(api.cwd, import_path.default.join(api.paths.absTmpPath, "**"))),
|
|
38
|
+
".dumi/theme/**"
|
|
39
|
+
],
|
|
40
|
+
pkgPath: import_path.default.join(api.cwd, "package.json")
|
|
41
|
+
}
|
|
42
|
+
]);
|
|
43
|
+
return memo;
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {});
|
|
@@ -37,14 +37,14 @@ function getPkgThemePath(api) {
|
|
|
37
37
|
return pkgThemeName && import_path.default.basename(require.resolve(`${pkgThemeName}/package.json`, { paths: [api.cwd] }));
|
|
38
38
|
}
|
|
39
39
|
var theme_default = (api) => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const mdRouteFiles = [];
|
|
40
|
+
const localThemePath = import_path.default.join(api.cwd, import_constants.LOCAL_THEME_DIR);
|
|
41
|
+
const localThemeData = import_fs.default.existsSync(localThemePath) && (0, import_loader.default)(localThemePath);
|
|
43
42
|
const themeMapKeys = [
|
|
44
43
|
"layouts",
|
|
45
44
|
"builtins",
|
|
46
45
|
"slots"
|
|
47
46
|
];
|
|
47
|
+
let originalThemeData;
|
|
48
48
|
api.describe({ key: "dumi:theme" });
|
|
49
49
|
api.register({
|
|
50
50
|
key: "modifyAppData",
|
|
@@ -58,9 +58,7 @@ var theme_default = (api) => {
|
|
|
58
58
|
initialValue: pkgThemeData
|
|
59
59
|
});
|
|
60
60
|
api.service.themeData = originalThemeData;
|
|
61
|
-
|
|
62
|
-
if (import_fs.default.existsSync(localThemePath)) {
|
|
63
|
-
localThemeData = (0, import_loader.default)(localThemePath);
|
|
61
|
+
if (localThemeData) {
|
|
64
62
|
api.service.themeData = (0, import_plugin_utils.deepmerge)(originalThemeData, localThemeData, {
|
|
65
63
|
clone: true
|
|
66
64
|
});
|
|
@@ -69,13 +67,17 @@ var theme_default = (api) => {
|
|
|
69
67
|
DumiDemo: {
|
|
70
68
|
specifier: "{ DumiDemo }",
|
|
71
69
|
source: "dumi/theme"
|
|
70
|
+
},
|
|
71
|
+
DumiDemoGrid: {
|
|
72
|
+
specifier: "{ DumiDemoGrid }",
|
|
73
|
+
source: "dumi/theme"
|
|
72
74
|
}
|
|
73
75
|
});
|
|
74
76
|
return memo;
|
|
75
77
|
}
|
|
76
78
|
});
|
|
77
79
|
api.modifyConfig((memo) => {
|
|
78
|
-
memo.alias["dumi/theme$"] = require.resolve("../../client/theme");
|
|
80
|
+
memo.alias["dumi/theme$"] = require.resolve("../../client/theme-api");
|
|
79
81
|
if (localThemeData) {
|
|
80
82
|
themeMapKeys.forEach((key) => {
|
|
81
83
|
Object.values(localThemeData[key] || {}).forEach((item) => {
|
|
@@ -87,17 +89,9 @@ var theme_default = (api) => {
|
|
|
87
89
|
memo.alias["dumi/theme-original"] = import_path.default.join(api.paths.absTmpPath, "dumi/theme");
|
|
88
90
|
memo.alias["dumi/theme-default"] = DEFAULT_THEME_PATH;
|
|
89
91
|
memo.extraBabelIncludes ?? (memo.extraBabelIncludes = []);
|
|
90
|
-
memo.extraBabelIncludes.push(import_path.default.resolve(__dirname, "../../client/theme"));
|
|
92
|
+
memo.extraBabelIncludes.push(import_path.default.resolve(__dirname, "../../client/theme-api"));
|
|
91
93
|
return memo;
|
|
92
94
|
});
|
|
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
95
|
api.onGenerateFiles(() => {
|
|
102
96
|
themeMapKeys.forEach((key) => {
|
|
103
97
|
Object.values(originalThemeData[key] || {}).forEach((item) => {
|
|
@@ -109,31 +103,19 @@ export { default } from '${item.source}';`
|
|
|
109
103
|
});
|
|
110
104
|
});
|
|
111
105
|
});
|
|
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
106
|
api.writeTmpFile({
|
|
126
107
|
noPluginDir: true,
|
|
127
108
|
path: "dumi/theme/ContextWrapper.tsx",
|
|
128
109
|
content: `import { Context } from 'dumi/theme';
|
|
129
110
|
import { useOutlet } from 'umi';
|
|
130
|
-
import demos from '../
|
|
111
|
+
import { demos } from '../meta';
|
|
112
|
+
import { locales } from '../locales/config';
|
|
131
113
|
|
|
132
114
|
export default function DumiContextWrapper() {
|
|
133
115
|
const outlet = useOutlet();
|
|
134
116
|
|
|
135
117
|
return (
|
|
136
|
-
<Context.Provider value={{ demos }}>{outlet}</Context.Provider>
|
|
118
|
+
<Context.Provider value={{ demos, locales }}>{outlet}</Context.Provider>
|
|
137
119
|
);
|
|
138
120
|
}`
|
|
139
121
|
});
|
|
@@ -39,7 +39,7 @@ function getComponentMapFromDir(globExp, dir) {
|
|
|
39
39
|
}
|
|
40
40
|
function getLocaleMapFromDir(globExp, dir) {
|
|
41
41
|
return import_plugin_utils.glob.sync(globExp, { cwd: dir }).reduce((ret, file) => {
|
|
42
|
-
const locale = file.replace(/\.json$/, "");
|
|
42
|
+
const locale = import_path.default.basename(file.replace(/\.json$/, ""));
|
|
43
43
|
ret[locale] = require(import_path.default.join(dir, file));
|
|
44
44
|
return ret;
|
|
45
45
|
}, {});
|
|
@@ -49,8 +49,8 @@ var loader_default = (dir) => {
|
|
|
49
49
|
name: import_path.default.basename(dir),
|
|
50
50
|
path: dir,
|
|
51
51
|
locales: getLocaleMapFromDir("locales/*.json", dir),
|
|
52
|
-
builtins: getComponentMapFromDir("builtins/{
|
|
53
|
-
slots: getComponentMapFromDir("slots/{
|
|
52
|
+
builtins: getComponentMapFromDir("builtins/{!(*.d),*/index}.{js,jsx,ts,tsx}", dir),
|
|
53
|
+
slots: getComponentMapFromDir("slots/{!(*.d),*/index}.{js,jsx,ts,tsx}", dir),
|
|
54
54
|
layouts: getComponentMapFromDir("layouts/{GlobalLayout,DocLayout,DemoLayout}{.,/index.}{js,jsx,ts,tsx}", dir)
|
|
55
55
|
};
|
|
56
56
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { IDumiConfig } from "./types";
|
|
2
|
+
declare let unistUtilVisit: typeof import('unist-util-visit');
|
|
3
|
+
export { IApi } from "./types";
|
|
4
|
+
export type { Root as HastRoot } from 'hast';
|
|
5
|
+
export * from 'umi';
|
|
6
|
+
export type { Plugin as UnifiedPlugin, Transformer as UnifiedTransformer, } from 'unified';
|
|
7
|
+
export { unistUtilVisit };
|
|
8
|
+
export declare const defineConfig: (config: IDumiConfig) => IDumiConfig;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
7
|
var __export = (target, all) => {
|
|
6
8
|
for (var name in all)
|
|
@@ -14,14 +16,25 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
14
16
|
}
|
|
15
17
|
return to;
|
|
16
18
|
};
|
|
19
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
+
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));
|
|
17
21
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
22
|
|
|
19
23
|
// src/index.ts
|
|
20
24
|
var src_exports = {};
|
|
21
25
|
__export(src_exports, {
|
|
22
|
-
|
|
26
|
+
defineConfig: () => defineConfig,
|
|
27
|
+
unistUtilVisit: () => unistUtilVisit
|
|
23
28
|
});
|
|
24
29
|
module.exports = __toCommonJS(src_exports);
|
|
25
|
-
|
|
30
|
+
__reExport(src_exports, require("umi"), module.exports);
|
|
31
|
+
var unistUtilVisit;
|
|
32
|
+
(async () => {
|
|
33
|
+
unistUtilVisit = await import("unist-util-visit");
|
|
34
|
+
})();
|
|
35
|
+
var defineConfig = (config) => config;
|
|
26
36
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
|
-
0 && (module.exports = {
|
|
37
|
+
0 && (module.exports = {
|
|
38
|
+
defineConfig,
|
|
39
|
+
unistUtilVisit
|
|
40
|
+
});
|
|
@@ -5,7 +5,7 @@ interface IMdLoaderDefaultModeOptions extends Omit<IMdTransformerOptions, 'fileA
|
|
|
5
5
|
builtins: IThemeLoadResult['builtins'];
|
|
6
6
|
}
|
|
7
7
|
interface IMdLoaderDemosModeOptions extends Omit<IMdLoaderDefaultModeOptions, 'builtins' | 'mode'> {
|
|
8
|
-
mode: '
|
|
8
|
+
mode: 'meta';
|
|
9
9
|
}
|
|
10
10
|
export declare type IMdLoaderOptions = IMdLoaderDefaultModeOptions | IMdLoaderDemosModeOptions;
|
|
11
11
|
export default function mdLoader(this: any, raw: string): void;
|
|
@@ -25,26 +25,52 @@ __export(markdown_exports, {
|
|
|
25
25
|
default: () => mdLoader
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(markdown_exports);
|
|
28
|
+
var import_utils = require("../../utils");
|
|
28
29
|
var import_plugin_utils = require("umi/plugin-utils");
|
|
29
30
|
var import_transformer = __toESM(require("./transformer"));
|
|
30
31
|
function mdLoader(raw) {
|
|
31
32
|
const opts = this.getOptions();
|
|
32
33
|
const cb = this.async();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
let content = raw;
|
|
35
|
+
const params = new URLSearchParams(this.resourceQuery);
|
|
36
|
+
const range = params.get("range");
|
|
37
|
+
const regexp = params.get("regexp");
|
|
38
|
+
if (range) {
|
|
39
|
+
content = (0, import_utils.getFileRangeLines)(content, range);
|
|
40
|
+
} else if (regexp) {
|
|
41
|
+
content = (0, import_utils.getFileContentByRegExp)(content, regexp, this.resourcePath);
|
|
42
|
+
}
|
|
43
|
+
(0, import_transformer.default)(content, {
|
|
44
|
+
...import_plugin_utils.lodash.omit(opts, ["mode", "builtins"]),
|
|
36
45
|
fileAbsPath: this.resourcePath
|
|
37
46
|
}).then((ret) => {
|
|
38
|
-
if (opts.mode === "
|
|
47
|
+
if (opts.mode === "meta") {
|
|
48
|
+
const { demos, frontmatter = {} } = ret.meta;
|
|
39
49
|
cb(null, import_plugin_utils.Mustache.render(`import React from 'react';
|
|
40
50
|
|
|
41
|
-
export
|
|
51
|
+
export const demos = {
|
|
42
52
|
{{#demos}}
|
|
43
|
-
'{{{id}}}': {
|
|
53
|
+
'{{{id}}}': {
|
|
54
|
+
component: {{{component}}},
|
|
55
|
+
asset: {{{renderAsset}}}
|
|
56
|
+
},
|
|
44
57
|
{{/demos}}
|
|
45
|
-
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const frontmatter = {{{frontmatter}}};
|
|
61
|
+
`, {
|
|
62
|
+
demos,
|
|
63
|
+
frontmatter: JSON.stringify(frontmatter),
|
|
64
|
+
renderAsset: function renderAsset() {
|
|
65
|
+
Object.keys(this.sources).forEach((file) => {
|
|
66
|
+
this.asset.dependencies[file].value = `{{{require('!!raw-loader!${this.sources[file]}?raw').default}}}`;
|
|
67
|
+
});
|
|
68
|
+
return JSON.stringify(this.asset, null, 2).replace(/"{{{|}}}"/g, "");
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
46
71
|
} else {
|
|
47
72
|
cb(null, `${Object.values(opts.builtins).map((item) => `import ${item.specifier} from '${item.source}';`).join("\n")}
|
|
73
|
+
import React from 'react';
|
|
48
74
|
|
|
49
75
|
// export named function for fastRefresh
|
|
50
76
|
// ref: https://github.com/pmmmwh/react-refresh-webpack-plugin/blob/main/docs/TROUBLESHOOTING.md#edits-always-lead-to-full-reload
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IParsedBlockAsset } from "../../../assetParsers/block";
|
|
2
|
+
import type { IRouteMeta } from "../../../client/theme-api";
|
|
3
|
+
import type { IDumiConfig, IDumiTechStack } from "../../../types";
|
|
4
|
+
import type { DataMap } from 'vfile';
|
|
2
5
|
declare module 'hast' {
|
|
3
6
|
interface Element {
|
|
4
7
|
JSXAttributes?: Array<{
|
|
@@ -11,27 +14,31 @@ declare module 'hast' {
|
|
|
11
14
|
}>;
|
|
12
15
|
}
|
|
13
16
|
}
|
|
17
|
+
declare module 'vfile' {
|
|
18
|
+
interface DataMap {
|
|
19
|
+
demos: {
|
|
20
|
+
id: string;
|
|
21
|
+
component: string;
|
|
22
|
+
asset: IParsedBlockAsset['asset'];
|
|
23
|
+
sources: IParsedBlockAsset['sources'];
|
|
24
|
+
}[];
|
|
25
|
+
frontmatter: IRouteMeta;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
14
28
|
export interface IMdTransformerOptions {
|
|
15
29
|
cwd: string;
|
|
16
30
|
fileAbsPath: string;
|
|
17
31
|
techStacks: IDumiTechStack[];
|
|
32
|
+
codeBlockMode: IDumiConfig['resolve']['codeBlockMode'];
|
|
33
|
+
extraRemarkPlugins?: IDumiConfig['extraRemarkPlugins'];
|
|
34
|
+
extraRehypePlugins?: IDumiConfig['extraRehypePlugins'];
|
|
18
35
|
}
|
|
19
36
|
export interface IMdTransformerResult {
|
|
20
37
|
content: string;
|
|
21
|
-
meta:
|
|
22
|
-
demos: {
|
|
23
|
-
id: string;
|
|
24
|
-
component: string;
|
|
25
|
-
}[];
|
|
26
|
-
};
|
|
38
|
+
meta: DataMap;
|
|
27
39
|
}
|
|
28
40
|
declare const _default: (raw: string, opts: IMdTransformerOptions) => Promise<{
|
|
29
41
|
content: string;
|
|
30
|
-
meta:
|
|
31
|
-
demos: {
|
|
32
|
-
id: string;
|
|
33
|
-
component: string;
|
|
34
|
-
}[];
|
|
35
|
-
};
|
|
42
|
+
meta: import("vfile").Data;
|
|
36
43
|
}>;
|
|
37
44
|
export default _default;
|
|
@@ -26,20 +26,46 @@ __export(transformer_exports, {
|
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(transformer_exports);
|
|
28
28
|
var import_rehypeDemo = __toESM(require("./rehypeDemo"));
|
|
29
|
+
var import_rehypeEmbed = __toESM(require("./rehypeEmbed"));
|
|
29
30
|
var import_rehypeIsolation = __toESM(require("./rehypeIsolation"));
|
|
30
31
|
var import_rehypeJsxify = __toESM(require("./rehypeJsxify"));
|
|
31
32
|
var import_rehypeRaw = __toESM(require("./rehypeRaw"));
|
|
32
33
|
var import_rehypeStrip = __toESM(require("./rehypeStrip"));
|
|
34
|
+
var import_remarkMeta = __toESM(require("./remarkMeta"));
|
|
35
|
+
function applyUnifiedPlugin(opts) {
|
|
36
|
+
const [plugin, options] = Array.isArray(opts.plugin) ? opts.plugin : [opts.plugin];
|
|
37
|
+
const mod = typeof plugin === "function" ? plugin : require(require.resolve(plugin, { paths: [opts.cwd] }));
|
|
38
|
+
const fn = mod.default || mod;
|
|
39
|
+
opts.processor.use(fn, options);
|
|
40
|
+
}
|
|
33
41
|
var transformer_default = async (raw, opts) => {
|
|
42
|
+
var _a, _b;
|
|
34
43
|
const { unified } = await import("unified");
|
|
35
44
|
const { default: remarkParse } = await import("remark-parse");
|
|
45
|
+
const { default: remarkFrontmatter } = await import("remark-frontmatter");
|
|
46
|
+
const { default: remarkBreaks } = await import("remark-breaks");
|
|
36
47
|
const { default: remarkGfm } = await import("remark-gfm");
|
|
37
48
|
const { default: remarkRehype } = await import("remark-rehype");
|
|
38
|
-
const
|
|
49
|
+
const processor = unified().use(remarkParse).use(remarkFrontmatter).use(import_remarkMeta.default).use(remarkBreaks).use(remarkGfm);
|
|
50
|
+
(_a = opts.extraRemarkPlugins) == null ? void 0 : _a.forEach((plugin) => applyUnifiedPlugin({
|
|
51
|
+
plugin,
|
|
52
|
+
processor,
|
|
53
|
+
cwd: opts.cwd
|
|
54
|
+
}));
|
|
55
|
+
processor.use(remarkRehype, { allowDangerousHtml: true }).use(import_rehypeRaw.default).use(import_rehypeStrip.default).use(import_rehypeEmbed.default, {
|
|
56
|
+
fileAbsPath: opts.fileAbsPath
|
|
57
|
+
}).use(import_rehypeDemo.default, {
|
|
39
58
|
techStacks: opts.techStacks,
|
|
40
59
|
cwd: opts.cwd,
|
|
41
|
-
fileAbsPath: opts.fileAbsPath
|
|
42
|
-
|
|
60
|
+
fileAbsPath: opts.fileAbsPath,
|
|
61
|
+
codeBlockMode: opts.codeBlockMode
|
|
62
|
+
}).use(import_rehypeIsolation.default);
|
|
63
|
+
(_b = opts.extraRehypePlugins) == null ? void 0 : _b.forEach((plugin) => applyUnifiedPlugin({
|
|
64
|
+
plugin,
|
|
65
|
+
processor,
|
|
66
|
+
cwd: opts.cwd
|
|
67
|
+
}));
|
|
68
|
+
const result = await processor.use(import_rehypeJsxify.default).process(raw);
|
|
43
69
|
return {
|
|
44
70
|
content: String(result.value),
|
|
45
71
|
meta: result.data
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Root } from 'hast';
|
|
2
2
|
import type { Transformer } from 'unified';
|
|
3
3
|
import type { IMdTransformerOptions } from '.';
|
|
4
|
-
declare type IRehypeDemoOptions = Pick<IMdTransformerOptions, 'techStacks' | 'cwd' | 'fileAbsPath'>;
|
|
4
|
+
declare type IRehypeDemoOptions = Pick<IMdTransformerOptions, 'techStacks' | 'cwd' | 'fileAbsPath' | 'codeBlockMode'>;
|
|
5
5
|
export default function rehypeDemo(opts: IRehypeDemoOptions): Transformer<Root>;
|
|
6
6
|
export {};
|