Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@
"registry": "https://registry.npmjs.org/"
}
},
"version": "16.3.0-canary.21"
"version": "16.3.0-canary.22"
}
2 changes: 1 addition & 1 deletion packages/create-next-app/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "create-next-app",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"keywords": [
"react",
"next",
Expand Down
4 changes: 2 additions & 2 deletions packages/eslint-config-next/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "eslint-config-next",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"description": "ESLint configuration used by Next.js.",
"license": "MIT",
"repository": {
Expand All @@ -12,7 +12,7 @@
"dist"
],
"dependencies": {
"@next/eslint-plugin-next": "16.3.0-canary.21",
"@next/eslint-plugin-next": "16.3.0-canary.22",
"eslint-import-resolver-node": "^0.3.6",
"eslint-import-resolver-typescript": "^3.5.2",
"eslint-plugin-import": "^2.32.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/eslint-plugin-internal/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@next/eslint-plugin-internal",
"private": true,
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"description": "ESLint plugin for working on Next.js.",
"exports": {
".": "./src/eslint-plugin-internal.js"
Expand Down
2 changes: 1 addition & 1 deletion packages/eslint-plugin-next/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/eslint-plugin-next",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"description": "ESLint plugin for Next.js.",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/font/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@next/font",
"private": true,
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"repository": {
"url": "vercel/next.js",
"directory": "packages/font"
Expand Down
2 changes: 1 addition & 1 deletion packages/next-bundle-analyzer/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/bundle-analyzer",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"main": "index.js",
"types": "index.d.ts",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-codemod/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/codemod",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"license": "MIT",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-env/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/env",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"keywords": [
"react",
"next",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-mdx/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/mdx",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"main": "index.js",
"license": "MIT",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion packages/next-playwright/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/playwright",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"repository": {
"url": "vercel/next.js",
"directory": "packages/next-playwright"
Expand Down
2 changes: 1 addition & 1 deletion packages/next-plugin-storybook/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/plugin-storybook",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"repository": {
"url": "vercel/next.js",
"directory": "packages/next-plugin-storybook"
Expand Down
2 changes: 1 addition & 1 deletion packages/next-polyfill-module/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/polyfill-module",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)",
"main": "dist/polyfill-module.js",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-polyfill-nomodule/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/polyfill-nomodule",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"description": "A polyfill for non-dead, nomodule browsers.",
"main": "dist/polyfill-nomodule.js",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-routing/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/routing",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"keywords": [
"react",
"next",
Expand Down
2 changes: 1 addition & 1 deletion packages/next-rspack/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "next-rspack",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"repository": {
"url": "vercel/next.js",
"directory": "packages/next-rspack"
Expand Down
2 changes: 1 addition & 1 deletion packages/next-swc/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/swc",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"private": true,
"files": [
"native/"
Expand Down
14 changes: 7 additions & 7 deletions packages/next/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "next",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"description": "The React Framework",
"main": "./dist/server/next.js",
"license": "MIT",
Expand Down Expand Up @@ -101,7 +101,7 @@
]
},
"dependencies": {
"@next/env": "16.3.0-canary.21",
"@next/env": "16.3.0-canary.22",
"@swc/helpers": "0.5.15",
"baseline-browser-mapping": "^2.9.19",
"caniuse-lite": "^1.0.30001579",
Expand Down Expand Up @@ -165,11 +165,11 @@
"@modelcontextprotocol/sdk": "1.18.1",
"@mswjs/interceptors": "0.23.0",
"@napi-rs/triples": "1.2.0",
"@next/font": "16.3.0-canary.21",
"@next/polyfill-module": "16.3.0-canary.21",
"@next/polyfill-nomodule": "16.3.0-canary.21",
"@next/react-refresh-utils": "16.3.0-canary.21",
"@next/swc": "16.3.0-canary.21",
"@next/font": "16.3.0-canary.22",
"@next/polyfill-module": "16.3.0-canary.22",
"@next/polyfill-nomodule": "16.3.0-canary.22",
"@next/react-refresh-utils": "16.3.0-canary.22",
"@next/swc": "16.3.0-canary.22",
"@opentelemetry/api": "1.6.0",
"@playwright/test": "1.58.2",
"@rspack/core": "1.6.7",
Expand Down
2 changes: 1 addition & 1 deletion packages/react-refresh-utils/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/react-refresh-utils",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"description": "An experimental package providing utilities for React Refresh.",
"repository": {
"url": "vercel/next.js",
Expand Down
4 changes: 2 additions & 2 deletions packages/third-parties/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@next/third-parties",
"version": "16.3.0-canary.21",
"version": "16.3.0-canary.22",
"repository": {
"url": "vercel/next.js",
"directory": "packages/third-parties"
Expand All @@ -27,7 +27,7 @@
"third-party-capital": "1.0.20"
},
"devDependencies": {
"next": "16.3.0-canary.21",
"next": "16.3.0-canary.22",
"outdent": "0.8.0",
"prettier": "2.5.1",
"typescript": "6.0.2"
Expand Down
16 changes: 8 additions & 8 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions turbopack/crates/turbo-tasks-backend/src/backend/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
// done: true } it must have Output and would early return.
let old = task.set_in_progress(in_progress_state);
debug_assert!(old.is_none(), "InProgress already exists");
ctx.schedule_task(task, TaskPriority::Initial);
ctx.schedule_task(task, TaskPriority::Recomputation);

Ok(Err(listener))
}
Expand Down Expand Up @@ -896,7 +896,7 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
TaskExecutionReason::CellNotAvailable,
EventDescription::new(|| task.get_task_desc_fn()),
);
ctx.schedule_task(task, TaskPriority::Initial);
ctx.schedule_task(task, TaskPriority::Recomputation);

Ok(Err(listener))
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use bincode::{Decode, Encode};
use smallvec::SmallVec;
use turbo_tasks::{TaskExecutionReason, TaskId, event::EventDescription};
use turbo_tasks::{TaskExecutionReason, TaskId, TaskPriority, event::EventDescription};

use crate::{
backend::{
Expand Down Expand Up @@ -224,6 +224,16 @@ pub fn make_task_dirty_internal(
*stale = true;
}
let current = task.get_dirty();
let parent_priority = ctx.get_current_task_priority();
let parent_priority = if matches!(parent_priority, TaskPriority::Recomputation) {
// When an invalidation was triggered during recomputation (or an initial execution that was
// triggered from recomputation), we do not want to treat that as recomputation.
// That would make recomputation to be very viral, and breaks ordering. So we reset
// execution order to initial.
TaskPriority::Initial
} else {
parent_priority
};
let (old_self_dirty, old_current_session_self_clean, parent_priority) = match current {
Some(Dirtyness::Dirty(current_priority)) => {
#[cfg(feature = "trace_task_dirty")]
Expand All @@ -235,15 +245,15 @@ pub fn make_task_dirty_internal(
)
.entered();
// already dirty
let parent_priority = ctx.get_current_task_priority();
if *current_priority >= parent_priority {
if matches!(*current_priority, TaskPriority::Initial)
|| *current_priority > parent_priority
{
// Update the priority to be the lower one
task.set_dirty(Dirtyness::Dirty(parent_priority));
}
return;
}
Some(Dirtyness::SessionDependent) => {
let parent_priority = ctx.get_current_task_priority();
task.set_dirty(Dirtyness::Dirty(parent_priority));
// It was a session-dependent dirty before, so we need to remove that clean count
let was_current_session_clean = task.current_session_clean();
Expand All @@ -265,7 +275,6 @@ pub fn make_task_dirty_internal(
}
}
None => {
let parent_priority = ctx.get_current_task_priority();
task.set_dirty(Dirtyness::Dirty(parent_priority));
// It was clean before, so we need to increase the dirty count
(false, false, parent_priority)
Expand Down
3 changes: 3 additions & 0 deletions turbopack/crates/turbo-tasks/src/manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,7 @@ pub enum TaskPriority {
Invalidation {
priority: Reverse<u32>,
},
Recomputation,
}

impl TaskPriority {
Expand Down Expand Up @@ -445,6 +446,7 @@ impl TaskPriority {
*self
}
}
TaskPriority::Recomputation => TaskPriority::Recomputation,
}
}
}
Expand All @@ -454,6 +456,7 @@ impl Display for TaskPriority {
match self {
TaskPriority::Initial => write!(f, "initial"),
TaskPriority::Invalidation { priority } => write!(f, "invalidation({})", priority.0),
TaskPriority::Recomputation => write!(f, "recomputation"),
}
}
}
Expand Down
18 changes: 16 additions & 2 deletions turbopack/crates/turbo-tasks/src/task_execution_reason.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,35 @@
#[derive(Debug)]
pub enum TaskExecutionReason {
/// A root task was initially scheduled and is executed
Initial,
Local,
/// A task output was read, but the output is not available, so the task was scheduled and
/// executed to produce the output
OutputNotAvailable,
/// A task cell was read, but the cell content is not available, so the task was scheduled and
/// executed to produce the cell content
CellNotAvailable,
/// A task was marked as dirty and is active on it's own (maybe root or currently awaited), so
/// it was scheduled and executed to update the task output
Invalidated,
/// A dirty task has been activated, so it was scheduled and executed to update the task output
ActivateDirty,
/// A task has been activated for the first time (no output yet), so it was scheduled and
/// executed to produce the task output
ActivateInitial,
/// A task was connected as child in `active_tracking == false` mode for the first time (no
/// output yet), so it was scheduled and executed to produce the task output.
/// Or a task was called inside of a turbo_tasks::run closure for the first time (no output
/// yet), so it was scheduled and executed to produce the task output.
Connect,
/// An in-progress task was marked as stale, so it was scheduled again after execution and is
/// executing again to update the task output.
Stale,
}

impl TaskExecutionReason {
pub fn as_str(&self) -> &'static str {
match self {
TaskExecutionReason::Initial => "initial",
TaskExecutionReason::Local => "local",
TaskExecutionReason::OutputNotAvailable => "output_not_available",
TaskExecutionReason::CellNotAvailable => "cell_not_available",
TaskExecutionReason::Invalidated => "invalidated",
Expand Down
Loading