dumi 2.0.0-rc.8 → 2.0.0-rc.9

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.
@@ -2,8 +2,24 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
2
2
 
3
3
  import { SP_ROUTE_PREFIX } from "../../constants";
4
4
  import { useSiteData } from 'dumi';
5
+ import Container from "dumi/theme/builtins/Container";
5
6
  import Previewer from "dumi/theme/builtins/Previewer";
6
7
  import React, { createElement } from 'react';
8
+ import { ErrorBoundary } from 'react-error-boundary';
9
+
10
+ var DemoErrorBoundary = function DemoErrorBoundary(props) {
11
+ return /*#__PURE__*/React.createElement(ErrorBoundary, {
12
+ fallbackRender: function fallbackRender(_ref) {
13
+ var error = _ref.error;
14
+ return /*#__PURE__*/React.createElement(Container, {
15
+ type: "error"
16
+ }, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("strong", null, error.message || 'This demo has been crashed.')), error.stack && /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("details", {
17
+ open: true
18
+ }, /*#__PURE__*/React.createElement("summary", null, "Error stack"), /*#__PURE__*/React.createElement("pre", null, error.stack))));
19
+ }
20
+ }, props.children);
21
+ };
22
+
7
23
  export var DumiDemo = function DumiDemo(props) {
8
24
  var _useSiteData = useSiteData(),
9
25
  demos = _useSiteData.demos;
@@ -11,10 +27,14 @@ export var DumiDemo = function DumiDemo(props) {
11
27
  var _demos$props$demo$id = demos[props.demo.id],
12
28
  component = _demos$props$demo$id.component,
13
29
  asset = _demos$props$demo$id.asset;
14
- if (props.demo.inline) return /*#__PURE__*/createElement(component);
30
+
31
+ if (props.demo.inline) {
32
+ return /*#__PURE__*/React.createElement(DemoErrorBoundary, null, /*#__PURE__*/createElement(component));
33
+ }
34
+
15
35
  return /*#__PURE__*/React.createElement(Previewer, _extends({
16
36
  asset: asset,
17
37
  demoUrl: // allow user override demoUrl by frontmatter
18
38
  props.previewerProps.demoUrl || "/".concat(SP_ROUTE_PREFIX, "demos/").concat(props.demo.id)
19
- }, props.previewerProps), props.previewerProps.iframe ? null : /*#__PURE__*/createElement(component));
39
+ }, props.previewerProps), props.previewerProps.iframe ? null : /*#__PURE__*/React.createElement(DemoErrorBoundary, null, /*#__PURE__*/createElement(component)));
20
40
  };
@@ -86,6 +86,10 @@ export interface IRouteMeta {
86
86
  id: string;
87
87
  depth: number;
88
88
  title: string;
89
+ /**
90
+ * private field, will be removed in the future
91
+ */
92
+ _debug_demo?: boolean;
89
93
  }[];
