dumi 2.0.0-beta.5 → 2.0.0-beta.7
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/client/theme-api/DumiDemo.js +1 -0
- package/dist/client/theme-api/context.d.ts +2 -0
- package/dist/client/theme-api/context.js +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.js +11 -0
- package/dist/features/assets.d.ts +12 -0
- package/dist/features/assets.js +67 -0
- package/dist/features/compile.js +10 -1
- package/dist/features/parser.js +15 -11
- package/dist/features/routes.js +3 -3
- package/dist/features/tabs.d.ts +9 -0
- package/dist/features/tabs.js +31 -9
- package/dist/features/theme/index.js +1 -0
- package/dist/loaders/markdown/index.d.ts +2 -1
- package/dist/loaders/markdown/index.js +10 -2
- package/dist/loaders/markdown/transformer/index.d.ts +5 -2
- package/dist/loaders/markdown/transformer/rehypeDemo.js +20 -6
- package/dist/loaders/markdown/transformer/rehypeEmbed.js +2 -1
- package/dist/preset.js +2 -1
- package/dist/registerMethods.js +6 -1
- package/dist/types.d.ts +10 -1
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@ export var DumiDemo = function DumiDemo(props) {
|
|
|
11
11
|
var _demos$props$demo$id = demos[props.demo.id],
|
|
12
12
|
component = _demos$props$demo$id.component,
|
|
13
13
|
asset = _demos$props$demo$id.asset;
|
|
14
|
+
if (props.demo.inline) return /*#__PURE__*/createElement(component);
|
|
14
15
|
return /*#__PURE__*/React.createElement(Previewer, _extends({
|
|
15
16
|
asset: asset,
|
|
16
17
|
demoUrl: // allow user override demoUrl by frontmatter
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { PICKED_PKG_FIELDS } from "../../constants";
|
|
1
2
|
import type { AtomComponentAsset } from 'dumi-assets-types';
|
|
2
3
|
import { type ComponentType } from 'react';
|
|
3
4
|
import type { ILocalesConfig, IPreviewerProps, IThemeConfig } from './types';
|
|
4
5
|
interface ISiteContext {
|
|
6
|
+
pkg: Partial<Record<keyof typeof PICKED_PKG_FIELDS, any>>;
|
|
5
7
|
demos: Record<string, {
|
|
6
8
|
component: ComponentType;
|
|
7
9
|
asset: IPreviewerProps['asset'];
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
export declare const LOCAL_THEME_DIR = ".dumi/theme";
|
|
2
2
|
export declare const THEME_PREFIX = "dumi-theme-";
|
|
3
3
|
export declare const SP_ROUTE_PREFIX = "~";
|
|
4
|
+
export declare const PICKED_PKG_FIELDS: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
version: string;
|
|
8
|
+
license: string;
|
|
9
|
+
repository: string;
|
|
10
|
+
author: string;
|
|
11
|
+
authors: string;
|
|
12
|
+
};
|
package/dist/constants.js
CHANGED
|
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
var constants_exports = {};
|
|
21
21
|
__export(constants_exports, {
|
|
22
22
|
LOCAL_THEME_DIR: () => LOCAL_THEME_DIR,
|
|
23
|
+
PICKED_PKG_FIELDS: () => PICKED_PKG_FIELDS,
|
|
23
24
|
SP_ROUTE_PREFIX: () => SP_ROUTE_PREFIX,
|
|
24
25
|
THEME_PREFIX: () => THEME_PREFIX
|
|
25
26
|
});
|
|
@@ -27,9 +28,19 @@ module.exports = __toCommonJS(constants_exports);
|
|
|
27
28
|
var LOCAL_THEME_DIR = ".dumi/theme";
|
|
28
29
|
var THEME_PREFIX = "dumi-theme-";
|
|
29
30
|
var SP_ROUTE_PREFIX = "~";
|
|
31
|
+
var PICKED_PKG_FIELDS = {
|
|
32
|
+
name: "",
|
|
33
|
+
description: "",
|
|
34
|
+
version: "",
|
|
35
|
+
license: "",
|
|
36
|
+
repository: "",
|
|
37
|
+
author: "",
|
|
38
|
+
authors: ""
|
|
39
|
+
};
|
|
30
40
|
// Annotate the CommonJS export names for ESM import in node:
|
|
31
41
|
0 && (module.exports = {
|
|
32
42
|
LOCAL_THEME_DIR,
|
|
43
|
+
PICKED_PKG_FIELDS,
|
|
33
44
|
SP_ROUTE_PREFIX,
|
|
34
45
|
THEME_PREFIX
|
|
35
46
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IApi } from "../types";
|
|
2
|
+
import type { ExampleAsset } from 'dumi-assets-types';
|
|
3
|
+
declare const examples: ExampleAsset[];
|
|
4
|
+
/**
|
|
5
|
+
* internal function to add example assets
|
|
6
|
+
*/
|
|
7
|
+
export declare function addExampleAssets(data: typeof examples): void;
|
|
8
|
+
/**
|
|
9
|
+
* plugin for generate assets.json
|
|
10
|
+
*/
|
|
11
|
+
declare const _default: (api: IApi) => void;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,67 @@
|
|
|
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/assets.ts
|
|
23
|
+
var assets_exports = {};
|
|
24
|
+
__export(assets_exports, {
|
|
25
|
+
addExampleAssets: () => addExampleAssets,
|
|
26
|
+
default: () => assets_default
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(assets_exports);
|
|
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 examples = [];
|
|
33
|
+
function addExampleAssets(data) {
|
|
34
|
+
examples.push(...data);
|
|
35
|
+
}
|
|
36
|
+
var assets_default = (api) => {
|
|
37
|
+
api.describe({
|
|
38
|
+
config: {
|
|
39
|
+
schema: (Joi) => Joi.object()
|
|
40
|
+
},
|
|
41
|
+
enableBy: ({ env }) => env === "production" && Boolean(api.args.assets)
|
|
42
|
+
});
|
|
43
|
+
api.onBuildComplete(async () => {
|
|
44
|
+
const { components } = await api.service.atomParser.parse();
|
|
45
|
+
const assets = await api.applyPlugins({
|
|
46
|
+
key: "modifyAssetsMetadata",
|
|
47
|
+
initialValue: {
|
|
48
|
+
name: api.config.themeConfig.title || api.pkg.name,
|
|
49
|
+
npmPackageName: api.pkg.name,
|
|
50
|
+
version: api.pkg.version,
|
|
51
|
+
description: api.pkg.description,
|
|
52
|
+
logo: api.config.themeConfig.logo,
|
|
53
|
+
homepage: api.pkg.homepage,
|
|
54
|
+
repository: api.pkg.repository,
|
|
55
|
+
assets: {
|
|
56
|
+
atoms: Object.values(components),
|
|
57
|
+
examples: import_plugin_utils.lodash.uniqBy(examples, "id")
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
import_fs.default.writeFileSync(import_path.default.join(api.cwd, "assets.json"), JSON.stringify(assets, null, 2), "utf-8");
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
65
|
+
0 && (module.exports = {
|
|
66
|
+
addExampleAssets
|
|
67
|
+
});
|
package/dist/features/compile.js
CHANGED
|
@@ -26,6 +26,7 @@ __export(compile_exports, {
|
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(compile_exports);
|
|
28
28
|
var import_react = __toESM(require("../techStacks/react"));
|
|
29
|
+
var import_assets = require("./assets");
|
|
29
30
|
var compile_default = (api) => {
|
|
30
31
|
api.register({
|
|
31
32
|
key: "registerTechStack",
|
|
@@ -52,7 +53,15 @@ var compile_default = (api) => {
|
|
|
52
53
|
};
|
|
53
54
|
memo.module.rule("dumi-md").type("javascript/auto").test(/\.md$/).oneOf("md-meta").resourceQuery(/meta$/).use("babel-loader").loader(babelInUmi.loader).options(babelInUmi.options).end().use("md-meta-loader").loader(loaderPath).options({
|
|
54
55
|
...loaderBaseOpts,
|
|
55
|
-
mode: "meta"
|
|
56
|
+
mode: "meta",
|
|
57
|
+
onResolveDemos(demos) {
|
|
58
|
+
const assets = demos.reduce((ret, demo) => {
|
|
59
|
+
if ("asset" in demo)
|
|
60
|
+
ret.push(demo.asset);
|
|
61
|
+
return ret;
|
|
62
|
+
}, []);
|
|
63
|
+
(0, import_assets.addExampleAssets)(assets);
|
|
64
|
+
}
|
|
56
65
|
}).end().end().oneOf("md").use("babel-loader").loader(babelInUmi.loader).options(babelInUmi.options).end().use("md-loader").loader(loaderPath).options({
|
|
57
66
|
...loaderBaseOpts,
|
|
58
67
|
builtins: api.service.themeData.builtins
|
package/dist/features/parser.js
CHANGED
|
@@ -25,7 +25,7 @@ __export(parser_exports, {
|
|
|
25
25
|
default: () => parser_default
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(parser_exports);
|
|
28
|
-
var
|
|
28
|
+
var import_assert = __toESM(require("assert"));
|
|
29
29
|
var import_meta = require("./meta");
|
|
30
30
|
var parser_default = (api) => {
|
|
31
31
|
const writeAtomsMetaFile = (data) => {
|
|
@@ -43,24 +43,28 @@ var parser_default = (api) => {
|
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
45
|
api.modifyDefaultConfig((memo) => {
|
|
46
|
-
var _a;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
process.exit(1);
|
|
50
|
-
}
|
|
46
|
+
var _a, _b;
|
|
47
|
+
(0, import_assert.default)((_a = api.userConfig.resolve) == null ? void 0 : _a.entryFile, "`resolve.entryFile` must be configured when `apiParser` enable");
|
|
48
|
+
(0, import_assert.default)((_b = api.pkg.devDependencies) == null ? void 0 : _b["typescript"], "typescript must be installed when `apiParser` enable");
|
|
51
49
|
return memo;
|
|
52
50
|
});
|
|
53
|
-
api.onStart(() => {
|
|
54
|
-
|
|
51
|
+
api.onStart(async () => {
|
|
52
|
+
const {
|
|
53
|
+
default: AtomAssetsParser
|
|
54
|
+
} = require("../assetParsers/atom");
|
|
55
|
+
api.service.atomParser = new AtomAssetsParser({
|
|
55
56
|
entryFile: api.config.resolve.entryFile,
|
|
56
57
|
resolveDir: api.cwd
|
|
57
58
|
});
|
|
58
|
-
if (api.env === "
|
|
59
|
-
api.service.atomParser.parse().then(writeAtomsMetaFile);
|
|
60
|
-
} else {
|
|
59
|
+
if (api.env === "development") {
|
|
61
60
|
api.service.atomParser.watch(writeAtomsMetaFile);
|
|
62
61
|
}
|
|
63
62
|
});
|
|
63
|
+
if (api.env === "production") {
|
|
64
|
+
api.onGenerateFiles(async () => {
|
|
65
|
+
writeAtomsMetaFile(await api.service.atomParser.parse());
|
|
66
|
+
});
|
|
67
|
+
}
|
|
64
68
|
};
|
|
65
69
|
// Annotate the CommonJS export names for ESM import in node:
|
|
66
70
|
0 && (module.exports = {});
|
package/dist/features/routes.js
CHANGED
|
@@ -112,7 +112,7 @@ var routes_default = (api) => {
|
|
|
112
112
|
}
|
|
113
113
|
Object.entries(pages).forEach(([, route]) => {
|
|
114
114
|
route.parentId = docLayoutId;
|
|
115
|
-
route.file = import_path.default.resolve(pagesDir, route.file);
|
|
115
|
+
route.file = (0, import_plugin_utils.winPath)(import_path.default.resolve(pagesDir, route.file));
|
|
116
116
|
routes[route.id] = route;
|
|
117
117
|
});
|
|
118
118
|
docDirs.map(normalizeDocDir).forEach(({ type, dir }) => {
|
|
@@ -129,7 +129,7 @@ var routes_default = (api) => {
|
|
|
129
129
|
route.path = `${pluralType}/${route.path}`.replace(/\/+$/, "/");
|
|
130
130
|
route.absPath = `/${route.path}`;
|
|
131
131
|
}
|
|
132
|
-
route.file = import_path.default.resolve(base, route.file);
|
|
132
|
+
route.file = (0, import_plugin_utils.winPath)(import_path.default.resolve(base, route.file));
|
|
133
133
|
localizeUmiRoute(route, api.config.locales);
|
|
134
134
|
routes[route.id] = route;
|
|
135
135
|
});
|
|
@@ -145,7 +145,7 @@ var routes_default = (api) => {
|
|
|
145
145
|
path: routePath,
|
|
146
146
|
absPath: `/${routePath}`,
|
|
147
147
|
parentId: docLayoutId,
|
|
148
|
-
file: import_path.default.resolve(base, file)
|
|
148
|
+
file: (0, import_plugin_utils.winPath)(import_path.default.resolve(base, file))
|
|
149
149
|
};
|
|
150
150
|
localizeUmiRoute(routes[routeId], api.config.locales);
|
|
151
151
|
});
|
package/dist/features/tabs.d.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { IApi } from "../types";
|
|
2
|
+
export interface IContentTab {
|
|
3
|
+
key: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
test?: RegExp;
|
|
6
|
+
component: string;
|
|
7
|
+
}
|
|
2
8
|
export declare function isTabRouteFile(file: string): boolean;
|
|
3
9
|
export declare function getTabKeyFromFile(file: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* plugin for add conventional tab and plugin tab into page content
|
|
12
|
+
*/
|
|
4
13
|
declare const _default: (api: IApi) => void;
|
|
5
14
|
export default _default;
|
package/dist/features/tabs.js
CHANGED
|
@@ -38,8 +38,19 @@ function getTabKeyFromFile(file) {
|
|
|
38
38
|
return file.match(/\$tab-([^.]+)/)[1];
|
|
39
39
|
}
|
|
40
40
|
var tabs_default = (api) => {
|
|
41
|
+
let tabsFromPlugins;
|
|
42
|
+
const routesTabMapping = {};
|
|
41
43
|
const tabs = [];
|
|
42
44
|
api.describe({ key: void 0 });
|
|
45
|
+
api.modifyConfig(async (memo) => {
|
|
46
|
+
tabsFromPlugins = await api.applyPlugins({
|
|
47
|
+
key: "addContentTab"
|
|
48
|
+
});
|
|
49
|
+
tabsFromPlugins.forEach((tab) => {
|
|
50
|
+
tab.id ?? (tab.id = `plugin-tab${tab.test ? `-${tab.test}` : ""}-${tab.key}`);
|
|
51
|
+
});
|
|
52
|
+
return memo;
|
|
53
|
+
});
|
|
43
54
|
api.modifyRoutes((routes) => {
|
|
44
55
|
tabs.length = 0;
|
|
45
56
|
Object.values(routes).forEach((route) => {
|
|
@@ -52,24 +63,35 @@ var tabs_default = (api) => {
|
|
|
52
63
|
tabs.push({
|
|
53
64
|
index: tabs.length,
|
|
54
65
|
key: tabKey,
|
|
55
|
-
id:
|
|
56
|
-
file: route.file
|
|
57
|
-
|
|
66
|
+
id: routeId,
|
|
67
|
+
file: route.file
|
|
68
|
+
});
|
|
69
|
+
routesTabMapping[parentFile] ?? (routesTabMapping[parentFile] = []);
|
|
70
|
+
routesTabMapping[parentFile].push(routeId);
|
|
71
|
+
} else {
|
|
72
|
+
tabsFromPlugins.forEach((tab) => {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
if ((!tab.test || route.absPath.match(tab.test)) && !((_a = routesTabMapping[route.file]) == null ? void 0 : _a.includes(tab.id))) {
|
|
75
|
+
routesTabMapping[_b = route.file] ?? (routesTabMapping[_b] = []);
|
|
76
|
+
routesTabMapping[route.file].push(tab.id);
|
|
77
|
+
}
|
|
58
78
|
});
|
|
59
79
|
}
|
|
60
80
|
});
|
|
81
|
+
tabs.push(...tabsFromPlugins.map((tab) => ({
|
|
82
|
+
index: tabs.length,
|
|
83
|
+
key: tab.key,
|
|
84
|
+
id: tab.id,
|
|
85
|
+
file: tab.component
|
|
86
|
+
})));
|
|
61
87
|
return routes;
|
|
62
88
|
});
|
|
63
89
|
api.register({
|
|
64
90
|
key: "dumi.modifyMetaFiles",
|
|
65
91
|
fn: (metaFiles) => {
|
|
66
|
-
const tabsMapping = tabs.reduce((ret, tab) => ({
|
|
67
|
-
...ret,
|
|
68
|
-
[tab.parentFile]: [...ret[tab.parentFile] || [], tab]
|
|
69
|
-
}), {});
|
|
70
92
|
Object.values(metaFiles).forEach((metaFile) => {
|
|
71
|
-
if (
|
|
72
|
-
metaFile.tabs = JSON.stringify(
|
|
93
|
+
if (routesTabMapping[metaFile.file]) {
|
|
94
|
+
metaFile.tabs = JSON.stringify(routesTabMapping[metaFile.file]);
|
|
73
95
|
}
|
|
74
96
|
});
|
|
75
97
|
tabs.forEach((tab) => {
|
|
@@ -123,6 +123,7 @@ export default function DumiContextWrapper() {
|
|
|
123
123
|
|
|
124
124
|
return (
|
|
125
125
|
<SiteContext.Provider value={{
|
|
126
|
+
pkg: ${JSON.stringify(import_plugin_utils.lodash.pick(api.pkg, ...Object.keys(import_constants.PICKED_PKG_FIELDS)))},
|
|
126
127
|
demos,
|
|
127
128
|
components,
|
|
128
129
|
locales,
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { IThemeLoadResult } from "../../features/theme/loader";
|
|
2
|
-
import { type IMdTransformerOptions } from './transformer';
|
|
2
|
+
import { type IMdTransformerOptions, type IMdTransformerResult } from './transformer';
|
|
3
3
|
interface IMdLoaderDefaultModeOptions extends Omit<IMdTransformerOptions, 'fileAbsPath'> {
|
|
4
4
|
mode?: 'markdown';
|
|
5
5
|
builtins: IThemeLoadResult['builtins'];
|
|
6
6
|
}
|
|
7
7
|
interface IMdLoaderDemosModeOptions extends Omit<IMdLoaderDefaultModeOptions, 'builtins' | 'mode'> {
|
|
8
8
|
mode: 'meta';
|
|
9
|
+
onResolveDemos?: (demos: IMdTransformerResult['meta']['demos']) => void;
|
|
9
10
|
}
|
|
10
11
|
export declare type IMdLoaderOptions = IMdLoaderDefaultModeOptions | IMdLoaderDemosModeOptions;
|
|
11
12
|
export default function mdLoader(this: any, raw: string): void;
|
|
@@ -47,6 +47,9 @@ function mdLoader(raw) {
|
|
|
47
47
|
if (opts.mode === "meta") {
|
|
48
48
|
const { demos, frontmatter, toc, embeds = [] } = ret.meta;
|
|
49
49
|
embeds.forEach((file) => this.addDependency(file));
|
|
50
|
+
if (demos && opts.onResolveDemos) {
|
|
51
|
+
opts.onResolveDemos(demos);
|
|
52
|
+
}
|
|
50
53
|
cb(null, import_plugin_utils.Mustache.render(`import React from 'react';
|
|
51
54
|
|
|
52
55
|
export const demos = {
|
|
@@ -64,10 +67,15 @@ export const toc = {{{toc}}}
|
|
|
64
67
|
frontmatter: JSON.stringify(frontmatter),
|
|
65
68
|
toc: JSON.stringify(toc),
|
|
66
69
|
renderAsset: function renderAsset() {
|
|
70
|
+
if (!("asset" in this))
|
|
71
|
+
return "null";
|
|
72
|
+
let { asset } = this;
|
|
73
|
+
const { sources } = this;
|
|
67
74
|
Object.keys(this.sources).forEach((file) => {
|
|
68
|
-
|
|
75
|
+
asset = import_plugin_utils.lodash.cloneDeep(asset);
|
|
76
|
+
asset.dependencies[file].value = `{{{require('!!raw-loader!${sources[file]}?raw').default}}}`;
|
|
69
77
|
});
|
|
70
|
-
return JSON.stringify(
|
|
78
|
+
return JSON.stringify(asset, null, 2).replace(/"{{{|}}}"/g, "");
|
|
71
79
|
}
|
|
72
80
|
}));
|
|
73
81
|
} else {
|
|
@@ -16,12 +16,15 @@ declare module 'hast' {
|
|
|
16
16
|
}
|
|
17
17
|
declare module 'vfile' {
|
|
18
18
|
interface DataMap {
|
|
19
|
-
demos: {
|
|
19
|
+
demos: ({
|
|
20
20
|
id: string;
|
|
21
21
|
component: string;
|
|
22
22
|
asset: IParsedBlockAsset['asset'];
|
|
23
23
|
sources: IParsedBlockAsset['sources'];
|
|
24
|
-
}
|
|
24
|
+
} | {
|
|
25
|
+
id: string;
|
|
26
|
+
component: string;
|
|
27
|
+
})[];
|
|
25
28
|
frontmatter: IRouteMeta['frontmatter'];
|
|
26
29
|
toc: IRouteMeta['toc'];
|
|
27
30
|
embeds?: string[];
|
|
@@ -150,18 +150,32 @@ function rehypeDemo(opts) {
|
|
|
150
150
|
fileAbsPath: opts.fileAbsPath
|
|
151
151
|
});
|
|
152
152
|
}
|
|
153
|
+
const propDemo = { id: parseOpts.id };
|
|
153
154
|
deferrers.push((0, import_block.default)(parseOpts).then(async ({ asset, sources, frontmatter }) => {
|
|
154
|
-
var _a3;
|
|
155
|
+
var _a3, _b;
|
|
155
156
|
const { src, className, ...restAttrs } = codeNode.properties || {};
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
157
|
+
const validAssetAttrs = [
|
|
158
|
+
"title",
|
|
159
|
+
"snapshot",
|
|
160
|
+
"keywords"
|
|
161
|
+
];
|
|
159
162
|
Object.keys(restAttrs).forEach((key) => {
|
|
160
163
|
if (restAttrs[key] === "")
|
|
161
164
|
restAttrs[key] = true;
|
|
162
165
|
});
|
|
163
166
|
const originalProps = Object.assign({}, frontmatter, restAttrs);
|
|
164
|
-
|
|
167
|
+
validAssetAttrs.forEach((key) => {
|
|
168
|
+
if (originalProps[key])
|
|
169
|
+
asset[key] = originalProps[key];
|
|
170
|
+
});
|
|
171
|
+
if (/ inline/.test(String((_a3 = codeNode.data) == null ? void 0 : _a3.meta)) || originalProps.inline) {
|
|
172
|
+
propDemo.inline = true;
|
|
173
|
+
return {
|
|
174
|
+
id: asset.id,
|
|
175
|
+
component
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
Object.assign(previewerProps, await ((_b = techStack.generatePreviewerProps) == null ? void 0 : _b.call(techStack, originalProps, {
|
|
165
179
|
type: codeType,
|
|
166
180
|
mdAbsPath: opts.fileAbsPath,
|
|
167
181
|
fileAbsPath: codeType === "external" ? parseOpts.fileAbsPath : void 0,
|
|
@@ -188,7 +202,7 @@ function rehypeDemo(opts) {
|
|
|
188
202
|
};
|
|
189
203
|
}));
|
|
190
204
|
demosPropData.push({
|
|
191
|
-
demo:
|
|
205
|
+
demo: propDemo,
|
|
192
206
|
previewerProps
|
|
193
207
|
});
|
|
194
208
|
}
|
|
@@ -27,6 +27,7 @@ __export(rehypeEmbed_exports, {
|
|
|
27
27
|
});
|
|
28
28
|
module.exports = __toCommonJS(rehypeEmbed_exports);
|
|
29
29
|
var import_path = __toESM(require("path"));
|
|
30
|
+
var import_plugin_utils = require("umi/plugin-utils");
|
|
30
31
|
var import_url = __toESM(require("url"));
|
|
31
32
|
var visit;
|
|
32
33
|
(async () => {
|
|
@@ -40,7 +41,7 @@ function rehypeEmbed(opts) {
|
|
|
40
41
|
if (node.tagName === EMBED_TAG && ((_a = node.properties) == null ? void 0 : _a.hasOwnProperty("src"))) {
|
|
41
42
|
const { src } = node.properties;
|
|
42
43
|
const parsed = import_url.default.parse((src == null ? void 0 : src.toString()) || "");
|
|
43
|
-
const absPath = import_path.default.resolve(import_path.default.parse(opts.fileAbsPath).dir, parsed.pathname);
|
|
44
|
+
const absPath = (0, import_plugin_utils.winPath)(import_path.default.resolve(import_path.default.parse(opts.fileAbsPath).dir, parsed.pathname));
|
|
44
45
|
if (absPath) {
|
|
45
46
|
const hash = decodeURIComponent(parsed.hash || "").replace("#", "");
|
|
46
47
|
const query = new URLSearchParams();
|
package/dist/preset.js
CHANGED
|
@@ -39,7 +39,8 @@ var preset_default = (api) => {
|
|
|
39
39
|
require.resolve("./features/tabs"),
|
|
40
40
|
require.resolve("./features/theme"),
|
|
41
41
|
require.resolve("./features/locales"),
|
|
42
|
-
require.resolve("./features/parser")
|
|
42
|
+
require.resolve("./features/parser"),
|
|
43
|
+
require.resolve("./features/assets")
|
|
43
44
|
]
|
|
44
45
|
};
|
|
45
46
|
};
|
package/dist/registerMethods.js
CHANGED
|
@@ -24,7 +24,12 @@ __export(registerMethods_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(registerMethods_exports);
|
|
25
25
|
var registerMethods_default = (api) => {
|
|
26
26
|
api.describe({ key: "dumi:registerMethods" });
|
|
27
|
-
[
|
|
27
|
+
[
|
|
28
|
+
"registerTechStack",
|
|
29
|
+
"addContentTab",
|
|
30
|
+
"modifyAssetsMetadata",
|
|
31
|
+
"modifyTheme"
|
|
32
|
+
].forEach((name) => {
|
|
28
33
|
api.registerMethod({ name });
|
|
29
34
|
});
|
|
30
35
|
};
|
package/dist/types.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type AtomAssetsParser from "./assetParsers/atom";
|
|
2
2
|
import type { IDumiDemoProps } from "./client/theme-api/DumiDemo";
|
|
3
3
|
import type { ILocalesConfig, IThemeConfig } from "./client/theme-api/types";
|
|
4
|
+
import type { IContentTab } from "./features/tabs";
|
|
4
5
|
import type { IThemeLoadResult } from "./features/theme/loader";
|
|
5
6
|
import type { IModify } from '@umijs/core';
|
|
6
|
-
import type { ExampleBlockAsset } from 'dumi-assets-types';
|
|
7
|
+
import type { AssetsPackage, ExampleBlockAsset } from 'dumi-assets-types';
|
|
7
8
|
import type { Element } from 'hast';
|
|
8
9
|
import type { IApi as IUmiApi } from 'umi';
|
|
9
10
|
declare type IUmiConfig = IUmiApi['config'];
|
|
@@ -77,5 +78,13 @@ export declare type IApi = IUmiApi & {
|
|
|
77
78
|
* modify original theme data
|
|
78
79
|
*/
|
|
79
80
|
modifyTheme: IModify<IThemeLoadResult, null>;
|
|
81
|
+
/**
|
|
82
|
+
* add content tab
|
|
83
|
+
*/
|
|
84
|
+
addContentTab: (fn: () => IContentTab) => void;
|
|
85
|
+
/**
|
|
86
|
+
* modify assets metadata
|
|
87
|
+
*/
|
|
88
|
+
modifyAssetsMetadata: IModify<AssetsPackage, null>;
|
|
80
89
|
};
|
|
81
90
|
export {};
|