-
Notifications
You must be signed in to change notification settings - Fork 30k
[turbopack] Mark packages as side effect free when local analysis determines that they are. #86398
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Tests Passed |
Stats from current PRDefault Build (Increase detected
|
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| buildDuration | 17.9s | 14.9s | N/A |
| buildDurationCached | 13.8s | 10.9s | N/A |
| nodeModulesSize | 457 MB | 457 MB | |
| nextStartRea..uration (ms) | 717ms | 717ms | ✓ |
Client Bundles (main, webpack) Overall increase ⚠️
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| 4765.HASH.js gzip | 169 B | 169 B | ✓ |
| 6566-HASH.js gzip | 5.4 kB | 5.38 kB | N/A |
| 7740-HASH.js gzip | 53.2 kB | 52.5 kB | N/A |
| 8258-HASH.js gzip | 4.47 kB | 4.48 kB | N/A |
| b0b1acf2-HASH.js gzip | 62.3 kB | 62.3 kB | N/A |
| framework-HASH.js gzip | 59.7 kB | 59.7 kB | N/A |
| main-app-HASH.js gzip | 254 B | 252 B | N/A |
| main-HASH.js gzip | 38.5 kB | 38.8 kB | |
| webpack-HASH.js gzip | 1.69 kB | 1.69 kB | ✓ |
| Overall change | 40.4 kB | 40.6 kB |
Legacy Client Bundles (polyfills)
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
| Overall change | 39.4 kB | 39.4 kB | ✓ |
Client Pages
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| _app-HASH.js gzip | 193 B | 192 B | N/A |
| _error-HASH.js gzip | 181 B | 182 B | N/A |
| css-HASH.js gzip | 335 B | 336 B | N/A |
| dynamic-HASH.js gzip | 1.81 kB | 1.8 kB | N/A |
| edge-ssr-HASH.js gzip | 254 B | 256 B | N/A |
| head-HASH.js gzip | 350 B | 350 B | ✓ |
| hooks-HASH.js gzip | 385 B | 383 B | N/A |
| image-HASH.js gzip | 580 B | 580 B | ✓ |
| index-HASH.js gzip | 259 B | 259 B | ✓ |
| link-HASH.js gzip | 2.5 kB | 2.5 kB | N/A |
| routerDirect..HASH.js gzip | 320 B | 317 B | N/A |
| script-HASH.js gzip | 386 B | 384 B | N/A |
| withRouter-HASH.js gzip | 315 B | 314 B | N/A |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Overall change | 1.29 kB | 1.29 kB | ✓ |
Client Build Manifests
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 737 B | 735 B | N/A |
| Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| index.html gzip | 521 B | 522 B | N/A |
| link.html gzip | 537 B | 537 B | ✓ |
| withRouter.html gzip | 518 B | 519 B | N/A |
| Overall change | 537 B | 537 B | ✓ |
Edge SSR bundle Size Overall increase ⚠️
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 124 kB | 125 kB | |
| page.js gzip | 236 kB | 236 kB | N/A |
| Overall change | 124 kB | 125 kB |
Middleware size Overall increase ⚠️
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 658 B | 655 B | N/A |
| middleware-r..fest.js gzip | 155 B | 156 B | N/A |
| middleware.js gzip | 32.7 kB | 32.9 kB | |
| edge-runtime..pack.js gzip | 846 B | 846 B | ✓ |
| Overall change | 33.6 kB | 33.8 kB |
Next Runtimes
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 301 kB | 301 kB | N/A |
| app-page-exp..prod.js gzip | 155 kB | 155 kB | ✓ |
| app-page-tur...dev.js gzip | 301 kB | 301 kB | ✓ |
| app-page-tur..prod.js gzip | 155 kB | 155 kB | ✓ |
| app-page-tur...dev.js gzip | 298 kB | 298 kB | ✓ |
| app-page-tur..prod.js gzip | 153 kB | 153 kB | ✓ |
| app-page.run...dev.js gzip | 298 kB | 298 kB | N/A |
| app-page.run..prod.js gzip | 153 kB | 153 kB | ✓ |
| app-route-ex...dev.js gzip | 68.6 kB | 68.6 kB | ✓ |
| app-route-ex..prod.js gzip | 47.5 kB | 47.5 kB | ✓ |
| app-route-tu...dev.js gzip | 68.7 kB | 68.7 kB | ✓ |
| app-route-tu..prod.js gzip | 47.5 kB | 47.5 kB | ✓ |
| app-route-tu...dev.js gzip | 68.3 kB | 68.3 kB | ✓ |
| app-route-tu..prod.js gzip | 47.2 kB | 47.2 kB | ✓ |
| app-route.ru...dev.js gzip | 68.2 kB | 68.2 kB | ✓ |
| app-route.ru..prod.js gzip | 47.2 kB | 47.2 kB | ✓ |
| dist_client_...dev.js gzip | 326 B | 326 B | ✓ |
| dist_client_...dev.js gzip | 328 B | 328 B | ✓ |
| dist_client_...dev.js gzip | 320 B | 320 B | ✓ |
| dist_client_...dev.js gzip | 318 B | 318 B | ✓ |
| pages-api-tu...dev.js gzip | 41 kB | 41 kB | ✓ |
| pages-api-tu..prod.js gzip | 31.1 kB | 31.1 kB | ✓ |
| pages-api.ru...dev.js gzip | 41 kB | 41 kB | ✓ |
| pages-api.ru..prod.js gzip | 31.1 kB | 31.1 kB | ✓ |
| pages-turbo....dev.js gzip | 50.5 kB | 50.5 kB | ✓ |
| pages-turbo...prod.js gzip | 38 kB | 38 kB | ✓ |
| pages.runtim...dev.js gzip | 50.5 kB | 50.5 kB | ✓ |
| pages.runtim..prod.js gzip | 38 kB | 38 kB | ✓ |
| server.runti..prod.js gzip | 59.8 kB | 59.8 kB | ✓ |
| Overall change | 2.06 MB | 2.06 MB | ✓ |
build cache Overall increase ⚠️
| vercel/next.js canary | vercel/next.js simple_side_effect_free_analysis | Change | |
|---|---|---|---|
| 0.pack gzip | 3.11 MB | 3.11 MB | |
| index.pack gzip | 94.9 kB | 92.4 kB | N/A |
| Overall change | 3.11 MB | 3.11 MB |
Diff details
Diff for page.js
Diff too large to display
Diff for middleware.js
Diff too large to display
Diff for edge-ssr.js
Diff too large to display
Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
numHashes: NaN,
bitArray: [],
},
- "/": ["static\u002Fchunks\u002Fpages\u002Findex-8312816003c836ca.js"],
+ "/": ["static\u002Fchunks\u002Fpages\u002Findex-0eb0f30aae464b15.js"],
"/_error": [
- "static\u002Fchunks\u002Fpages\u002F_error-108d239ccbd01df3.js",
+ "static\u002Fchunks\u002Fpages\u002F_error-7503b65793aeda9f.js",
],
"/css": [
"static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
- "static\u002Fchunks\u002Fpages\u002Fcss-c7999ca7b397642c.js",
+ "static\u002Fchunks\u002Fpages\u002Fcss-14b4ec2febaa617d.js",
],
"/dynamic": [
- "static\u002Fchunks\u002Fpages\u002Fdynamic-1bf1b522b071e22a.js",
+ "static\u002Fchunks\u002Fpages\u002Fdynamic-24891a28ecfaf61d.js",
],
"/edge-ssr": [
- "static\u002Fchunks\u002Fpages\u002Fedge-ssr-9f01876339e3437b.js",
+ "static\u002Fchunks\u002Fpages\u002Fedge-ssr-f68757662e8cc4b5.js",
],
- "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-edae0400cfdbe933.js"],
- "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-c11320a657ec666d.js"],
+ "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-25d6de8fe25c2526.js"],
+ "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-34de3af84d413de3.js"],
"/image": [
- "static\u002Fchunks\u002F8258-9768ab794e68b1dc.js",
- "static\u002Fchunks\u002Fpages\u002Fimage-174112e04c93dfd7.js",
+ "static\u002Fchunks\u002F6316-07d5277e1ed2f1f9.js",
+ "static\u002Fchunks\u002Fpages\u002Fimage-7218f8bad067d350.js",
],
- "/link": ["static\u002Fchunks\u002Fpages\u002Flink-69a06d3260afde67.js"],
+ "/link": ["static\u002Fchunks\u002Fpages\u002Flink-fb9703d62b3bdf85.js"],
"/routerDirect": [
- "static\u002Fchunks\u002Fpages\u002FrouterDirect-eab8cdd319b4a9be.js",
+ "static\u002Fchunks\u002Fpages\u002FrouterDirect-7a0b11345ff468cf.js",
],
"/script": [
- "static\u002Fchunks\u002Fpages\u002Fscript-ae5bd9e9cf17793f.js",
+ "static\u002Fchunks\u002Fpages\u002Fscript-3fa0815377002305.js",
],
"/withRouter": [
- "static\u002Fchunks\u002Fpages\u002FwithRouter-b277df764694ea2e.js",
+ "static\u002Fchunks\u002Fpages\u002FwithRouter-608a306c0a09e667.js",
],
sortedPages: [
"\u002F",Diff for css-HASH.js
@@ -1,31 +1,7 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[9813],
{
- /***/ 4131: /***/ (module) => {
- // extracted by mini-css-extract-plugin
- module.exports = { helloWorld: "css_helloWorld__aUdUq" };
-
- /***/
- },
-
- /***/ 6015: /***/ (
- __unused_webpack_module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- (window.__NEXT_P = window.__NEXT_P || []).push([
- "/css",
- function () {
- return __webpack_require__(6854);
- },
- ]);
- if (false) {
- }
-
- /***/
- },
-
- /***/ 6854: /***/ (
+ /***/ 1048: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -39,7 +15,7 @@
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
__webpack_require__(1329);
/* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
- __webpack_require__(4131);
+ __webpack_require__(9541);
/* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
/*#__PURE__*/ __webpack_require__.n(
_css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -58,13 +34,37 @@
/***/
},
+
+ /***/ 4641: /***/ (
+ __unused_webpack_module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ (window.__NEXT_P = window.__NEXT_P || []).push([
+ "/css",
+ function () {
+ return __webpack_require__(1048);
+ },
+ ]);
+ if (false) {
+ }
+
+ /***/
+ },
+
+ /***/ 9541: /***/ (module) => {
+ // extracted by mini-css-extract-plugin
+ module.exports = { helloWorld: "css_helloWorld__aUdUq" };
+
+ /***/
+ },
},
/******/ (__webpack_require__) => {
// webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
- __webpack_exec__(6015)
+ __webpack_exec__(4641)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for dynamic-HASH.js
@@ -1,17 +1,7 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[2291],
{
- /***/ 946: /***/ (
- module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- module.exports = __webpack_require__(5104);
-
- /***/
- },
-
- /***/ 1036: /***/ (
+ /***/ 1266: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -26,7 +16,7 @@
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
__webpack_require__(1329);
/* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
- __webpack_require__(946);
+ __webpack_require__(1776);
/* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
/*#__PURE__*/ __webpack_require__.n(
next_dynamic__WEBPACK_IMPORTED_MODULE_1__
@@ -35,12 +25,12 @@
const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
() =>
__webpack_require__
- .e(/* import() */ 4765)
- .then(__webpack_require__.bind(__webpack_require__, 4765))
+ .e(/* import() */ 9715)
+ .then(__webpack_require__.bind(__webpack_require__, 9715))
.then((mod) => mod.Hello),
{
loadableGenerated: {
- webpack: () => [/*require.resolve*/ 4765],
+ webpack: () => [/*require.resolve*/ 9715],
},
}
);
@@ -67,7 +57,44 @@
/***/
},
- /***/ 3399: /***/ (
+ /***/ 1776: /***/ (
+ module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ module.exports = __webpack_require__(7760);
+
+ /***/
+ },
+
+ /***/ 3749: /***/ (
+ __unused_webpack_module,
+ exports,
+ __webpack_require__
+ ) => {
+ "use strict";
+ /* __next_internal_client_entry_do_not_use__ cjs */
+ Object.defineProperty(exports, "__esModule", {
+ value: true,
+ });
+ Object.defineProperty(exports, "LoadableContext", {
+ enumerable: true,
+ get: function () {
+ return LoadableContext;
+ },
+ });
+ const _interop_require_default = __webpack_require__(1532);
+ const _react = /*#__PURE__*/ _interop_require_default._(
+ __webpack_require__(7197)
+ );
+ const LoadableContext = _react.default.createContext(null);
+ if (false) {
+ } //# sourceMappingURL=loadable-context.shared-runtime.js.map
+
+ /***/
+ },
+
+ /***/ 6535: /***/ (
__unused_webpack_module,
exports,
__webpack_require__
@@ -109,7 +136,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
const _react = /*#__PURE__*/ _interop_require_default._(
__webpack_require__(7197)
);
- const _loadablecontextsharedruntime = __webpack_require__(9829);
+ const _loadablecontextsharedruntime = __webpack_require__(3749);
function resolve(obj) {
return obj && obj.default ? obj.default : obj;
}
@@ -342,7 +369,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
/***/
},
- /***/ 5104: /***/ (module, exports, __webpack_require__) => {
+ /***/ 7760: /***/ (module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", {
@@ -375,7 +402,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
__webpack_require__(7197)
);
const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
- __webpack_require__(3399)
+ __webpack_require__(6535)
);
const isServerSide = "object" === "undefined";
// Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -475,7 +502,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
/***/
},
- /***/ 8695: /***/ (
+ /***/ 9585: /***/ (
__unused_webpack_module,
__unused_webpack_exports,
__webpack_require__
@@ -483,7 +510,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
(window.__NEXT_P = window.__NEXT_P || []).push([
"/dynamic",
function () {
- return __webpack_require__(1036);
+ return __webpack_require__(1266);
},
]);
if (false) {
@@ -491,40 +518,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
/***/
},
-
- /***/ 9829: /***/ (
- __unused_webpack_module,
- exports,
- __webpack_require__
- ) => {
- "use strict";
- /* __next_internal_client_entry_do_not_use__ cjs */
- Object.defineProperty(exports, "__esModule", {
- value: true,
- });
- Object.defineProperty(exports, "LoadableContext", {
- enumerable: true,
- get: function () {
- return LoadableContext;
- },
- });
- const _interop_require_default = __webpack_require__(1532);
- const _react = /*#__PURE__*/ _interop_require_default._(
- __webpack_require__(7197)
- );
- const LoadableContext = _react.default.createContext(null);
- if (false) {
- } //# sourceMappingURL=loadable-context.shared-runtime.js.map
-
- /***/
- },
},
/******/ (__webpack_require__) => {
// webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
- __webpack_exec__(8695)
+ __webpack_exec__(9585)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for head-HASH.js
@@ -1,24 +1,7 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[5350],
{
- /***/ 361: /***/ (
- __unused_webpack_module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- (window.__NEXT_P = window.__NEXT_P || []).push([
- "/head",
- function () {
- return __webpack_require__(721);
- },
- ]);
- if (false) {
- }
-
- /***/
- },
-
- /***/ 721: /***/ (
+ /***/ 5163: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -33,7 +16,7 @@
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
__webpack_require__(1329);
/* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
- __webpack_require__(5051);
+ __webpack_require__(7269);
/* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
/*#__PURE__*/ __webpack_require__.n(
next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -67,12 +50,29 @@
/***/
},
- /***/ 5051: /***/ (
+ /***/ 7269: /***/ (
module,
__unused_webpack_exports,
__webpack_require__
) => {
- module.exports = __webpack_require__(4981);
+ module.exports = __webpack_require__(2053);
+
+ /***/
+ },
+
+ /***/ 8563: /***/ (
+ __unused_webpack_module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ (window.__NEXT_P = window.__NEXT_P || []).push([
+ "/head",
+ function () {
+ return __webpack_require__(5163);
+ },
+ ]);
+ if (false) {
+ }
/***/
},
@@ -82,7 +82,7 @@
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
- __webpack_exec__(361)
+ __webpack_exec__(8563)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for hooks-HASH.js
@@ -1,7 +1,24 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[9804],
{
- /***/ 1705: /***/ (
+ /***/ 1271: /***/ (
+ __unused_webpack_module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ (window.__NEXT_P = window.__NEXT_P || []).push([
+ "/hooks",
+ function () {
+ return __webpack_require__(2631);
+ },
+ ]);
+ if (false) {
+ }
+
+ /***/
+ },
+
+ /***/ 2631: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -59,30 +76,13 @@
/***/
},
-
- /***/ 8637: /***/ (
- __unused_webpack_module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- (window.__NEXT_P = window.__NEXT_P || []).push([
- "/hooks",
- function () {
- return __webpack_require__(1705);
- },
- ]);
- if (false) {
- }
-
- /***/
- },
},
/******/ (__webpack_require__) => {
// webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
- __webpack_exec__(8637)
+ __webpack_exec__(1271)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for image-HASH.js
@@ -1,7 +1,24 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[2983],
{
- /***/ 798: /***/ (
+ /***/ 565: /***/ (
+ __unused_webpack_module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ (window.__NEXT_P = window.__NEXT_P || []).push([
+ "/image",
+ function () {
+ return __webpack_require__(7813);
+ },
+ ]);
+ if (false) {
+ }
+
+ /***/
+ },
+
+ /***/ 7813: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -18,8 +35,8 @@
// EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
var jsx_runtime = __webpack_require__(1329);
- // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
- var next_image = __webpack_require__(8258);
+ // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
+ var next_image = __webpack_require__(6316);
var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
/* harmony default export */ const nextjs = {
src: "/_next/static/media/nextjs.cae0b805.png",
@@ -48,30 +65,13 @@
/***/
},
-
- /***/ 7643: /***/ (
- __unused_webpack_module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- (window.__NEXT_P = window.__NEXT_P || []).push([
- "/image",
- function () {
- return __webpack_require__(798);
- },
- ]);
- if (false) {
- }
-
- /***/
- },
},
/******/ (__webpack_require__) => {
// webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
- /******/ __webpack_require__.O(0, [8258, 636, 6593, 8792], () =>
- __webpack_exec__(7643)
+ /******/ __webpack_require__.O(0, [6316, 636, 6593, 8792], () =>
+ __webpack_exec__(565)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for link-HASH.js
@@ -1,43 +1,36 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[4672],
{
- /***/ 4183: /***/ (module, exports, __webpack_require__) => {
+ /***/ 443: /***/ (
+ module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ module.exports = __webpack_require__(2457);
+
+ /***/
+ },
+
+ /***/ 2185: /***/ (__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true,
});
- Object.defineProperty(exports, "getDomainLocale", {
+ Object.defineProperty(exports, "errorOnce", {
enumerable: true,
get: function () {
- return getDomainLocale;
+ return errorOnce;
},
});
- const _normalizetrailingslash = __webpack_require__(8887);
- const basePath =
- /* unused pure expression or super */ null && (false || "");
- function getDomainLocale(path, locale, locales, domainLocales) {
- if (false) {
- } else {
- return false;
- }
- }
- if (
- (typeof exports.default === "function" ||
- (typeof exports.default === "object" && exports.default !== null)) &&
- typeof exports.default.__esModule === "undefined"
- ) {
- Object.defineProperty(exports.default, "__esModule", {
- value: true,
- });
- Object.assign(exports.default, exports);
- module.exports = exports.default;
- } //# sourceMappingURL=get-domain-locale.js.map
+ let errorOnce = (_) => {};
+ if (false) {
+ } //# sourceMappingURL=error-once.js.map
/***/
},
- /***/ 5049: /***/ (module, exports, __webpack_require__) => {
+ /***/ 2457: /***/ (module, exports, __webpack_require__) => {
"use strict";
/* __next_internal_client_entry_do_not_use__ cjs */
Object.defineProperty(exports, "__esModule", {
@@ -64,17 +57,17 @@
const _react = /*#__PURE__*/ _interop_require_wildcard._(
__webpack_require__(7197)
);
- const _resolvehref = __webpack_require__(3575);
- const _islocalurl = __webpack_require__(4135);
- const _formaturl = __webpack_require__(3050);
- const _utils = __webpack_require__(6864);
- const _addlocale = __webpack_require__(1789);
- const _routercontextsharedruntime = __webpack_require__(1778);
- const _useintersection = __webpack_require__(7210);
- const _getdomainlocale = __webpack_require__(4183);
- const _addbasepath = __webpack_require__(6518);
- const _usemergedref = __webpack_require__(9011);
- const _erroronce = __webpack_require__(5193);
+ const _resolvehref = __webpack_require__(5687);
+ const _islocalurl = __webpack_require__(7127);
+ const _formaturl = __webpack_require__(58);
+ const _utils = __webpack_require__(2080);
+ const _addlocale = __webpack_require__(5709);
+ const _routercontextsharedruntime = __webpack_require__(4770);
+ const _useintersection = __webpack_require__(3290);
+ const _getdomainlocale = __webpack_require__(4615);
+ const _addbasepath = __webpack_require__(8422);
+ const _usemergedref = __webpack_require__(9667);
+ const _erroronce = __webpack_require__(2185);
const prefetched = new Set();
function prefetch(router, href, as, options) {
if (false) {
@@ -453,82 +446,7 @@
/***/
},
- /***/ 5193: /***/ (__unused_webpack_module, exports) => {
- "use strict";
-
- Object.defineProperty(exports, "__esModule", {
- value: true,
- });
- Object.defineProperty(exports, "errorOnce", {
- enumerable: true,
- get: function () {
- return errorOnce;
- },
- });
- let errorOnce = (_) => {};
- if (false) {
- } //# sourceMappingURL=error-once.js.map
-
- /***/
- },
-
- /***/ 5529: /***/ (
- module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- module.exports = __webpack_require__(5049);
-
- /***/
- },
-
- /***/ 6887: /***/ (
- __unused_webpack_module,
- __webpack_exports__,
- __webpack_require__
- ) => {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
- /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
- /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
- /* harmony export */
- });
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
- __webpack_require__(1329);
- /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
- __webpack_require__(5529);
- /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
- /*#__PURE__*/ __webpack_require__.n(
- next_link__WEBPACK_IMPORTED_MODULE_1__
- );
-
- function aLink(props) {
- return /*#__PURE__*/ (0,
- react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
- children: [
- /*#__PURE__*/ (0,
- react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
- children: "A Link page!",
- }),
- /*#__PURE__*/ (0,
- react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
- next_link__WEBPACK_IMPORTED_MODULE_1___default(),
- {
- href: "/",
- children: "Go to /",
- }
- ),
- ],
- });
- }
- var __N_SSP = true;
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
-
- /***/
- },
-
- /***/ 7210: /***/ (module, exports, __webpack_require__) => {
+ /***/ 3290: /***/ (module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", {
@@ -541,7 +459,7 @@
},
});
const _react = __webpack_require__(7197);
- const _requestidlecallback = __webpack_require__(1785);
+ const _requestidlecallback = __webpack_require__(6809);
const hasIntersectionObserver =
typeof IntersectionObserver === "function";
const observers = new Map();
@@ -653,7 +571,106 @@
/***/
},
- /***/ 9011: /***/ (module, exports, __webpack_require__) => {
+ /***/ 4615: /***/ (module, exports, __webpack_require__) => {
+ "use strict";
+
+ Object.defineProperty(exports, "__esModule", {
+ value: true,
+ });
+ Object.defineProperty(exports, "getDomainLocale", {
+ enumerable: true,
+ get: function () {
+ return getDomainLocale;
+ },
+ });
+ const _normalizetrailingslash = __webpack_require__(903);
+ const basePath =
+ /* unused pure expression or super */ null && (false || "");
+ function getDomainLocale(path, locale, locales, domainLocales) {
+ if (false) {
+ } else {
+ return false;
+ }
+ }
+ if (
+ (typeof exports.default === "function" ||
+ (typeof exports.default === "object" && exports.default !== null)) &&
+ typeof exports.default.__esModule === "undefined"
+ ) {
+ Object.defineProperty(exports.default, "__esModule", {
+ value: true,
+ });
+ Object.assign(exports.default, exports);
+ module.exports = exports.default;
+ } //# sourceMappingURL=get-domain-locale.js.map
+
+ /***/
+ },
+
+ /***/ 6745: /***/ (
+ __unused_webpack_module,
+ __webpack_exports__,
+ __webpack_require__
+ ) => {
+ "use strict";
+ __webpack_require__.r(__webpack_exports__);
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+ /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+ /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+ /* harmony export */
+ });
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+ __webpack_require__(1329);
+ /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
+ __webpack_require__(443);
+ /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
+ /*#__PURE__*/ __webpack_require__.n(
+ next_link__WEBPACK_IMPORTED_MODULE_1__
+ );
+
+ function aLink(props) {
+ return /*#__PURE__*/ (0,
+ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
+ children: [
+ /*#__PURE__*/ (0,
+ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
+ children: "A Link page!",
+ }),
+ /*#__PURE__*/ (0,
+ react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+ next_link__WEBPACK_IMPORTED_MODULE_1___default(),
+ {
+ href: "/",
+ children: "Go to /",
+ }
+ ),
+ ],
+ });
+ }
+ var __N_SSP = true;
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
+
+ /***/
+ },
+
+ /***/ 7595: /***/ (
+ __unused_webpack_module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ (window.__NEXT_P = window.__NEXT_P || []).push([
+ "/link",
+ function () {
+ return __webpack_require__(6745);
+ },
+ ]);
+ if (false) {
+ }
+
+ /***/
+ },
+
+ /***/ 9667: /***/ (module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", {
@@ -730,30 +747,13 @@
/***/
},
-
- /***/ 9297: /***/ (
- __unused_webpack_module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- (window.__NEXT_P = window.__NEXT_P || []).push([
- "/link",
- function () {
- return __webpack_require__(6887);
- },
- ]);
- if (false) {
- }
-
- /***/
- },
},
/******/ (__webpack_require__) => {
// webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
- __webpack_exec__(9297)
+ __webpack_exec__(7595)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for routerDirect-HASH.js
@@ -1,34 +1,7 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[188],
{
- /***/ 1576: /***/ (
- module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- module.exports = __webpack_require__(5704);
-
- /***/
- },
-
- /***/ 7881: /***/ (
- __unused_webpack_module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- (window.__NEXT_P = window.__NEXT_P || []).push([
- "/routerDirect",
- function () {
- return __webpack_require__(9851);
- },
- ]);
- if (false) {
- }
-
- /***/
- },
-
- /***/ 9851: /***/ (
+ /***/ 3401: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -43,7 +16,7 @@
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
__webpack_require__(1329);
/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
- __webpack_require__(1576);
+ __webpack_require__(6702);
/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
/*#__PURE__*/ __webpack_require__.n(
next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -62,13 +35,40 @@
/***/
},
+
+ /***/ 4787: /***/ (
+ __unused_webpack_module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ (window.__NEXT_P = window.__NEXT_P || []).push([
+ "/routerDirect",
+ function () {
+ return __webpack_require__(3401);
+ },
+ ]);
+ if (false) {
+ }
+
+ /***/
+ },
+
+ /***/ 6702: /***/ (
+ module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ module.exports = __webpack_require__(728);
+
+ /***/
+ },
},
/******/ (__webpack_require__) => {
// webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
- __webpack_exec__(7881)
+ __webpack_exec__(4787)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for script-HASH.js
@@ -1,34 +1,17 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[1209],
{
- /***/ 2777: /***/ (
- __unused_webpack_module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- (window.__NEXT_P = window.__NEXT_P || []).push([
- "/script",
- function () {
- return __webpack_require__(9272);
- },
- ]);
- if (false) {
- }
-
- /***/
- },
-
- /***/ 8662: /***/ (
+ /***/ 6868: /***/ (
module,
__unused_webpack_exports,
__webpack_require__
) => {
- module.exports = __webpack_require__(4550);
+ module.exports = __webpack_require__(1190);
/***/
},
- /***/ 9272: /***/ (
+ /***/ 7478: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -43,7 +26,7 @@
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
__webpack_require__(1329);
/* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
- __webpack_require__(8662);
+ __webpack_require__(6868);
/* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
/*#__PURE__*/ __webpack_require__.n(
next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -75,13 +58,30 @@
/***/
},
+
+ /***/ 7659: /***/ (
+ __unused_webpack_module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ (window.__NEXT_P = window.__NEXT_P || []).push([
+ "/script",
+ function () {
+ return __webpack_require__(7478);
+ },
+ ]);
+ if (false) {
+ }
+
+ /***/
+ },
},
/******/ (__webpack_require__) => {
// webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
- __webpack_exec__(2777)
+ __webpack_exec__(7659)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for withRouter-HASH.js
@@ -1,17 +1,7 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[3263],
{
- /***/ 1576: /***/ (
- module,
- __unused_webpack_exports,
- __webpack_require__
- ) => {
- module.exports = __webpack_require__(5704);
-
- /***/
- },
-
- /***/ 8478: /***/ (
+ /***/ 2528: /***/ (
__unused_webpack_module,
__webpack_exports__,
__webpack_require__
@@ -26,7 +16,7 @@
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
__webpack_require__(1329);
/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
- __webpack_require__(1576);
+ __webpack_require__(6702);
/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
/*#__PURE__*/ __webpack_require__.n(
next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -45,7 +35,17 @@
/***/
},
- /***/ 9505: /***/ (
+ /***/ 6702: /***/ (
+ module,
+ __unused_webpack_exports,
+ __webpack_require__
+ ) => {
+ module.exports = __webpack_require__(728);
+
+ /***/
+ },
+
+ /***/ 9763: /***/ (
__unused_webpack_module,
__unused_webpack_exports,
__webpack_require__
@@ -53,7 +53,7 @@
(window.__NEXT_P = window.__NEXT_P || []).push([
"/withRouter",
function () {
- return __webpack_require__(8478);
+ return __webpack_require__(2528);
},
]);
if (false) {
@@ -67,7 +67,7 @@
/******/ var __webpack_exec__ = (moduleId) =>
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
- __webpack_exec__(9505)
+ __webpack_exec__(9763)
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;Diff for 6566-HASH.js
Diff too large to display
Diff for 7740-HASH.js
failed to diffDiff for 8258-HASH.js
Diff too large to display
Diff for main-HASH.js
Diff too large to display
Diff for main-app-HASH.js
@@ -1,64 +1,64 @@
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
[4977],
{
- /***/ 2584: /***/ () => {
- /* (ignored) */
- /***/
- },
-
- /***/ 3819: /***/ (
+ /***/ 5311: /***/ (
__unused_webpack_module,
__unused_webpack_exports,
__webpack_require__
) => {
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 6596, 23)
+ __webpack_require__.t.bind(__webpack_require__, 8958, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 6101, 23)
+ __webpack_require__.t.bind(__webpack_require__, 711, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 7719, 23)
+ __webpack_require__.t.bind(__webpack_require__, 7045, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 3524, 23)
+ __webpack_require__.t.bind(__webpack_require__, 266, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 6044, 23)
+ __webpack_require__.t.bind(__webpack_require__, 3438, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 344, 23)
+ __webpack_require__.t.bind(__webpack_require__, 7494, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 6577, 23)
+ __webpack_require__.t.bind(__webpack_require__, 4627, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 7518, 23)
+ __webpack_require__.t.bind(__webpack_require__, 924, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 215, 23)
+ __webpack_require__.t.bind(__webpack_require__, 4766, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 8782, 23)
+ __webpack_require__.t.bind(__webpack_require__, 5564, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 3205, 23)
+ __webpack_require__.t.bind(__webpack_require__, 8095, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.bind(__webpack_require__, 576)
+ __webpack_require__.bind(__webpack_require__, 8350)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 766, 23)
+ __webpack_require__.t.bind(__webpack_require__, 8128, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 2283, 23)
+ __webpack_require__.t.bind(__webpack_require__, 5865, 23)
);
Promise.resolve(/* import() eager */).then(
- __webpack_require__.t.bind(__webpack_require__, 1257, 23)
+ __webpack_require__.t.bind(__webpack_require__, 4103, 23)
);
/***/
},
+
+ /***/ 6170: /***/ () => {
+ /* (ignored) */
+ /***/
+ },
},
/******/ (__webpack_require__) => {
// webpackRuntimeModules
@@ -66,8 +66,8 @@
__webpack_require__((__webpack_require__.s = moduleId));
/******/ __webpack_require__.O(
0,
- [9962, 7740],
- () => (__webpack_exec__(7620), __webpack_exec__(3819))
+ [4627, 8196],
+ () => (__webpack_exec__(1314), __webpack_exec__(5311))
);
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;
CodSpeed Performance ReportMerging #86398 will not alter performanceComparing Summary
Footnotes
|
124cc9f to
54b26ff
Compare
turbopack/crates/turbopack-ecmascript/src/analyzer/side_effects.rs
Outdated
Show resolved
Hide resolved
turbopack/crates/turbopack-ecmascript/src/analyzer/side_effects.rs
Outdated
Show resolved
Hide resolved
turbopack/crates/turbopack-ecmascript/src/analyzer/side_effects.rs
Outdated
Show resolved
Hide resolved
turbopack/crates/turbopack-ecmascript/src/analyzer/side_effects.rs
Outdated
Show resolved
Hide resolved
f281a83 to
f6e85cd
Compare
|
this is ready for review but it is blocked on fixing the resolve in #86520 |
f6e85cd to
ec765fe
Compare
6923b26 to
ddd797b
Compare
turbopack/crates/turbopack-ecmascript/src/analyzer/side_effects.rs
Outdated
Show resolved
Hide resolved
turbopack/crates/turbopack-ecmascript/src/analyzer/side_effects.rs
Outdated
Show resolved
Hide resolved
sokra
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Many expressions like Ident could potentially throw an error (e. g. var not defined).
This assumes that throwing an error during module evaluation is not considered as side effect. I hope this doesn't lead to problems...
|
the other main case is getters lots of things can throw of course. |
1be5c4f to
e92c3d7
Compare
ddd797b to
e5b39ba
Compare
turbopack/crates/turbopack-ecmascript/src/analyzer/side_effects.rs
Outdated
Show resolved
Hide resolved
33e6b0c to
e149516
Compare
643aa07 to
5ac2fcd
Compare
e149516 to
2fd4bba
Compare
1a7acff to
8b07502
Compare
2c268c3 to
7c4f37c
Compare
1ebd01c to
7ca893f
Compare
7c4f37c to
c7a978b
Compare
7ca893f to
2fdb231
Compare
c7a978b to
ef939dd
Compare
turbopack/crates/turbopack-ecmascript/src/analyzer/side_effects.rs
Outdated
Show resolved
Hide resolved
ef939dd to
4227c7f
Compare
3d2ae59 to
6b9908f
Compare
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
1 similar comment
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Additional Suggestion:
The Module trait is missing the side_effects() method that is called in side_effect_module_info.rs line 55, which will cause a compilation error.
View Details
📝 Patch Details
diff --git a/turbopack/crates/turbopack-core/src/module.rs b/turbopack/crates/turbopack-core/src/module.rs
index 4df9deed46..026b2d3b89 100644
--- a/turbopack/crates/turbopack-core/src/module.rs
+++ b/turbopack/crates/turbopack-core/src/module.rs
@@ -70,6 +70,13 @@ pub trait Module: Asset {
) -> Vc<bool> {
Vc::cell(false)
}
+
+ /// Returns the side effects information for this module.
+ /// This should be determined through static analysis and/or configuration.
+ #[turbo_tasks::function]
+ fn side_effects(self: Vc<Self>) -> Vc<ModuleSideEffects> {
+ Vc::cell(ModuleSideEffects::SideEffectful)
+ }
}
#[turbo_tasks::value_trait]
diff --git a/turbopack/crates/turbopack-ecmascript/src/lib.rs b/turbopack/crates/turbopack-ecmascript/src/lib.rs
index 72562f41e6..90253be872 100644
--- a/turbopack/crates/turbopack-ecmascript/src/lib.rs
+++ b/turbopack/crates/turbopack-ecmascript/src/lib.rs
@@ -783,6 +783,11 @@ impl Module for EcmascriptModuleAsset {
Vc::cell(self.analyze().await?.side_effects == ModuleSideEffects::SideEffectFree)
})
}
+
+ #[turbo_tasks::function]
+ async fn side_effects(self: Vc<Self>) -> Result<Vc<ModuleSideEffects>> {
+ Ok(Vc::cell(self.analyze().await?.side_effects))
+ }
}
#[turbo_tasks::value_impl]
Analysis
Missing side_effects() method on Module trait causes compilation error
What fails: Code in turbopack/crates/turbopack-core/src/module_graph/side_effect_module_info.rs line 55 calls module.side_effects().await? on a Module instance, but the Module trait in turbopack/crates/turbopack-core/src/module.rs does not define this method.
How to reproduce:
cd turbopack/crates/turbopack-core
cargo checkError message: "no method named side_effects found for trait object &dyn Module"
Root cause: Commit 0572d8856a ("fix a bug with pure constructors and callback functions") introduced a new file side_effect_module_info.rs that calls module.side_effects(), but the corresponding trait method was not added to the Module trait definition.
Fix: Added the side_effects() method to the Module trait as a turbo_tasks function that returns Vc<ModuleSideEffects>, with a default implementation that conservatively returns ModuleSideEffects::SideEffectful. Added an override implementation in EcmascriptModuleAsset that returns the analyzed side effects value.

This implements some simple static analysis to determine if modules are side effect free based on their top level module evaluation items.
The rules are simple
Object.keys)imports are obviously the difficult part, for that reason we can evaluate a module to
SideEffectfulSideEffectFreeorModuleEvaluationIsSideEffectFree. A later step will leverage a graph analysis step to determine of transitive dependencies of ModuleEvaluationIsSideEffectFree modules are also side effect free and upgrade it.So for right now the impact is minor. There is also an experimental option to disable it in case it causes trouble this can help us debug
I tested the performance on vercel site and as expected it isn't really observable
with side effect analysis disabled
With it enabled.
so if there is a regression it is well within the noise.