@umijs/bundler-utoopack 4.6.61 → 4.6.62

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.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,204 @@
1
+ const ACTIONS = {
2
+ BUILT: 'built',
3
+ BUILDING: 'building',
4
+ RELOAD: 'reload',
5
+ SYNC: 'sync',
6
+ TURBOPACK_CONNECTED: 'turbopack-connected',
7
+ };
8
+
9
+ console.log('[utoopack] connecting...');
10
+
11
+ let hasCompileErrors = false;
12
+ let shouldReloadOnRecovery = false;
13
+ let overlayIframe = null;
14
+
15
+ const enableErrorOverlay =
16
+ typeof process === 'undefined' ||
17
+ !process.env ||
18
+ process.env.ERROR_OVERLAY !== 'none';
19
+
20
+ function escapeHtml(value) {
21
+ return value
22
+ .replace(/&/g, '&')
23
+ .replace(/</g, '&lt;')
24
+ .replace(/>/g, '&gt;')
25
+ .replace(/"/g, '&quot;')
26
+ .replace(/'/g, '&#39;');
27
+ }
28
+
29
+ function dismissBuildError() {
30
+ if (overlayIframe) {
31
+ overlayIframe.remove();
32
+ overlayIframe = null;
33
+ }
34
+ }
35
+
36
+ function reportBuildError(message) {
37
+ dismissBuildError();
38
+
39
+ overlayIframe = document.createElement('iframe');
40
+ overlayIframe.style.cssText = [
41
+ 'position: fixed',
42
+ 'top: 0',
43
+ 'left: 0',
44
+ 'width: 100%',
45
+ 'height: 100%',
46
+ 'border: none',
47
+ 'z-index: 2147483647',
48
+ ].join(';');
49
+ document.body.appendChild(overlayIframe);
50
+
51
+ const doc = overlayIframe.contentDocument;
52
+ if (!doc) return;
53
+
54
+ doc.open();
55
+ doc.write(`<!doctype html>
56
+ <html>
57
+ <head>
58
+ <meta charset="utf-8" />
59
+ <style>
60
+ html, body { margin: 0; width: 100%; min-height: 100%; background: #18191a; color: #f6f7f8; font-family: Menlo, Monaco, Consolas, "Liberation Mono", monospace; }
61
+ main { box-sizing: border-box; min-height: 100vh; padding: 32px; }
62
+ h1 { margin: 0 0 24px; color: #ff6b6b; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 28px; line-height: 1.2; font-weight: 600; }
63
+ pre { margin: 0; white-space: pre-wrap; word-break: break-word; font-size: 14px; line-height: 1.6; }
64
+ button { position: fixed; top: 16px; right: 16px; width: 32px; height: 32px; border: 1px solid #555; border-radius: 4px; background: #242526; color: #f6f7f8; font-size: 22px; line-height: 1; cursor: pointer; }
65
+ </style>
66
+ </head>
67
+ <body>
68
+ <button aria-label="Close">&times;</button>
69
+ <main>
70
+ <h1>Failed to compile</h1>
71
+ <pre>${escapeHtml(message)}</pre>
72
+ </main>
73
+ <script>
74
+ document.querySelector('button').addEventListener('click', function () {
75
+ window.parent.postMessage({ type: 'utoopack-dismiss-error-overlay' }, '*');
76
+ });
77
+ </script>
78
+ </body>
79
+ </html>`);
80
+ doc.close();
81
+ }
82
+
83
+ function getHost() {
84
+ if (
85
+ typeof process !== 'undefined' &&
86
+ process.env &&
87
+ process.env.SOCKET_SERVER
88
+ ) {
89
+ return new URL(process.env.SOCKET_SERVER);
90
+ }
91
+ return location;
92
+ }
93
+
94
+ function getSocketUrl() {
95
+ const host = getHost();
96
+ const isHttps = host.protocol === 'https:';
97
+ return `${isHttps ? 'wss' : 'ws'}://${host.host}/turbopack-hmr`;
98
+ }
99
+
100
+ function getPingUrl() {
101
+ const host = getHost();
102
+ return `${host.protocol}//${host.host}/__umi_ping`;
103
+ }
104
+
105
+ function getErrorMessage(error) {
106
+ if (!error) return 'Unknown utoopack compile error.';
107
+ if (typeof error === 'string') return error;
108
+ return [error.message, error.details, error.stack].filter(Boolean).join('\n');
109
+ }
110
+
111
+ function handleErrors(errors) {
112
+ hasCompileErrors = true;
113
+ shouldReloadOnRecovery = true;
114
+
115
+ const messages = errors.map(getErrorMessage).filter(Boolean);
116
+ const firstError = messages[0] || 'Unknown utoopack compile error.';
117
+
118
+ if (enableErrorOverlay) {
119
+ reportBuildError(firstError);
120
+ }
121
+
122
+ messages.forEach((message) => console.error(message));
123
+ }
124
+
125
+ function handleWarnings(warnings) {
126
+ warnings.map(getErrorMessage).filter(Boolean).forEach((message) => {
127
+ console.warn(message);
128
+ });
129
+ }
130
+
131
+ function handleSuccess() {
132
+ const recoveredFromCompileErrors = hasCompileErrors;
133
+ hasCompileErrors = false;
134
+
135
+ if (enableErrorOverlay) {
136
+ dismissBuildError();
137
+ }
138
+
139
+ if (recoveredFromCompileErrors && shouldReloadOnRecovery) {
140
+ shouldReloadOnRecovery = false;
141
+ window.location.reload();
142
+ }
143
+ }
144
+
145
+ function handleMessage(payload) {
146
+ switch (payload.action) {
147
+ case ACTIONS.TURBOPACK_CONNECTED:
148
+ console.log('[utoopack] connected.');
149
+ break;
150
+ case ACTIONS.BUILDING:
151
+ console.log('[utoopack] compiling...');
152
+ break;
153
+ case ACTIONS.SYNC:
154
+ case ACTIONS.BUILT:
155
+ if (payload.errors && payload.errors.length) {
156
+ handleErrors(payload.errors);
157
+ } else {
158
+ handleSuccess();
159
+ }
160
+ if (payload.warnings && payload.warnings.length) {
161
+ handleWarnings(payload.warnings);
162
+ }
163
+ break;
164
+ case ACTIONS.RELOAD:
165
+ window.location.reload();
166
+ break;
167
+ default:
168
+ break;
169
+ }
170
+ }
171
+
172
+ async function waitForSuccessfulPing(ms = 1000) {
173
+ // eslint-disable-next-line no-constant-condition
174
+ while (true) {
175
+ try {
176
+ await fetch(getPingUrl());
177
+ break;
178
+ } catch (e) {
179
+ await new Promise((resolve) => setTimeout(resolve, ms));
180
+ }
181
+ }
182
+ }
183
+
184
+ const socket = new WebSocket(getSocketUrl());
185
+
186
+ window.addEventListener('message', (event) => {
187
+ if (event.data && event.data.type === 'utoopack-dismiss-error-overlay') {
188
+ dismissBuildError();
189
+ }
190
+ });
191
+
192
+ socket.addEventListener('message', ({ data }) => {
193
+ try {
194
+ handleMessage(JSON.parse(data));
195
+ } catch (e) {
196
+ console.error(e);
197
+ }
198
+ });
199
+
200
+ socket.addEventListener('close', async () => {
201
+ console.info('[utoopack] Dev server disconnected. Polling for restart...');
202
+ await waitForSuccessfulPing();
203
+ window.location.reload();
204
+ });
package/dist/config.js CHANGED
@@ -42,6 +42,9 @@ var import_pack = require("@utoo/pack");
42
42
  var import_fs = __toESM(require("fs"));
43
43
  var import_path = require("path");
44
44
  var DEFAULT_STATIC_PATH_PREFIX = "static/";
45
+ var UTOOPACK_OVERLAY_CLIENT_ENTRY = normalizeUtoopackPath(
46
+ require.resolve("../client/client/client.js")
47
+ );
45
48
  function getAssetModuleFilename(staticPathPrefix) {
46
49
  const prefix = staticPathPrefix !== void 0 ? staticPathPrefix : DEFAULT_STATIC_PATH_PREFIX;
47
50
  return `${prefix}[name].[contenthash:8]`;
@@ -221,6 +224,85 @@ function normalizeUtoopackEntry(entry) {
221
224
  }
222
225
  return entry;
223
226
  }
227
+ function getRelativeImportSpecifier(fromFile, toFile) {
228
+ const relativePath = normalizeUtoopackPath(
229
+ (0, import_path.relative)((0, import_path.dirname)(fromFile), toFile)
230
+ );
231
+ return relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
232
+ }
233
+ function getOverlayEntryImport(request, cwd, fromFile) {
234
+ if (request.startsWith(".") || (0, import_path.isAbsolute)(request)) {
235
+ return getRelativeImportSpecifier(
236
+ fromFile,
237
+ normalizeUtoopackPath((0, import_path.resolve)(cwd, request))
238
+ );
239
+ }
240
+ return request;
241
+ }
242
+ function getOverlayEntryPath(cwd, entryName) {
243
+ const safeEntryName = entryName.replace(/[^a-zA-Z0-9_-]/g, "_");
244
+ return normalizeUtoopackPath(
245
+ (0, import_path.join)(
246
+ cwd,
247
+ "node_modules/.cache/umi/utoopack-overlay",
248
+ `${safeEntryName}.js`
249
+ )
250
+ );
251
+ }
252
+ function writeUtoopackOverlayEntry(opts) {
253
+ const entryPath = getOverlayEntryPath(opts.cwd, opts.entryName);
254
+ const overlayClientPath = normalizeUtoopackPath(
255
+ (0, import_path.join)((0, import_path.dirname)(entryPath), "client.js")
256
+ );
257
+ import_fs.default.mkdirSync((0, import_path.dirname)(entryPath), { recursive: true });
258
+ import_fs.default.copyFileSync(UTOOPACK_OVERLAY_CLIENT_ENTRY, overlayClientPath);
259
+ import_fs.default.writeFileSync(
260
+ entryPath,
261
+ [
262
+ getRelativeImportSpecifier(entryPath, overlayClientPath),
263
+ ...opts.imports.map(
264
+ (item) => getOverlayEntryImport(item, opts.cwd, entryPath)
265
+ )
266
+ ].map((item) => `import ${JSON.stringify(item)};`).join("\n") + "\n",
267
+ "utf-8"
268
+ );
269
+ return entryPath;
270
+ }
271
+ function prependUtoopackOverlayClient(entry, cwd, entryName = "umi") {
272
+ if (typeof entry === "string") {
273
+ return writeUtoopackOverlayEntry({
274
+ cwd,
275
+ entryName,
276
+ imports: [entry]
277
+ });
278
+ }
279
+ if (Array.isArray(entry)) {
280
+ return writeUtoopackOverlayEntry({
281
+ cwd,
282
+ entryName,
283
+ imports: entry
284
+ });
285
+ }
286
+ if (entry && typeof entry === "object") {
287
+ if ("import" in entry) {
288
+ return {
289
+ ...entry,
290
+ import: prependUtoopackOverlayClient(
291
+ entry.import,
292
+ cwd,
293
+ entryName
294
+ )
295
+ };
296
+ }
297
+ return Object.fromEntries(
298
+ Object.entries(entry).map(([key, value]) => [
299
+ key,
300
+ prependUtoopackOverlayClient(value, cwd, key)
301
+ ])
302
+ );
303
+ }
304
+ return entry;
305
+ }
224
306
  function normalizeUtoopackOpts(opts) {
225
307
  return {
226
308
  ...opts,
@@ -231,7 +313,9 @@ function normalizeUtoopackOpts(opts) {
231
313
  }
232
314
  function getNormalizedAlias(alias, rootDir) {
233
315
  const newAlias = Object.fromEntries(
234
- Object.entries(alias || {}).map(([key, value]) => [
316
+ Object.entries(alias || {}).filter((entry) => {
317
+ return typeof entry[1] === "string";
318
+ }).map(([key, value]) => [
235
319
  normalizeUtoopackPath(key),
236
320
  normalizeUtoopackPath(value)
237
321
  ])
@@ -543,7 +627,7 @@ async function getProdUtooPackConfig(rawOpts) {
543
627
  ...utooBundlerOpts,
544
628
  tracing: false,
545
629
  config: import_utils.lodash.merge(
546
- import_utils.lodash.omit(utooBundlerOpts.config, ["define"]),
630
+ import_utils.lodash.omit(utooBundlerOpts.config, ["define", "resolve"]),
547
631
  {
548
632
  output: {
549
633
  clean: opts.clean,
@@ -556,6 +640,7 @@ async function getProdUtooPackConfig(rawOpts) {
556
640
  concatenateModules: true
557
641
  },
558
642
  resolve: {
643
+ ...utooBundlerOpts.config.resolve || {},
559
644
  alias: getNormalizedAlias(
560
645
  (_a = utooBundlerOpts.config.resolve) == null ? void 0 : _a.alias,
561
646
  opts.rootDir
@@ -649,6 +734,10 @@ async function getDevUtooPackConfig(rawOpts) {
649
734
  hmr: false,
650
735
  analyze: process.env.ANALYZE
651
736
  });
737
+ webpackConfig = {
738
+ ...webpackConfig,
739
+ entry: prependUtoopackOverlayClient(webpackConfig.entry, opts.cwd)
740
+ };
652
741
  let utooBundlerOpts = (0, import_pack.compatOptionsFromWebpack)({
653
742
  ...import_utils.lodash.omit(webpackConfig, ["target", "module", "externals"]),
654
743
  webpackMode: true
@@ -685,7 +774,7 @@ async function getDevUtooPackConfig(rawOpts) {
685
774
  }
686
775
  } : {},
687
776
  config: import_utils.lodash.merge(
688
- import_utils.lodash.omit(utooBundlerOpts.config, ["define"]),
777
+ import_utils.lodash.omit(utooBundlerOpts.config, ["define", "resolve"]),
689
778
  {
690
779
  output: {
691
780
  clean: opts.clean === void 0 ? true : opts.clean,
@@ -694,6 +783,7 @@ async function getDevUtooPackConfig(rawOpts) {
694
783
  ...opts.disableCopy ? { copy: [] } : { copy: ["public"].concat(copy) }
695
784
  },
696
785
  resolve: {
786
+ ...utooBundlerOpts.config.resolve || {},
697
787
  alias: getNormalizedAlias(
698
788
  (_a = utooBundlerOpts.config.resolve) == null ? void 0 : _a.alias,
699
789
  opts.rootDir
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "@umijs/bundler-utoopack",
3
- "version": "4.6.61",
3
+ "version": "4.6.62",
4
4
  "description": "@umijs/bundler-utoopack",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
+ "client",
8
9
  "dist"
9
10
  ],
10
11
  "dependencies": {
11
- "@utoo/pack": "1.4.12",
12
+ "@utoo/pack": "1.4.13",
12
13
  "compression": "^1.7.4",
13
14
  "connect-history-api-fallback": "^2.0.0",
14
15
  "cors": "^2.8.5",
@@ -20,8 +21,8 @@
20
21
  "resolve-url-loader": "5.0.0",
21
22
  "sass": "1.54.0",
22
23
  "sass-loader": "13.2.0",
23
- "@umijs/bundler-utils": "4.6.61",
24
- "@umijs/bundler-webpack": "4.6.61"
24
+ "@umijs/bundler-utils": "4.6.62",
25
+ "@umijs/bundler-webpack": "4.6.62"
25
26
  },
26
27
  "devDependencies": {
27
28
  "father": "4.1.5"