90
94
  texts: {
91
95
  type?: 'content';
@@ -144,8 +144,9 @@ var routes_default = (api) => {
144
144
  const base = import_path.default.join(api.cwd, dir);
145
145
  const atomFiles = import_plugin_utils.glob.sync("{*,*/index,*/index.*,*/README,*/README.*}.md", { cwd: base });
146
146
  atomFiles.forEach((file) => {
147
- const routePath = (0, import_plugin_utils.winPath)(import_path.default.join((0, import_pluralize.plural)(type), file)).replace(/(\/index|\/README)?\.md$/, "").replace(/\./g, "/");
148
- const routeId = (0, import_utils.createRouteId)(file);
147
+ const routeFile = (0, import_plugin_utils.winPath)(import_path.default.join((0, import_pluralize.plural)(type), file));
148
+ const routePath = routeFile.replace(/(\/index|\/README)?\.md$/, "").replace(/\./g, "/");
149
+ const routeId = (0, import_utils.createRouteId)(routeFile);
149
150
  routes[routeId] = {
150
151
  id: routeId,
151
152
  path: routePath,
@@ -0,0 +1,3 @@
1
+ import type { IApi } from "../types";
2
+ declare const _default: (api: IApi) => void;
3
+ export default _default;
@@ -0,0 +1,64 @@
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/sitemap.ts
23
+ var sitemap_exports = {};
24
+ __export(sitemap_exports, {
25
+ default: () => sitemap_default
26
+ });
27
+ module.exports = __toCommonJS(sitemap_exports);
28
+ var import_fs = __toESM(require("fs"));
29
+ var import_path = __toESM(require("path"));
30
+ var import_sitemap = require("sitemap");
31
+ var sitemap_default = (api) => {
32
+ api.describe({
33
+ key: "sitemap",
34
+ config: {
35
+ schema(joi) {
36
+ return joi.object({
37
+ hostname: joi.string().required(),
38
+ exclude: joi.array().items(joi.string())
39
+ });
40
+ }
41
+ },
42
+ enableBy: ({ userConfig, env }) => userConfig.sitemap && env === "production"
43
+ });
44
+ api.onBuildComplete(async () => {
45
+ const smis = new import_sitemap.SitemapStream({
46
+ hostname: api.config.sitemap.hostname,
47
+ xmlns: { video: false, image: false, news: false, xhtml: false }
48
+ });
49
+ const exclude = ["/404"].concat(api.config.sitemap.exclude);
50
+ const writeStream = import_fs.default.createWriteStream(import_path.default.join(api.paths.absOutputPath, "sitemap.xml"));
51
+ smis.pipe(writeStream);
52
+ Object.values(api.appData.routes).forEach((route) => {
53
+ if (!exclude.includes(route.path) && ![":", "*"].some((char) => route.path.includes(char))) {
54
+ smis.write({ url: route.path });
55
+ }
56
+ });
57
+ smis.end();
58
+ await new Promise((resolve) => {
59
+ writeStream.on("close", resolve);
60
+ });
61
+ });
62
+ };
63
+ // Annotate the CommonJS export names for ESM import in node:
64
+ 0 && (module.exports = {});
@@ -121,7 +121,7 @@ function mdLoader(content) {
121
121
  } else if (cacheKey in deferrer) {
122
122
  deferrer[cacheKey].then((res) => {
123
123
  cb(null, emit.call(this, opts, res));
124
- });
124
+ }).catch(cb);
125
125
  return;
126
126
  }
127
127
  deferrer[cacheKey] = (0, import_transformer.default)(content, {
@@ -139,9 +139,10 @@ function rehypeDemo(opts) {
139
139
  const previewerProps = {};
140
140
  let component = "";
141
141
  if (codeType === "external") {
142
+ const chunkName = [vFile.data.frontmatter.atomId, "demos"].filter(Boolean).join("__");
142
143
  parseOpts.fileAbsPath = codeNode.properties.src;
143
144
  parseOpts.id = getCodeId(opts.cwd, opts.fileAbsPath, import_path.default.parse(parseOpts.fileAbsPath).name, vFile.data.frontmatter.atomId);
144
- component = `React.lazy(() => import('${(0, import_plugin_utils.winPath)(parseOpts.fileAbsPath)}?techStack=${techStack.name}'))`;
145
+ component = `React.lazy(() => import( /* webpackChunkName: "${chunkName}" */ '${(0, import_plugin_utils.winPath)(parseOpts.fileAbsPath)}?techStack=${techStack.name}'))`;
145
146
  codeNode.properties.title = codeValue || void 0;
146
147
  (_a2 = codeNode.properties).filename ?? (_a2.filename = (0, import_plugin_utils.winPath)(import_path.default.relative(opts.cwd, parseOpts.fileAbsPath)));
147
148
  } else {
@@ -59,7 +59,8 @@ function rehypeSlug() {
59
59
  vFile.data.toc.push({
60
60
  id: slugger.slug(demo.id),
61
61
  depth: ((_b2 = (_a2 = vFile.data.frontmatter) == null ? void 0 : _a2.demo) == null ? void 0 : _b2.tocDepth) || 3,
62
- title: previewerProps.title
62
+ title: previewerProps.title,
63
+ ...previewerProps.debug ? { _debug_demo: true } : {}
63
64
  });
64
65
  }
65
66
  });
package/dist/preset.js CHANGED
@@ -56,7 +56,8 @@ var preset_default = (api) => {
56
56
  require.resolve("./features/locales"),
57
57
  require.resolve("./features/parser"),
58
58
  require.resolve("./features/assets"),
59
- require.resolve("./features/exportStatic")
59
+ require.resolve("./features/exportStatic"),
60
+ require.resolve("./features/sitemap")
60
61
  ]
61
62
  };
62
63
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dumi",
3
- "version": "2.0.0-rc.8",
3
+ "version": "2.0.0-rc.9",
4
4
  "description": "Framework for developing UI components",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -57,8 +57,8 @@
57
57
  "@swc/core": "^1.2.224",
58
58
  "@types/hast": "^2.3.4",
59
59
  "@types/mdast": "^3.0.10",
60
- "@umijs/bundler-utils": "^4.0.30",
61
- "@umijs/core": "^4.0.30",
60
+ "@umijs/bundler-utils": "4.0.0-canary.20221114.1",
61
+ "@umijs/core": "4.0.0-canary.20221114.1",
62
62
  "codesandbox": "^2.2.3",
63
63
  "deepmerge": "^4.2.2",
64
64
  "dumi-afx-deps": "^1.0.0-alpha.1",
@@ -84,6 +84,7 @@
84
84
  "raw-loader": "^4.0.2",
85
85
  "rc-tabs": "12.1.0-alpha.1",
86
86
  "react-copy-to-clipboard": "^5.1.0",
87
+ "react-error-boundary": "^3.1.4",
87
88
  "react-helmet": "^6.1.0",
88
89
  "react-intl": "^6.1.1",
89
90
  "rehype-autolink-headings": "^6.1.1",
@@ -96,7 +97,8 @@
96
97
  "remark-parse": "^10.0.1",
97
98
  "remark-rehype": "^10.1.0",
98
99
  "sass": "^1.55.0",
99
- "umi": "^4.0.30",
100
+ "sitemap": "^7.1.1",
101
+ "umi": "4.0.0-canary.20221114.1",
100
102
  "unified": "^10.1.2",
101
103
  "unist-util-visit": "^4.1.0",
102
104
  "unist-util-visit-parents": "^5.1.1",
@@ -116,8 +118,8 @@
116
118
  "@types/react": "^18.0.16",
117
119
  "@types/react-copy-to-clipboard": "^5.0.4",
118
120
  "@types/react-helmet": "^6.1.5",
119
- "@umijs/lint": "^4.0.30",
120
- "@umijs/plugins": "^4.0.30",
121
+ "@umijs/lint": "4.0.0-canary.20221114.1",
122
+ "@umijs/plugins": "4.0.0-canary.20221114.1",
121
123
  "eslint": "^8.20.0",
122
124
  "father": "^4.1.0",
123
125
  "husky": "^8.0.1",
@@ -1,10 +1,17 @@
1
1
  @import (reference) '../../styles/variables.less';
2
2
 
3
- .@{prefix}-container {
4
- margin: 24px 0 32px;
3
+ .@{prefix}-container.markdown {
5
4
  padding: 18px 16px 18px 44px;
6
5
  border-radius: 4px;
7
6
 
7
+ &:not(:first-child) {
8
+ margin-top: 24px;
9
+ }
10
+
11
+ &:not(:last-child) {
12
+ margin-top: 32px;
13
+ }
14
+
8
15
  > svg {
9
16
  float: left;
10
17
  fill: currentcolor;
@@ -13,9 +20,10 @@
13
20
  }
14
21
 
15
22
  > h4 {
16
- margin: 1px 0 0;
23
+ clear: none;
24
+ margin: 0;
17
25
  font-size: 15px;
18
- line-height: 1;
26
+ line-height: 17px;
19
27
  }
20
28
 
21
29
  > p {
@@ -27,9 +35,13 @@
27
35
  &[data-type='info'] {
28
36
  @color: darken(desaturate(@c-primary, 45%), 10%);
29
37
 
30
- color: @color;
31
38
  background: lighten(@c-primary, 42%);
32
39
 
40
+ > h4,
41
+ > svg {
42
+ color: @color;
43
+ }
44
+
33
45
  > p {
34
46
  color: desaturate(@color, 20%);
35
47
  }
@@ -38,9 +50,13 @@
38
50
  &[data-type='warning'] {
39
51
  @color: darken(desaturate(@c-warning, 20%), 2%);
40
52
 
41
- color: @color;
42
53
  background: lighten(@c-warning, 51%);
43
54
 
55
+ > h4,
56
+ > svg {
57
+ color: @color;
58
+ }
59
+
44
60
  > p {
45
61
  color: desaturate(@color, 24%);
46
62
  }
@@ -49,9 +65,13 @@
49
65
  &[data-type='success'] {
50
66
  @color: darken(desaturate(@c-success, 5%), 1%);
51
67
 
52
- color: @color;
53
68
  background: lighten(@c-success, 59%);
54
69
 
70
+ > h4,
71
+ > svg {
72
+ color: @color;
73
+ }
74
+
55
75
  > p {
56
76
  color: desaturate(@color, 22%);
57
77
  }
@@ -60,9 +80,13 @@
60
80
  &[data-type='error'] {
61
81
  @color: darken(desaturate(@c-error, 20%), 1%);
62
82
 
63
- color: @color;
64
83
  background: lighten(@c-error, 51%);
65
84
 
85
+ > h4,
86
+ > svg {
87
+ color: @color;
88
+ }
89
+
66
90
  > p {
67
91
  color: desaturate(@color, 25%);
68
92
  }