dumi 1.1.45 → 2.0.0-alpha.0

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