dumi 2.0.0-alpha.1 → 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.js +1 -1
- package/dist/client/theme-api/DumiDemoGrid.js +56 -6
- package/dist/client/theme-api/context.d.ts +2 -6
- package/dist/client/theme-api/index.d.ts +1 -0
- package/dist/client/theme-api/index.js +2 -1
- package/dist/client/theme-api/types.d.ts +27 -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 +2 -0
- package/dist/features/compile.js +20 -3
- package/dist/features/configPlugins/index.js +2 -1
- package/dist/features/configPlugins/schema.js +8 -2
- package/dist/features/locales.js +19 -7
- package/dist/features/meta.d.ts +3 -0
- package/dist/features/meta.js +77 -0
- package/dist/features/routes.js +17 -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 +5 -28
- 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 +22 -7
- package/dist/loaders/markdown/transformer/index.d.ts +6 -1
- package/dist/loaders/markdown/transformer/index.js +27 -3
- package/dist/loaders/markdown/transformer/rehypeDemo.d.ts +1 -1
- package/dist/loaders/markdown/transformer/rehypeDemo.js +41 -16
- package/dist/loaders/markdown/transformer/rehypeEmbed.d.ts +4 -0
- package/dist/loaders/markdown/transformer/rehypeEmbed.js +75 -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 +2 -0
- package/dist/types.d.ts +14 -6
- package/dist/utils.d.ts +11 -0
- package/dist/utils.js +25 -1
- package/package.json +11 -9
- package/theme-default/layouts/DocLayout/index.d.ts +3 -0
- package/theme-default/layouts/DocLayout/index.js +16 -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
|
@@ -1,14 +1,64 @@
|
|
|
1
|
-
|
|
1
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
+
|
|
3
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
|
+
|
|
5
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
+
|
|
7
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
+
|
|
9
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
10
|
+
|
|
11
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
12
|
+
|
|
13
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
+
|
|
15
|
+
import { useMatchedRouteMeta } from 'dumi/theme';
|
|
16
|
+
import React, { useState } from 'react';
|
|
2
17
|
import { DumiDemo } from "./DumiDemo";
|
|
3
18
|
export var DumiDemoGrid = function DumiDemoGrid(props) {
|
|
19
|
+
var meta = useMatchedRouteMeta();
|
|
20
|
+
|
|
21
|
+
var _useState = useState(function () {
|
|
22
|
+
var _meta$demo;
|
|
23
|
+
|
|
24
|
+
var cols = [];
|
|
25
|
+
|
|
26
|
+
if ((_meta$demo = meta.demo) !== null && _meta$demo !== void 0 && _meta$demo.cols && meta.demo.cols > 1) {
|
|
27
|
+
for (var i = 0; i < props.items.length; i += meta.demo.cols) {
|
|
28
|
+
props.items.slice(i, i + meta.demo.cols).forEach(function (item, j) {
|
|
29
|
+
var _cols$j;
|
|
30
|
+
|
|
31
|
+
(_cols$j = cols[j]) !== null && _cols$j !== void 0 ? _cols$j : cols[j] = [];
|
|
32
|
+
cols[j].push(item);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return cols;
|
|
37
|
+
} else {
|
|
38
|
+
cols.push(props.items);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return cols;
|
|
42
|
+
}),
|
|
43
|
+
_useState2 = _slicedToArray(_useState, 1),
|
|
44
|
+
cols = _useState2[0];
|
|
45
|
+
|
|
4
46
|
return /*#__PURE__*/React.createElement("div", {
|
|
5
47
|
style: {
|
|
6
|
-
display: '
|
|
7
|
-
|
|
48
|
+
display: 'flex',
|
|
49
|
+
margin: -8
|
|
8
50
|
}
|
|
9
|
-
},
|
|
51
|
+
}, cols.map(function (col, i) {
|
|
10
52
|
return /*#__PURE__*/React.createElement("section", {
|
|
11
|
-
|
|
12
|
-
|
|
53
|
+
style: {
|
|
54
|
+
flex: 1,
|
|
55
|
+
padding: 8
|
|
56
|
+
},
|
|
57
|
+
key: String(i)
|
|
58
|
+
}, col.map(function (item) {
|
|
59
|
+
return /*#__PURE__*/React.createElement(DumiDemo, _extends({
|
|
60
|
+
key: item.demo.id
|
|
61
|
+
}, item));
|
|
62
|
+
}));
|
|
13
63
|
}));
|
|
14
64
|
};
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { type ComponentType } from 'react';
|
|
2
|
-
import type { IPreviewerProps } from './types';
|
|
2
|
+
import type { ILocalesConfig, IPreviewerProps } from './types';
|
|
3
3
|
export interface IThemeContext {
|
|
4
4
|
demos: Record<string, {
|
|
5
5
|
component: ComponentType;
|
|
6
6
|
asset: IPreviewerProps['asset'];
|
|
7
7
|
}>;
|
|
8
|
-
locales:
|
|
9
|
-
id: string;
|
|
10
|
-
name: string;
|
|
11
|
-
base: string;
|
|
12
|
-
}[];
|
|
8
|
+
locales: ILocalesConfig;
|
|
13
9
|
}
|
|
14
10
|
export declare const Context: import("react").Context<IThemeContext>;
|
|
@@ -9,6 +9,10 @@ export interface IPreviewerProps {
|
|
|
9
9
|
* description of current demo
|
|
10
10
|
*/
|
|
11
11
|
description?: string;
|
|
12
|
+
/**
|
|
13
|
+
* file path of current demo
|
|
14
|
+
*/
|
|
15
|
+
filePath?: string;
|
|
12
16
|
/**
|
|
13
17
|
* asset metadata of current demo
|
|
14
18
|
*/
|
|
@@ -17,4 +21,27 @@ export interface IPreviewerProps {
|
|
|
17
21
|
* react node of current demo
|
|
18
22
|
*/
|
|
19
23
|
children: ReactNode;
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
}
|
|
26
|
+
export interface IRouteMeta {
|
|
27
|
+
title?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
keywords?: string[];
|
|
30
|
+
category?: string;
|
|
31
|
+
order?: number;
|
|
32
|
+
toc?: boolean | 'content' | 'menu';
|
|
33
|
+
demo?: {
|
|
34
|
+
cols?: number;
|
|
35
|
+
};
|
|
36
|
+
[key: string]: any;
|
|
20
37
|
}
|
|
38
|
+
declare type IBasicLocale = {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
};
|
|
42
|
+
export declare type ILocalesConfig = ((IBasicLocale & {
|
|
43
|
+
base?: string;
|
|
44
|
+
}) | (IBasicLocale & {
|
|
45
|
+
suffix: string;
|
|
46
|
+
}))[];
|
|
47
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
|
|
3
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
|
|
5
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
+
|
|
7
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
8
|
+
|
|
9
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
10
|
+
|
|
11
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
12
|
+
|
|
13
|
+
import { matchRoutes, useAppData, useLocation, useRouteData } from 'dumi';
|
|
14
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* hook for get matched route meta
|
|
18
|
+
*/
|
|
19
|
+
export var useMatchedRouteMeta = function useMatchedRouteMeta() {
|
|
20
|
+
var _useRouteData = useRouteData(),
|
|
21
|
+
route = _useRouteData.route;
|
|
22
|
+
|
|
23
|
+
var _useLocation = useLocation(),
|
|
24
|
+
pathname = _useLocation.pathname;
|
|
25
|
+
|
|
26
|
+
var _useAppData = useAppData(),
|
|
27
|
+
clientRoutes = _useAppData.clientRoutes;
|
|
28
|
+
|
|
29
|
+
var getter = useCallback(function () {
|
|
30
|
+
var ret;
|
|
31
|
+
|
|
32
|
+
if (route.path === pathname) {
|
|
33
|
+
// use `useRouteData` result if matched, for performance
|
|
34
|
+
ret = route.meta;
|
|
35
|
+
} else {
|
|
36
|
+
var _matchRoutes, _matched$route;
|
|
37
|
+
|
|
38
|
+
// match manually for dynamic route & layout component
|
|
39
|
+
var matched = (_matchRoutes = matchRoutes(clientRoutes, pathname)) === null || _matchRoutes === void 0 ? void 0 : _matchRoutes.pop();
|
|
40
|
+
ret = matched === null || matched === void 0 ? void 0 : (_matched$route = matched.route) === null || _matched$route === void 0 ? void 0 : _matched$route.meta;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return ret || {};
|
|
44
|
+
}, [clientRoutes.length, pathname]);
|
|
45
|
+
|
|
46
|
+
var _useState = useState(getter),
|
|
47
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
48
|
+
meta = _useState2[0],
|
|
49
|
+
setMeta = _useState2[1];
|
|
50
|
+
|
|
51
|
+
useEffect(function () {
|
|
52
|
+
setMeta(getter);
|
|
53
|
+
}, [clientRoutes.length, pathname]);
|
|
54
|
+
return meta;
|
|
55
|
+
};
|
package/dist/features/compile.js
CHANGED
|
@@ -27,17 +27,34 @@ __export(compile_exports, {
|
|
|
27
27
|
module.exports = __toCommonJS(compile_exports);
|
|
28
28
|
var import_react = __toESM(require("../techStacks/react"));
|
|
29
29
|
var compile_default = (api) => {
|
|
30
|
-
api.
|
|
30
|
+
api.register({
|
|
31
|
+
key: "registerTechStack",
|
|
32
|
+
stage: Infinity,
|
|
33
|
+
fn: () => new import_react.default()
|
|
34
|
+
});
|
|
35
|
+
api.modifyDefaultConfig((memo) => {
|
|
36
|
+
memo.alias.dumi$ = memo.alias.umi;
|
|
37
|
+
return memo;
|
|
38
|
+
});
|
|
31
39
|
api.chainWebpack(async (memo) => {
|
|
32
|
-
const loaderPath = require.resolve("../loaders/markdown");
|
|
33
40
|
const babelInUmi = memo.module.rule("src").use("babel-loader").entries();
|
|
34
41
|
const techStacks = await api.applyPlugins({
|
|
35
42
|
key: "registerTechStack",
|
|
36
43
|
type: api.ApplyPluginsType.add
|
|
37
44
|
});
|
|
38
|
-
|
|
45
|
+
const loaderPath = require.resolve("../loaders/markdown");
|
|
46
|
+
const loaderBaseOpts = {
|
|
39
47
|
techStacks,
|
|
40
48
|
cwd: api.cwd,
|
|
49
|
+
codeBlockMode: api.config.resolve.codeBlockMode,
|
|
50
|
+
extraRemarkPlugins: api.config.extraRemarkPlugins,
|
|
51
|
+
extraRehypePlugins: api.config.extraRehypePlugins
|
|
52
|
+
};
|
|
53
|
+
memo.module.rule("dumi-md").type("javascript/auto").test(/\.md$/).oneOf("demo-index").resourceQuery(/meta$/).use("demo-index-loader").loader(loaderPath).options({
|
|
54
|
+
...loaderBaseOpts,
|
|
55
|
+
mode: "meta"
|
|
56
|
+
}).end().end().oneOf("md").use("babel-loader").loader(babelInUmi.loader).options(babelInUmi.options).end().use("md-loader").loader(loaderPath).options({
|
|
57
|
+
...loaderBaseOpts,
|
|
41
58
|
builtins: api.service.themeData.builtins
|
|
42
59
|
});
|
|
43
60
|
memo.module.rule("dumi-demo").type("javascript/auto").test(/\..+$/).enforce("pre").resourceQuery(/techStack/).use("demo-loader").loader(require.resolve("../loaders/demo")).options({ techStacks, cwd: api.cwd });
|
|
@@ -27,7 +27,8 @@ var configPlugins_default = (api) => {
|
|
|
27
27
|
const configDefaults = {
|
|
28
28
|
resolve: {
|
|
29
29
|
docDirs: ["docs"],
|
|
30
|
-
entityDirs: [{ type: "component", dir: "src" }]
|
|
30
|
+
entityDirs: [{ type: "component", dir: "src" }],
|
|
31
|
+
codeBlockMode: "active"
|
|
31
32
|
}
|
|
32
33
|
};
|
|
33
34
|
const schemas = (0, import_schema.getSchemas)();
|
|
@@ -22,12 +22,18 @@ __export(schema_exports, {
|
|
|
22
22
|
getSchemas: () => getSchemas
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(schema_exports);
|
|
25
|
+
function getUnifiedPluginSchema(Joi) {
|
|
26
|
+
return Joi.array().items(Joi.alternatives(Joi.string(), Joi.func(), Joi.array().items(Joi.alternatives(Joi.string(), Joi.func()), Joi.object()).length(2))).optional();
|
|
27
|
+
}
|
|
25
28
|
function getSchemas() {
|
|
26
29
|
return {
|
|
27
30
|
resolve: (Joi) => Joi.object({
|
|
28
31
|
docDirs: Joi.array().items(Joi.string()).optional(),
|
|
29
|
-
entityDirs: Joi.array().items(Joi.object({ type: Joi.string(), dir: Joi.string() })).optional()
|
|
30
|
-
|
|
32
|
+
entityDirs: Joi.array().items(Joi.object({ type: Joi.string(), dir: Joi.string() })).optional(),
|
|
33
|
+
codeBlockMode: Joi.string().valid("active", "passive").optional()
|
|
34
|
+
}).optional(),
|
|
35
|
+
extraRemarkPlugins: getUnifiedPluginSchema,
|
|
36
|
+
extraRehypePlugins: getUnifiedPluginSchema
|
|
31
37
|
};
|
|
32
38
|
}
|
|
33
39
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/features/locales.js
CHANGED
|
@@ -26,11 +26,16 @@ var locales_default = (api) => {
|
|
|
26
26
|
api.describe({
|
|
27
27
|
config: {
|
|
28
28
|
default: [{ id: "zh-CN", name: "\u4E2D\u6587", base: "/" }],
|
|
29
|
-
schema: (Joi) =>
|
|
30
|
-
id: Joi.string().
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
schema: (Joi) => {
|
|
30
|
+
const basicOpts = { id: Joi.string(), name: Joi.string() };
|
|
31
|
+
return Joi.alternatives(Joi.array().items(Joi.object({
|
|
32
|
+
...basicOpts,
|
|
33
|
+
base: Joi.string().optional()
|
|
34
|
+
})), Joi.array().items(Joi.object({
|
|
35
|
+
...basicOpts,
|
|
36
|
+
suffix: Joi.string().allow("")
|
|
37
|
+
})));
|
|
38
|
+
}
|
|
34
39
|
}
|
|
35
40
|
});
|
|
36
41
|
api.register({
|
|
@@ -39,7 +44,9 @@ var locales_default = (api) => {
|
|
|
39
44
|
fn: (memo) => {
|
|
40
45
|
var _a;
|
|
41
46
|
(_a = memo.locales) == null ? void 0 : _a.forEach((locale, i) => {
|
|
42
|
-
|
|
47
|
+
if (!("suffix" in locale)) {
|
|
48
|
+
locale.base ?? (locale.base = i ? `/${locale.id}` : "/");
|
|
49
|
+
}
|
|
43
50
|
});
|
|
44
51
|
return memo;
|
|
45
52
|
}
|
|
@@ -64,7 +71,12 @@ const cache = createIntlCache();
|
|
|
64
71
|
|
|
65
72
|
const LocalesContainer: FC<{ children: ReactNode }> = (props) => {
|
|
66
73
|
const [locale] = useState(() => {
|
|
67
|
-
const matched = locales.find((locale) =>
|
|
74
|
+
const matched = locales.find((locale) => (
|
|
75
|
+
// base mode
|
|
76
|
+
history.location.pathname.startsWith(locale.base) ||
|
|
77
|
+
// suffix mode
|
|
78
|
+
('suffix' in locale && history.location.pathname.endsWith(locale.suffix))
|
|
79
|
+
));
|
|
68
80
|
|
|
69
81
|
return matched ? matched.id : locales[0].id;
|
|
70
82
|
});
|
|
@@ -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,6 +26,7 @@ __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");
|
|
@@ -33,9 +34,10 @@ var CTX_LAYOUT_ID = "dumi-context-layout";
|
|
|
33
34
|
function localizeUmiRoute(route, locales) {
|
|
34
35
|
const locale = locales.find((locale2) => route.path.endsWith(`/${locale2.id}`) && import_path.default.parse(route.file).name.endsWith(`.${locale2.id}`));
|
|
35
36
|
if (locale) {
|
|
36
|
-
const base = locale.base === "/" ? "" : locale.base;
|
|
37
|
-
|
|
38
|
-
route.path = route.path
|
|
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;
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
43
|
var routes_default = (api) => {
|
|
@@ -46,6 +48,17 @@ var routes_default = (api) => {
|
|
|
46
48
|
};
|
|
47
49
|
return memo;
|
|
48
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
|
+
});
|
|
49
62
|
api.modifyRoutes((oRoutes) => {
|
|
50
63
|
const routes = Object.values(oRoutes).reduce((ret, route) => {
|
|
51
64
|
if (route.isLayout) {
|
|
@@ -88,7 +101,7 @@ var routes_default = (api) => {
|
|
|
88
101
|
const entityFiles = import_plugin_utils.glob.sync("{*,*/index,*/index.*,*/README,*/README.*}.md", { cwd: base });
|
|
89
102
|
entityFiles.forEach((file) => {
|
|
90
103
|
const routePath = (0, import_plugin_utils.winPath)(import_path.default.join((0, import_pluralize.plural)(type), file)).replace(/(\/index|\/README)?\.md$/, "").replace(/\./g, "/");
|
|
91
|
-
const routeId =
|
|
104
|
+
const routeId = (0, import_utils.createRouteId)(file);
|
|
92
105
|
routes[routeId] = {
|
|
93
106
|
id: routeId,
|
|
94
107
|
path: routePath,
|
|
@@ -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 = {});
|