@umijs/preset-umi 4.0.62 → 4.0.64

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.
@@ -46,7 +46,7 @@ var clickToComponent_default = (api) => {
46
46
  });
47
47
  }
48
48
  },
49
- enableBy: api.EnableBy.config
49
+ enableBy: api.env === "development" ? api.EnableBy.config : () => false
50
50
  });
51
51
  const pkgPath = (0, import_path.dirname)(require.resolve("click-to-react-component"));
52
52
  api.modifyConfig((memo) => {
@@ -0,0 +1,6 @@
1
+ import { IApi } from '../../types';
2
+ export declare function getGlobalVars(opts: {
3
+ content: string;
4
+ }): Promise<string[]>;
5
+ declare const _default: (api: IApi) => void;
6
+ export default _default;
@@ -0,0 +1,123 @@
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(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/features/esbuildHelperChecker/esbuildHelperChecker.ts
30
+ var esbuildHelperChecker_exports = {};
31
+ __export(esbuildHelperChecker_exports, {
32
+ default: () => esbuildHelperChecker_default,
33
+ getGlobalVars: () => getGlobalVars
34
+ });
35
+ module.exports = __toCommonJS(esbuildHelperChecker_exports);
36
+ var parser = __toESM(require("@umijs/bundler-utils/compiled/babel/parser"));
37
+ var t = __toESM(require("@umijs/bundler-utils/compiled/babel/types"));
38
+ var import_utils = require("@umijs/utils");
39
+ var import_assert = __toESM(require("assert"));
40
+ var import_fs = __toESM(require("fs"));
41
+ var import_path = __toESM(require("path"));
42
+ async function checkDir(opts) {
43
+ import_utils.logger.info(
44
+ `[esbuildHelperChecker] Checking esbuild helpers from your dist files...`
45
+ );
46
+ const jsFiles = import_fs.default.readdirSync(opts.dir).filter((file) => file.endsWith(".js"));
47
+ const varMap = {};
48
+ for (const jsFile of jsFiles) {
49
+ const vars = await getGlobalVars({
50
+ content: import_fs.default.readFileSync(import_path.default.join(opts.dir, jsFile), "utf-8")
51
+ });
52
+ for (const v of vars) {
53
+ varMap[v] = varMap[v] || [];
54
+ varMap[v].push(jsFile);
55
+ }
56
+ }
57
+ const conflicts = Object.keys(varMap).filter((v) => varMap[v].length > 1).map((v) => `${v} (${varMap[v].join(", ")})`);
58
+ if (conflicts.length) {
59
+ throw new Error(
60
+ `Found conflicts in esbuild helpers: ${conflicts.join(
61
+ ", "
62
+ )}, please set esbuildMinifyIIFE: true in your config file.`
63
+ );
64
+ }
65
+ import_utils.logger.info(`[esbuildHelperChecker] No conflicts found.`);
66
+ }
67
+ async function getGlobalVars(opts) {
68
+ const ast = parser.parse(opts.content, {
69
+ sourceType: "module",
70
+ sourceFilename: "foo.js",
71
+ plugins: []
72
+ });
73
+ const vars = [];
74
+ ast.program.body.forEach((node) => {
75
+ if (t.isVariableDeclaration(node)) {
76
+ node.declarations.forEach((declaration) => {
77
+ if (t.isVariableDeclarator(declaration)) {
78
+ if (t.isIdentifier(declaration.id)) {
79
+ vars.push(declaration.id.name);
80
+ }
81
+ }
82
+ });
83
+ }
84
+ });
85
+ return vars;
86
+ }
87
+ var esbuildHelperChecker_default = (api) => {
88
+ api.registerCommand({
89
+ name: "esbuildHelperChecker",
90
+ description: "check esbuild helper conflicts",
91
+ configResolveMode: "loose",
92
+ async fn({ args }) {
93
+ const targetDir = args._[0];
94
+ (0, import_assert.default)(targetDir, "target directory is required");
95
+ await checkDir({
96
+ dir: import_path.default.resolve(process.cwd(), targetDir)
97
+ });
98
+ }
99
+ });
100
+ api.onBuildComplete(async ({ err }) => {
101
+ if (err)
102
+ return;
103
+ const jsMinifier = api.config.jsMinifier || "esbuild";
104
+ if (jsMinifier !== "esbuild")
105
+ return;
106
+ if (api.config.esbuildMinifyIIFE)
107
+ return;
108
+ if (process.env.COMPRESS === "none")
109
+ return;
110
+ try {
111
+ await checkDir({
112
+ dir: api.paths.absOutputPath
113
+ });
114
+ } catch (e) {
115
+ import_utils.logger.fatal(import_utils.chalk.red(`[esbuildHelperChecker] ${e.message}`));
116
+ process.exit(1);
117
+ }
118
+ });
119
+ };
120
+ // Annotate the CommonJS export names for ESM import in node:
121
+ 0 && (module.exports = {
122
+ getGlobalVars
123
+ });
@@ -58,7 +58,8 @@ var mpa_default = (api) => {
58
58
  memo.mpa = {
59
59
  entry: await collectEntryWithTimeCount(
60
60
  api.paths.absPagesPath,
61
- api.config.mpa
61
+ api.config.mpa,
62
+ api.userConfig.mountElementId
62
63
  )
63
64
  };
64
65
  return memo;
@@ -67,7 +68,8 @@ var mpa_default = (api) => {
67
68
  if (!isFirstTime) {
68
69
  api.appData.mpa.entry = await collectEntryWithTimeCount(
69
70
  api.paths.absPagesPath,
70
- api.config.mpa
71
+ api.config.mpa,
72
+ api.userConfig.mountElementId
71
73
  );
72
74
  }
73
75
  const isReact18 = api.appData.react.version.startsWith("18.");
@@ -128,19 +130,29 @@ ${renderer}
128
130
  return memo;
129
131
  });
130
132
  };
131
- async function collectEntryWithTimeCount(root, opts) {
133
+ async function collectEntryWithTimeCount(root, opts, mountElementId) {
132
134
  const d = new Date();
133
- const entries = await collectEntry(root, opts);
135
+ const entries = await collectEntry(root, opts, mountElementId);
134
136
  import_utils.logger.info(
135
137
  `[MPA] Collect Entries in ${new Date().getTime() - d.getTime()}ms`
136
138
  );
137
139
  return entries;
138
140
  }
139
- async function collectEntry(root, opts) {
141
+ function filterEntry(dir) {
142
+ if (!process.env.MPA_FILTER) {
143
+ return true;
144
+ }
145
+ const entries = process.env.MPA_FILTER.split(",");
146
+ return entries.includes(dir);
147
+ }
148
+ async function collectEntry(root, opts, mountElementId) {
140
149
  return await (0, import_fs.readdirSync)(root).reduce(
141
150
  async (memoP, dir) => {
142
151
  var _a;
143
152
  const memo = await memoP;
153
+ if (!filterEntry(dir)) {
154
+ return memo;
155
+ }
144
156
  const absDir = (0, import_path.join)(root, dir);
145
157
  if ((0, import_fs.existsSync)(absDir) && (0, import_fs.statSync)(absDir).isDirectory()) {
146
158
  const indexFile = getIndexFile(absDir);
@@ -152,7 +164,7 @@ async function collectEntry(root, opts) {
152
164
  name,
153
165
  file: indexFile,
154
166
  tmpFilePath: `mpa/${dir}${(0, import_path.extname)(indexFile)}`,
155
- mountElementId: "root",
167
+ mountElementId: mountElementId || "root",
156
168
  ...globalConfig,
157
169
  ...config,
158
170
  title: (globalConfig == null ? void 0 : globalConfig.title) || config.title || dir
@@ -35,16 +35,47 @@ module.exports = __toCommonJS(prepare_exports);
35
35
  var import_utils = require("@umijs/utils");
36
36
  var import_path = __toESM(require("path"));
37
37
  var import_watch = require("../../commands/dev/watch");
38
+ var parser = (0, import_utils.importLazy)(
39
+ require.resolve("@umijs/es-module-parser")
40
+ );
38
41
  var prepare_default = (api) => {
39
- function updateAppdata(_buildResult) {
40
- const buildResult = import_utils.lodash.cloneDeep(_buildResult);
42
+ function updateAppdata(prepareData) {
43
+ var _a;
44
+ const buildResult = import_utils.lodash.cloneDeep(prepareData.buildResult);
41
45
  (buildResult.outputFiles || []).forEach((file) => {
42
46
  file == null ? true : delete file.contents;
43
47
  });
48
+ const nextFileImports = prepareData.fileImports ?? ((_a = api.appData.prepare) == null ? void 0 : _a.fileImports);
44
49
  api.appData.prepare = {
45
- buildResult
50
+ buildResult,
51
+ fileImports: nextFileImports
46
52
  };
47
53
  }
54
+ async function parseProjectImportSpecifiers(br) {
55
+ const files = (Object.keys(br.metafile.inputs) || []).filter(
56
+ import_utils.isJavaScriptFile
57
+ );
58
+ if (files.length === 0) {
59
+ return {};
60
+ }
61
+ try {
62
+ const start = Date.now();
63
+ const fileImports = await parser.parseFiles(
64
+ files.map((f) => import_path.default.join(api.paths.cwd, f))
65
+ );
66
+ api.telemetry.record({
67
+ name: "parse",
68
+ payload: { duration: Date.now() - start }
69
+ });
70
+ return fileImports;
71
+ } catch (e) {
72
+ api.telemetry.record({
73
+ name: "parse:error",
74
+ payload: {}
75
+ });
76
+ return void 0;
77
+ }
78
+ }
48
79
  api.register({
49
80
  key: "onGenerateFiles",
50
81
  async fn({ isFirstTime }) {
@@ -67,13 +98,15 @@ var prepare_default = (api) => {
67
98
  const buildResult = await build({
68
99
  entryPoints: [entryFile],
69
100
  watch: watch && {
70
- onRebuildSuccess({ result }) {
71
- updateAppdata(result);
72
- api.applyPlugins({
101
+ async onRebuildSuccess({ result }) {
102
+ const fileImports2 = await parseProjectImportSpecifiers(result);
103
+ updateAppdata({ buildResult: result, fileImports: fileImports2 });
104
+ await api.applyPlugins({
73
105
  key: "onPrepareBuildSuccess",
74
106
  args: {
75
107
  isWatch: true,
76
- result
108
+ result,
109
+ fileImports: fileImports2
77
110
  }
78
111
  });
79
112
  }
@@ -90,11 +123,13 @@ var prepare_default = (api) => {
90
123
  (_a = buildResult.stop) == null ? void 0 : _a.call(buildResult);
91
124
  });
92
125
  }
93
- updateAppdata(buildResult);
126
+ const fileImports = await parseProjectImportSpecifiers(buildResult);
127
+ updateAppdata({ buildResult, fileImports });
94
128
  await api.applyPlugins({
95
129
  key: "onPrepareBuildSuccess",
96
130
  args: {
97
- result: buildResult
131
+ result: buildResult,
132
+ fileImports
98
133
  }
99
134
  });
100
135
  },
@@ -1,6 +1,8 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __export = (target, all) => {
6
8
  for (var name in all)
@@ -14,6 +16,14 @@ var __copyProps = (to, from, except, desc) => {
14
16
  }
15
17
  return to;
16
18
  };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
17
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
28
 
19
29
  // src/features/ui/ui.ts
@@ -22,18 +32,114 @@ __export(ui_exports, {
22
32
  default: () => ui_default
23
33
  });
24
34
  module.exports = __toCommonJS(ui_exports);
35
+ var import_utils = require("@umijs/utils");
36
+ var import_fs = __toESM(require("fs"));
37
+ var import_path = __toESM(require("path"));
38
+ var import_sirv = __toESM(require("../../../compiled/sirv"));
25
39
  var ENTRY_PATH = "/__umi_ui/entry";
26
40
  var ui_default = (api) => {
27
41
  api.describe({
28
42
  enableBy() {
29
- return api.name === "dev" && api.args.ui;
43
+ return api.name === "dev" && api.userConfig.ui;
44
+ },
45
+ config: {
46
+ schema({ zod }) {
47
+ return zod.object({});
48
+ }
49
+ }
50
+ });
51
+ const uiDir = import_path.default.dirname(require.resolve("@umijs/ui/package.json"));
52
+ api.onCheck(() => {
53
+ if (!import_fs.default.existsSync(import_path.default.join(uiDir, "dist"))) {
54
+ if ((0, import_utils.isLocalDev)()) {
55
+ throw new Error(
56
+ `@umijs/ui not built, please run 'pnpm ui:build' first.`
57
+ );
58
+ } else {
59
+ throw new Error(`@umijs/ui not found, please fill an issue on github.`);
60
+ }
30
61
  }
31
62
  });
32
63
  api.onBeforeMiddleware(({ app }) => {
33
- app.use(ENTRY_PATH, async (req, _res) => {
34
- req;
64
+ app.use(
65
+ ENTRY_PATH,
66
+ (0, import_sirv.default)(import_path.default.join(uiDir, "dist"), {
67
+ etag: true,
68
+ dev: true,
69
+ single: true
70
+ })
71
+ );
72
+ });
73
+ api.addHTMLStyles(() => {
74
+ return [
75
+ `
76
+ #umi-ui-container.umi-ui-container-show {
77
+ display: block;
78
+ }
79
+ #umi-ui-container {
80
+ position: fixed;
81
+ bottom: 10px;
82
+ left: calc(10vw + 10px);
83
+ height: calc(75vh - 20px);
84
+ width: calc(80vw - 20px);
85
+ display: none;
86
+ border-radius: .5rem;
87
+ z-index: 2147483646;
88
+ }
89
+ #umi-ui-toggle-btn {
90
+ width: 40px;
91
+ height: 40px;
92
+ position: fixed;
93
+ left: 50%;
94
+ bottom: -20px;
95
+ transform: translateX(-50%);
96
+ cursor: pointer;
97
+ display: flex;
98
+ background-size: 100% 100%;
99
+ background-image: url('data:image/png;base64,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');
100
+ transition: bottom 0.1s linear;
101
+ z-index: 2147483647;
102
+ }
103
+ #umi-ui-toggle-btn:hover {
104
+ bottom: 0px;
105
+ }
106
+ #umi-ui-iframe {
107
+ width: 100%;
108
+ height: 100%;
109
+ outline: none;
110
+ border: 1px solid rgba(125,125,125,0.2);
111
+ border-radius: 0.5rem;
112
+ }
113
+ `
114
+ ];
115
+ });
116
+ api.onGenerateFiles(({ isFirstTime }) => {
117
+ if (!isFirstTime)
118
+ return;
119
+ api.writeTmpFile({
120
+ path: "core/ui.ts",
121
+ noPluginDir: true,
122
+ content: `
123
+ // button and iframe
124
+ const container = document.createElement('div')
125
+ container.id = 'umi-ui-container';
126
+ const iframe = document.createElement('iframe');
127
+ iframe.id = 'umi-ui-iframe';
128
+ iframe.src = '${process.env.DEBUG_UMI_UI_PATH || ENTRY_PATH}';
129
+ const uiBtn = document.createElement('div');
130
+ uiBtn.id = 'umi-ui-toggle-btn';
131
+ container.appendChild(iframe);
132
+ document.body.appendChild(uiBtn);
133
+ document.body.appendChild(container);
134
+ uiBtn.addEventListener('click', () => {
135
+ container.classList.toggle('umi-ui-container-show');
136
+ });
137
+ `
35
138
  });
36
139
  });
140
+ api.addEntryImports(() => {
141
+ return [{ source: "@@/core/ui" }];
142
+ });
37
143
  };
38
144
  // Annotate the CommonJS export names for ESM import in node:
39
145
  0 && (module.exports = {});
package/dist/index.js CHANGED
@@ -48,6 +48,7 @@ var src_default = () => {
48
48
  require.resolve("./features/crossorigin/crossorigin"),
49
49
  require.resolve("./features/depsOnDemand/depsOnDemand"),
50
50
  require.resolve("./features/devTool/devTool"),
51
+ require.resolve("./features/esbuildHelperChecker/esbuildHelperChecker"),
51
52
  require.resolve("./features/esmi/esmi"),
52
53
  require.resolve("./features/exportStatic/exportStatic"),
53
54
  require.resolve("./features/favicons/favicons"),
package/dist/types.d.ts CHANGED
@@ -6,6 +6,7 @@ import { createWebSocketServer } from '@umijs/bundler-webpack/dist/server/ws';
6
6
  import type { IConfig } from '@umijs/bundler-webpack/dist/types';
7
7
  import type { IAdd, IEvent, IModify, IRoute as ICoreRoute, IServicePluginAPI, PluginAPI } from '@umijs/core';
8
8
  import { Env } from '@umijs/core';
9
+ import type { Declaration } from '@umijs/es-module-parser';
9
10
  import type { getMarkup } from '@umijs/server';
10
11
  import type { CheerioAPI } from '@umijs/utils/compiled/cheerio';
11
12
  import type { InlineConfig as ViteInlineConfig } from 'vite';
@@ -188,6 +189,7 @@ export declare type IApi = PluginAPI & IServicePluginAPI & {
188
189
  origin: Record<string, any>;
189
190
  }>;
190
191
  onPrepareBuildSuccess: IEvent<{
192
+ fileImports?: Record<string, Declaration[]>;
191
193
  isWatch: boolean;
192
194
  result: ESBuildBuildResult;
193
195
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umijs/preset-umi",
3
- "version": "4.0.62",
3
+ "version": "4.0.64",
4
4
  "description": "@umijs/preset-umi",
5
5
  "homepage": "https://github.com/umijs/umi/tree/master/packages/preset-umi#readme",
6
6
  "bugs": "https://github.com/umijs/umi/issues",
@@ -21,6 +21,7 @@
21
21
  "dependencies": {
22
22
  "@iconify/utils": "2.1.1",
23
23
  "@svgr/core": "6.5.1",
24
+ "@umijs/es-module-parser": "0.0.7",
24
25
  "@umijs/history": "5.3.1",
25
26
  "babel-plugin-dynamic-import-node": "2.3.3",
26
27
  "click-to-react-component": "^1.0.8",
@@ -36,19 +37,20 @@
36
37
  "react-router": "6.3.0",
37
38
  "react-router-dom": "6.3.0",
38
39
  "regenerator-runtime": "0.13.11",
39
- "@umijs/bundler-utils": "4.0.62",
40
- "@umijs/ast": "4.0.62",
41
- "@umijs/core": "4.0.62",
42
- "@umijs/babel-preset-umi": "4.0.62",
43
- "@umijs/bundler-webpack": "4.0.62",
44
- "@umijs/renderer-react": "4.0.62",
45
- "@umijs/bundler-vite": "4.0.62",
46
- "@umijs/server": "4.0.62",
47
- "@umijs/utils": "4.0.62",
48
- "@umijs/plugin-run": "4.0.62",
49
- "@umijs/mfsu": "4.0.62",
50
- "@umijs/zod2ts": "4.0.62",
51
- "@umijs/did-you-know": "1.0.3"
40
+ "@umijs/ast": "4.0.64",
41
+ "@umijs/babel-preset-umi": "4.0.64",
42
+ "@umijs/bundler-webpack": "4.0.64",
43
+ "@umijs/bundler-utils": "4.0.64",
44
+ "@umijs/bundler-vite": "4.0.64",
45
+ "@umijs/core": "4.0.64",
46
+ "@umijs/mfsu": "4.0.64",
47
+ "@umijs/plugin-run": "4.0.64",
48
+ "@umijs/renderer-react": "4.0.64",
49
+ "@umijs/server": "4.0.64",
50
+ "@umijs/zod2ts": "4.0.64",
51
+ "@umijs/utils": "4.0.64",
52
+ "@umijs/did-you-know": "1.0.3",
53
+ "@umijs/ui": "3.0.0-alpha.0"
52
54
  },
53
55
  "devDependencies": {
54
56
  "@manypkg/get-packages": "1.1.3",
@@ -1,6 +1,6 @@
1
1
  {{{ beforeImport }}}
2
2
  interface IDefaultRuntimeConfig {
3
- onRouteChange?: (props: { routes: any, clientRoutes: any, location: any, action:any }) => void;
3
+ onRouteChange?: (props: { routes: any, clientRoutes: any, location: any, action: any, isFirst: boolean }) => void;
4
4
  patchRoutes?: (props: { routes: any }) => void;
5
5
  patchClientRoutes?: (props: { routes: any }) => void;
6
6
  render?: (oldRender: () => void) => void;
@@ -11,4 +11,4 @@ interface IDefaultRuntimeConfig {
11
11
 
12
12
  export function defineApp(config: RuntimeConfig): RuntimeConfig {
13
13
  return config;
14
- }
14
+ }