From 2d8e920f4fee4b93c24dd53b7b6ac3defb021d73 Mon Sep 17 00:00:00 2001 From: Zack Tanner <1939140+ztanner@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:24:58 -0700 Subject: [PATCH 01/19] fix broken lock mechanism (#70764) This locking mechanism was meant to ensure only one caller can access the cache for the provided cache key at a time. In practice, subsequent calls to acquire the lock will immediately skip over the resolved promise and acquire the lock without exclusivity. This ensures that when a lock is released, we delete it from the locks map. And when a lock is acquired, we create a new pending promise. This doesn't appear to be causing any observable bugs (as far as I can tell) but should be corrected. --- .../src/server/lib/incremental-cache/index.ts | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/next/src/server/lib/incremental-cache/index.ts b/packages/next/src/server/lib/incremental-cache/index.ts index 6a44cee910440..62050023c23b8 100644 --- a/packages/next/src/server/lib/incremental-cache/index.ts +++ b/packages/next/src/server/lib/incremental-cache/index.ts @@ -80,7 +80,6 @@ export class IncrementalCache implements IncrementalCacheType { readonly hasDynamicIO?: boolean private readonly locks = new Map>() - private readonly unlocks = new Map Promise>() /** * The revalidate timings for routes. This will source the timings from the @@ -223,28 +222,22 @@ export class IncrementalCache implements IncrementalCacheType { this.cacheHandler?.resetRequestCache?.() } - /** - * @TODO this implementation of locking is brokne. Once a lock is created it - * will always be reused and all future locks will end up being granted - * non-exclusively which is sort of the opposite of what we want with a lock. - */ async lock(cacheKey: string) { let unlockNext: () => Promise = () => Promise.resolve() const existingLock = this.locks.get(cacheKey) if (existingLock) { await existingLock - } else { - const newLock = new Promise((resolve) => { - unlockNext = async () => { - resolve() - } - }) - - this.locks.set(cacheKey, newLock) - this.unlocks.set(cacheKey, unlockNext) } + const newLock = new Promise((resolve) => { + unlockNext = async () => { + resolve() + this.locks.delete(cacheKey) // Remove the lock upon release + } + }) + + this.locks.set(cacheKey, newLock) return unlockNext } From 4f56a331f94239664d7d08ae4a195cc3eb36e6d8 Mon Sep 17 00:00:00 2001 From: Zack Tanner <1939140+ztanner@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:25:21 -0700 Subject: [PATCH 02/19] client router cache should still be cleared if server action revalidates + redirects (#70715) If a server action redirects, we reject the promise eagerly with a redirect error, but that means we skip the handling that clears the client router cache in case the response was revalidated. This keeps the existing handling to seed the prefetch cache & reject the promise but ensures we've had a chance to apply the flight data to the router state. Fixes #70483 Closes NDX-357 --- .../reducers/server-action-reducer.ts | 108 ++++++++++-------- test/e2e/app-dir/actions/app-action.test.ts | 48 ++++++++ .../app-dir/actions/app/redirect/actions.ts | 6 + .../app-dir/actions/app/redirect/layout.tsx | 1 + .../actions/app/redirect/other/page.tsx | 8 +- .../e2e/app-dir/actions/app/redirect/page.tsx | 6 +- 6 files changed, 126 insertions(+), 51 deletions(-) diff --git a/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts b/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts index 5d599c49c6265..3d693ac9e0ccc 100644 --- a/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts +++ b/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts @@ -216,6 +216,7 @@ export function serverActionReducer( redirectLocation, redirectType, isPrerender, + revalidatedParts, }) => { // honor the redirect type instead of defaulting to push in case of server actions. if (redirectLocation) { @@ -253,44 +254,10 @@ export function serverActionReducer( ) } - if (redirectLocation) { - const newHref = createHrefFromUrl(redirectLocation, false) - - // Because the RedirectBoundary will trigger a navigation, we need to seed the prefetch cache - // with the FlightData that we got from the server action for the target page, so that it's - // available when the page is navigated to and doesn't need to be re-fetched. - createSeededPrefetchCacheEntry({ - url: redirectLocation, - data: { - flightData, - canonicalUrl: undefined, - couldBeIntercepted: false, - prerendered: false, - postponed: false, - }, - tree: state.tree, - prefetchCache: state.prefetchCache, - nextUrl: state.nextUrl, - kind: isPrerender ? PrefetchKind.FULL : PrefetchKind.AUTO, - }) - - mutable.prefetchCache = state.prefetchCache - // If the action triggered a redirect, we reject the action promise with a redirect - // so that it's handled by RedirectBoundary as we won't have a valid - // action result to resolve the promise with. This will effectively reset the state of - // the component that called the action as the error boundary will remount the tree. - // The status code doesn't matter here as the action handler will have already sent - // a response with the correct status code. - - reject( - getRedirectError( - hasBasePath(newHref) ? removeBasePath(newHref) : newHref, - redirectType || RedirectType.push - ) - ) - - return handleMutable(state, mutable) - } + const actionRevalidated = + revalidatedParts.paths.length > 0 || + revalidatedParts.tag || + revalidatedParts.cookie for (const normalizedFlightData of flightData) { const { @@ -330,7 +297,7 @@ export function serverActionReducer( ) } - // Handles case where prefetch only returns the router tree patch without rendered components. + // The server sent back RSC data for the server action, so we need to apply it to the cache. if (cacheNodeSeedData !== null) { const rsc = cacheNodeSeedData[1] const cache: CacheNode = createEmptyCacheNode() @@ -339,30 +306,73 @@ export function serverActionReducer( cache.loading = cacheNodeSeedData[3] fillLazyItemsTillLeafWithHead( cache, - // Existing cache is not passed in as `router.refresh()` has to invalidate the entire cache. + // Existing cache is not passed in as server actions have to invalidate the entire cache. undefined, treePatch, cacheNodeSeedData, head ) - await refreshInactiveParallelSegments({ - state, - updatedTree: newTree, - updatedCache: cache, - includeNextUrl: Boolean(nextUrl), - canonicalUrl: mutable.canonicalUrl || state.canonicalUrl, - }) - mutable.cache = cache mutable.prefetchCache = new Map() + + if (actionRevalidated) { + await refreshInactiveParallelSegments({ + state, + updatedTree: newTree, + updatedCache: cache, + includeNextUrl: Boolean(nextUrl), + canonicalUrl: mutable.canonicalUrl || state.canonicalUrl, + }) + } } mutable.patchedTree = newTree currentTree = newTree } - resolve(actionResult) + if (redirectLocation) { + const newHref = createHrefFromUrl(redirectLocation, false) + mutable.canonicalUrl = newHref + + // Because the RedirectBoundary will trigger a navigation, we need to seed the prefetch cache + // with the FlightData that we got from the server action for the target page, so that it's + // available when the page is navigated to and doesn't need to be re-fetched. + // We only do this if the server action didn't revalidate any data, as in that case the + // client cache will be cleared and the data will be re-fetched anyway. + if (!actionRevalidated) { + createSeededPrefetchCacheEntry({ + url: redirectLocation, + data: { + flightData, + canonicalUrl: undefined, + couldBeIntercepted: false, + prerendered: false, + postponed: false, + }, + tree: state.tree, + prefetchCache: state.prefetchCache, + nextUrl: state.nextUrl, + kind: isPrerender ? PrefetchKind.FULL : PrefetchKind.AUTO, + }) + mutable.prefetchCache = state.prefetchCache + } + + // If the action triggered a redirect, the action promise promise will be rejected with + // a redirect so that it's handled by RedirectBoundary as we won't have a valid + // action result to resolve the promise with. This will effectively reset the state of + // the component that called the action as the error boundary will remount the tree. + // The status code doesn't matter here as the action handler will have already sent + // a response with the correct status code. + reject( + getRedirectError( + hasBasePath(newHref) ? removeBasePath(newHref) : newHref, + redirectType || RedirectType.push + ) + ) + } else { + resolve(actionResult) + } return handleMutable(state, mutable) }, diff --git a/test/e2e/app-dir/actions/app-action.test.ts b/test/e2e/app-dir/actions/app-action.test.ts index 154c7670501c9..36406fcf2c612 100644 --- a/test/e2e/app-dir/actions/app-action.test.ts +++ b/test/e2e/app-dir/actions/app-action.test.ts @@ -659,8 +659,49 @@ describe('app-dir action handling', () => { }) }) + it('should invalidate the client router cache if the redirect action triggers a revalidation', async () => { + const browser = await next.browser('/redirect') + const input = await browser.elementByCss('input[name="name"]') + const revalidateCheckbox = await browser.elementByCss( + 'input[name="revalidate"]' + ) + const submit = await browser.elementByCss('button') + const initialRandom = await browser.elementById('random-number').text() + expect(initialRandom).toMatch(/\d+/) + + expect(await browser.hasElementByCssSelector('#error')).toBe(false) + + await input.fill('justputit') + await revalidateCheckbox.check() + await submit.click() + + await retry(async () => { + expect(await browser.hasElementByCssSelector('#error')).toBe(false) + }) + + // go back to the page that was revalidated + await browser.elementByCss('[href="/redirect"]').click() + + await browser.waitForElementByCss('#main-page') + + const newRandom = await browser.elementById('random-number').text() + expect(newRandom).not.toBe(initialRandom) + }) + it('should reset the form state when the action redirects to itself', async () => { const browser = await next.browser('/self-redirect') + const requests = [] + browser.on('request', async (req: Request) => { + const url = new URL(req.url()) + + if (url.pathname === '/self-redirect') { + const headers = await req.allHeaders() + if (headers['rsc']) { + requests.push(req) + } + } + }) + const input = await browser.elementByCss('input[name="name"]') const submit = await browser.elementByCss('button') @@ -686,6 +727,13 @@ describe('app-dir action handling', () => { await retry(async () => { expect(await browser.hasElementByCssSelector('#error')).toBe(false) }) + + // This verifies the redirect & server response happens in a single roundtrip, + // if the redirect resource was static. In development, these responses are always + // dynamically generated, so we only expect a single request for build/deploy. + if (!isNextDev) { + expect(requests.length).toBe(0) + } }) // This is disabled when deployed because the 404 page will be served as a static route diff --git a/test/e2e/app-dir/actions/app/redirect/actions.ts b/test/e2e/app-dir/actions/app/redirect/actions.ts index f47a8d45da1ac..e067e07fcb4f2 100644 --- a/test/e2e/app-dir/actions/app/redirect/actions.ts +++ b/test/e2e/app-dir/actions/app/redirect/actions.ts @@ -1,6 +1,7 @@ 'use server' import { redirect } from 'next/navigation' +import { revalidatePath } from 'next/cache' type State = { errors: Record @@ -8,10 +9,15 @@ type State = { export async function action(previousState: State, formData: FormData) { const name = formData.get('name') + const revalidate = formData.get('revalidate') if (name !== 'justputit') { return { errors: { name: "Only 'justputit' is accepted." } } } + if (revalidate === 'on') { + revalidatePath('/redirect') + } + redirect('/redirect/other') } diff --git a/test/e2e/app-dir/actions/app/redirect/layout.tsx b/test/e2e/app-dir/actions/app/redirect/layout.tsx index ad419941eebc7..60604c27082f9 100644 --- a/test/e2e/app-dir/actions/app/redirect/layout.tsx +++ b/test/e2e/app-dir/actions/app/redirect/layout.tsx @@ -12,6 +12,7 @@ export default function Page({ children }) {
+ Revalidate {errors.name &&

{errors.name}

}
diff --git a/test/e2e/app-dir/actions/app/redirect/other/page.tsx b/test/e2e/app-dir/actions/app/redirect/other/page.tsx index 187b865111066..9e82ab1ff0903 100644 --- a/test/e2e/app-dir/actions/app/redirect/other/page.tsx +++ b/test/e2e/app-dir/actions/app/redirect/other/page.tsx @@ -1,3 +1,9 @@ +import Link from 'next/link' + export default function Page() { - return
Other Page
+ return ( +
+ Other Page Back to Redirect Page +
+ ) } diff --git a/test/e2e/app-dir/actions/app/redirect/page.tsx b/test/e2e/app-dir/actions/app/redirect/page.tsx index b2bb7da42de65..98c9ca83b1ff6 100644 --- a/test/e2e/app-dir/actions/app/redirect/page.tsx +++ b/test/e2e/app-dir/actions/app/redirect/page.tsx @@ -1,3 +1,7 @@ export default function Page() { - return
Main Page
+ return ( +
+ Main Page
{Math.random()}
+
+ ) } From f8096a1e4e2fc5a7c41ea484b9f763cbcc135cc5 Mon Sep 17 00:00:00 2001 From: Zack Tanner <1939140+ztanner@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:52:57 -0700 Subject: [PATCH 03/19] ensure handleUnlock is called even for non-cached responses (#70766) When a response is unsuccessful, we might still have acquired an incremental cache lock and only realized we couldn't cache it after receiving a non-success response code. `handleUnlock` is called in the case of a successful response or a response received during a dynamic render, but not in the case of an unsuccessful response. This adds the missing `handleUnlock` for non-cached responses. This used to be handled appropriately but was lost in some recent refactors. No explicit test case was added here as the reproduction in the failing case was just a hanging build. So if the build passes and does not hang, the test was successful. Validated it was hanging before implementing this fix. --- packages/next/src/server/lib/patch-fetch.ts | 4 ++ .../app-fetch-deduping.test.ts | 18 +++++++-- .../app/bad-response-page/[slug]/page.js | 37 +++++++++++++++++++ 3 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 test/e2e/app-dir/app-fetch-deduping/app/bad-response-page/[slug]/page.js diff --git a/packages/next/src/server/lib/patch-fetch.ts b/packages/next/src/server/lib/patch-fetch.ts index 8ae3f84acfb73..7aa84e30b06ce 100644 --- a/packages/next/src/server/lib/patch-fetch.ts +++ b/packages/next/src/server/lib/patch-fetch.ts @@ -729,6 +729,10 @@ export function createPatchedFetcher( } } + // we had response that we determined shouldn't be cached so we return it + // and don't cache it. This also needs to unlock the cache lock we acquired. + await handleUnlock() + return res }) } diff --git a/test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts b/test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts index 56f6d066ef720..e3a5355b7b2f0 100644 --- a/test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts +++ b/test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts @@ -1,5 +1,6 @@ import { findPort, waitFor } from 'next-test-utils' import http from 'http' +import url from 'url' import { outdent } from 'outdent' import { isNextDev, isNextStart, nextTestSetup } from 'e2e-utils' @@ -9,12 +10,21 @@ describe('app-fetch-deduping', () => { const { next } = nextTestSetup({ files: __dirname, skipStart: true }) let externalServerPort: number let externalServer: http.Server - let requests = [] + let successfulRequests = [] beforeAll(async () => { externalServerPort = await findPort() externalServer = http.createServer((req, res) => { - requests.push(req.url) + const parsedUrl = url.parse(req.url, true) + const overrideStatus = parsedUrl.query.status + + // if the requested url has a "status" search param, override the response status + if (overrideStatus) { + res.statusCode = Number(overrideStatus) + } else { + successfulRequests.push(req.url) + } + res.end(`Request ${req.url} received at ${Date.now()}`) }) @@ -30,7 +40,7 @@ describe('app-fetch-deduping', () => { }) beforeEach(() => { - requests = [] + successfulRequests = [] }) afterAll(() => externalServer.close()) @@ -43,7 +53,7 @@ describe('app-fetch-deduping', () => { }` ) await next.build() - expect(requests.length).toBe(1) + expect(successfulRequests.length).toBe(1) }) }) } else if (isNextDev) { diff --git a/test/e2e/app-dir/app-fetch-deduping/app/bad-response-page/[slug]/page.js b/test/e2e/app-dir/app-fetch-deduping/app/bad-response-page/[slug]/page.js new file mode 100644 index 0000000000000..6b900ddbc6a7e --- /dev/null +++ b/test/e2e/app-dir/app-fetch-deduping/app/bad-response-page/[slug]/page.js @@ -0,0 +1,37 @@ +// This page is validating that despite multiple unsuccessful responses to the same, potentially cached URLs, +// the build locks are resolved and the page is still built successfully. +export async function generateStaticParams() { + return [ + { + slug: 'slug-0', + }, + { + slug: 'slug-1', + }, + { + slug: 'slug-2', + }, + { + slug: 'slug-3', + }, + { + slug: 'slug-4', + }, + ] +} + +export default async function Page({ params }) { + const data = await fetch( + `http://localhost:${process.env.TEST_SERVER_PORT}?status=404` + ).then((res) => res.text()) + await fetch( + `http://localhost:${process.env.TEST_SERVER_PORT}?status=404` + ).then((res) => res.text()) + + return ( + <> +

hello world

+

{data}

+ + ) +} From 6993467a5e4013eba114608a9095510f1b17efe4 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Thu, 3 Oct 2024 21:08:23 -0700 Subject: [PATCH 04/19] refactor(turbo-tasks-fs): Use ResolvedVc instead of Vc in structs (#70576) This is a handmade refactor of `turbo-tasks-fs` to switch every struct's field from `Vc` to `ResolvedVc`. I chose `turbo-tasks-fs` because it's reasonably small, but very widely used, and it has a representative mix of code patterns. In the process of creating this PR, I wrote up a guide of the steps required to refactor this, in the hope that we can automate most of these steps for most code: https://vercel.notion.site/Codemod-Notes-for-Vc-T-ResolvedVc-T-10ee06b059c480688ebffe5eb983db25 --- crates/next-api/src/pages.rs | 10 +- crates/next-core/src/app_structure.rs | 4 +- crates/next-core/src/page_loader.rs | 7 +- crates/next-core/src/pages_structure.rs | 50 ++++----- turbopack/crates/node-file-trace/src/lib.rs | 4 +- .../turbo-tasks-fs/examples/hash_directory.rs | 8 +- .../turbo-tasks-fs/examples/hash_glob.rs | 4 +- turbopack/crates/turbo-tasks-fs/src/attach.rs | 24 ++-- .../crates/turbo-tasks-fs/src/embed/fs.rs | 44 ++++---- turbopack/crates/turbo-tasks-fs/src/lib.rs | 106 ++++++++++-------- .../crates/turbo-tasks-fs/src/read_glob.rs | 16 +-- .../turbopack-core/src/chunk/optimize.rs | 2 +- .../crates/turbopack-core/src/resolve/mod.rs | 14 +-- .../turbopack-core/src/resolve/pattern.rs | 19 ++-- .../src/source/static_assets.rs | 8 +- .../src/references/node.rs | 4 +- .../src/references/require_context.rs | 4 +- .../src/references/typescript.rs | 2 +- .../turbopack-node/src/transforms/webpack.rs | 2 +- .../src/node_native_binding.rs | 8 +- .../turbopack-resolve/src/typescript.rs | 4 +- .../turbopack-test-utils/src/snapshot.rs | 2 +- 22 files changed, 181 insertions(+), 165 deletions(-) diff --git a/crates/next-api/src/pages.rs b/crates/next-api/src/pages.rs index 144a622427ff3..812bd901c1cf2 100644 --- a/crates/next-api/src/pages.rs +++ b/crates/next-api/src/pages.rs @@ -1180,8 +1180,14 @@ impl PageEndpoint { } #[turbo_tasks::function] - fn client_relative_path(&self) -> Vc { - Vc::cell(Some(self.pages_project.project().client_relative_path())) + async fn client_relative_path(&self) -> Result> { + Ok(Vc::cell(Some( + self.pages_project + .project() + .client_relative_path() + .to_resolved() + .await?, + ))) } } diff --git a/crates/next-core/src/app_structure.rs b/crates/next-core/src/app_structure.rs index c36b7a6f6ab54..46a3479824f61 100644 --- a/crates/next-core/src/app_structure.rs +++ b/crates/next-core/src/app_structure.rs @@ -1330,9 +1330,9 @@ pub async fn get_global_metadata( }; if dynamic { - *entry = Some(MetadataItem::Dynamic { path: file }); + *entry = Some(MetadataItem::Dynamic { path: *file }); } else { - *entry = Some(MetadataItem::Static { path: file }); + *entry = Some(MetadataItem::Static { path: *file }); } // TODO(WEB-952) handle symlinks in app dir } diff --git a/crates/next-core/src/page_loader.rs b/crates/next-core/src/page_loader.rs index f3e04516d6ff4..5a5955fc59abd 100644 --- a/crates/next-core/src/page_loader.rs +++ b/crates/next-core/src/page_loader.rs @@ -111,7 +111,7 @@ impl PageLoaderAsset { .map(|chunk| { Vc::upcast(ProxiedAsset::new( *chunk, - FileSystemPath::rebase(chunk.ident().path(), *rebase_path, root_path), + FileSystemPath::rebase(chunk.ident().path(), **rebase_path, root_path), )) }) .collect(); @@ -131,7 +131,10 @@ fn page_loader_chunk_reference_description() -> Vc { impl OutputAsset for PageLoaderAsset { #[turbo_tasks::function] async fn ident(&self) -> Result> { - let root = self.rebase_prefix_path.await?.unwrap_or(self.server_root); + let root = self + .rebase_prefix_path + .await? + .map_or(self.server_root, |path| *path); Ok(AssetIdent::from_path( root.join( format!( diff --git a/crates/next-core/src/pages_structure.rs b/crates/next-core/src/pages_structure.rs index d90fc5a97ec4c..87deebe96a959 100644 --- a/crates/next-core/src/pages_structure.rs +++ b/crates/next-core/src/pages_structure.rs @@ -117,33 +117,29 @@ pub async fn find_pages_structure( let pages_root = project_root .join("pages".into()) .realpath() - .resolve() + .to_resolved() .await?; - let pages_root = Vc::::cell( - if *pages_root.get_type().await? == FileSystemEntryType::Directory { - Some(pages_root) + let pages_root = if *pages_root.get_type().await? == FileSystemEntryType::Directory { + Some(pages_root) + } else { + let src_pages_root = project_root + .join("src/pages".into()) + .realpath() + .to_resolved() + .await?; + if *src_pages_root.get_type().await? == FileSystemEntryType::Directory { + Some(src_pages_root) } else { - let src_pages_root = project_root - .join("src/pages".into()) - .realpath() - .resolve() - .await?; - if *src_pages_root.get_type().await? == FileSystemEntryType::Directory { - Some(src_pages_root) - } else { - // If neither pages nor src/pages exists, we still want to generate - // the pages structure, but with no pages and default values for - // _app, _document and _error. - None - } - }, - ) - .resolve() - .await?; + // If neither pages nor src/pages exists, we still want to generate + // the pages structure, but with no pages and default values for + // _app, _document and _error. + None + } + }; Ok(get_pages_structure_for_root_directory( project_root, - pages_root, + Vc::cell(pages_root), next_router_root, page_extensions, )) @@ -202,7 +198,7 @@ async fn get_pages_structure_for_root_directory( DirectoryEntry::Directory(dir_project_path) => match name.as_str() { "api" => { api_directory = Some(get_pages_structure_for_directory( - dir_project_path, + *dir_project_path, next_router_path.join(name.clone()), 1, page_extensions, @@ -212,7 +208,7 @@ async fn get_pages_structure_for_root_directory( children.push(( name, get_pages_structure_for_directory( - dir_project_path, + *dir_project_path, next_router_path.join(name.clone()), 1, page_extensions, @@ -231,7 +227,7 @@ async fn get_pages_structure_for_root_directory( Some( PagesDirectoryStructure { - project_path: *project_path, + project_path: **project_path, next_router_path, items: items.into_iter().map(|(_, v)| v).collect(), children: children.into_iter().map(|(_, v)| v).collect(), @@ -243,7 +239,7 @@ async fn get_pages_structure_for_root_directory( }; let pages_path = if let Some(project_path) = *project_path { - project_path + *project_path } else { project_root.join("pages".into()) }; @@ -338,7 +334,7 @@ async fn get_pages_structure_for_directory( children.push(( name, get_pages_structure_for_directory( - *dir_project_path, + **dir_project_path, next_router_path.join(name.clone()), position + 1, page_extensions, diff --git a/turbopack/crates/node-file-trace/src/lib.rs b/turbopack/crates/node-file-trace/src/lib.rs index 71b2f4e505267..5b6b09befbe36 100644 --- a/turbopack/crates/node-file-trace/src/lib.rs +++ b/turbopack/crates/node-file-trace/src/lib.rs @@ -205,7 +205,7 @@ async fn add_glob_results( let result = result.await?; for entry in result.results.values() { if let DirectoryEntry::File(path) = entry { - let source = Vc::upcast(FileSource::new(*path)); + let source = Vc::upcast(FileSource::new(**path)); let module = asset_context .process( source, @@ -224,7 +224,7 @@ async fn add_glob_results( Box::pin(add_glob_results(asset_context, result, list)) } // Boxing for async recursion - recurse(asset_context, *result, list).await?; + recurse(asset_context, **result, list).await?; } Ok(()) } diff --git a/turbopack/crates/turbo-tasks-fs/examples/hash_directory.rs b/turbopack/crates/turbo-tasks-fs/examples/hash_directory.rs index 6a74f41781668..5efbdb7263a66 100644 --- a/turbopack/crates/turbo-tasks-fs/examples/hash_directory.rs +++ b/turbopack/crates/turbo-tasks-fs/examples/hash_directory.rs @@ -76,12 +76,12 @@ async fn hash_directory(directory: Vc) -> Result> { for entry in entries.values() { match entry { DirectoryEntry::File(path) => { - let name = filename(*path).await?; - hashes.insert(name, hash_file(*path).await?.clone_value()); + let name = filename(**path).await?; + hashes.insert(name, hash_file(**path).await?.clone_value()); } DirectoryEntry::Directory(path) => { - let name = filename(*path).await?; - hashes.insert(name, hash_directory(*path).await?.clone_value()); + let name = filename(**path).await?; + hashes.insert(name, hash_directory(**path).await?.clone_value()); } _ => {} } diff --git a/turbopack/crates/turbo-tasks-fs/examples/hash_glob.rs b/turbopack/crates/turbo-tasks-fs/examples/hash_glob.rs index e3c8aa8a693ca..507b56e6210da 100644 --- a/turbopack/crates/turbo-tasks-fs/examples/hash_glob.rs +++ b/turbopack/crates/turbo-tasks-fs/examples/hash_glob.rs @@ -72,11 +72,11 @@ async fn hash_glob_result(result: Vc) -> Result> { let mut hashes = BTreeMap::new(); for (name, entry) in result.results.iter() { if let DirectoryEntry::File(path) = entry { - hashes.insert(name, hash_file(*path).await?.clone_value()); + hashes.insert(name, hash_file(**path).await?.clone_value()); } } for (name, result) in result.inner.iter() { - let hash = hash_glob_result(*result).await?; + let hash = hash_glob_result(**result).await?; if !hash.is_empty() { hashes.insert(name, hash.clone_value()); } diff --git a/turbopack/crates/turbo-tasks-fs/src/attach.rs b/turbopack/crates/turbo-tasks-fs/src/attach.rs index 7705aad035361..23c8302c38813 100644 --- a/turbopack/crates/turbo-tasks-fs/src/attach.rs +++ b/turbopack/crates/turbo-tasks-fs/src/attach.rs @@ -1,6 +1,6 @@ use anyhow::{bail, Result}; use auto_hash_map::AutoMap; -use turbo_tasks::{Completion, RcStr, ValueToString, Vc}; +use turbo_tasks::{Completion, RcStr, ResolvedVc, ValueToString, Vc}; use crate::{ DirectoryContent, DirectoryEntry, FileContent, FileMeta, FileSystem, FileSystemPath, @@ -13,11 +13,11 @@ use crate::{ /// Caveat: The `child_path` itself is not visible as a directory entry. #[turbo_tasks::value] pub struct AttachedFileSystem { - root_fs: Vc>, + root_fs: ResolvedVc>, // we turn this into a string because creating a FileSystemPath requires the filesystem which // we are creating (circular reference) child_path: RcStr, - child_fs: Vc>, + child_fs: ResolvedVc>, } #[turbo_tasks::value_impl] @@ -27,7 +27,7 @@ impl AttachedFileSystem { #[turbo_tasks::function] pub async fn new( child_path: Vc, - child_fs: Vc>, + child_fs: ResolvedVc>, ) -> Result> { let child_path = child_path.await?; @@ -45,11 +45,11 @@ impl AttachedFileSystem { /// [FileSystem] or this [AttachedFileSystem]. #[turbo_tasks::function] pub async fn convert_path( - self: Vc, + self: ResolvedVc, contained_path_vc: Vc, ) -> Result> { let contained_path = contained_path_vc.await?; - let self_fs: Vc> = Vc::upcast(self); + let self_fs: ResolvedVc> = ResolvedVc::upcast(self); let this = self.await?; match contained_path.fs { @@ -89,12 +89,12 @@ impl AttachedFileSystem { /// on the [AttachedFileSystem] #[turbo_tasks::function] pub async fn get_inner_fs_path( - self: Vc, + self: ResolvedVc, path: Vc, ) -> Result> { let this = self.await?; let path = path.await?; - let self_fs: Vc> = Vc::upcast(self); + let self_fs: ResolvedVc> = ResolvedVc::upcast(self); if path.fs != self_fs { let self_fs_str = self_fs.to_string().await?; @@ -144,10 +144,10 @@ impl FileSystem for AttachedFileSystem { use DirectoryEntry::*; let entry = match *entry { - File(path) => File(self.convert_path(path)), - Directory(path) => Directory(self.convert_path(path)), - Symlink(path) => Symlink(self.convert_path(path)), - Other(path) => Other(self.convert_path(path)), + File(path) => File(self.convert_path(*path).to_resolved().await?), + Directory(path) => Directory(self.convert_path(*path).to_resolved().await?), + Symlink(path) => Symlink(self.convert_path(*path).to_resolved().await?), + Other(path) => Other(self.convert_path(*path).to_resolved().await?), Error => Error, }; diff --git a/turbopack/crates/turbo-tasks-fs/src/embed/fs.rs b/turbopack/crates/turbo-tasks-fs/src/embed/fs.rs index 72a43ece95d65..159042797b6eb 100644 --- a/turbopack/crates/turbo-tasks-fs/src/embed/fs.rs +++ b/turbopack/crates/turbo-tasks-fs/src/embed/fs.rs @@ -1,4 +1,5 @@ use anyhow::{bail, Result}; +use auto_hash_map::AutoMap; use include_dir::{Dir, DirEntry}; use turbo_tasks::{Completion, RcStr, ValueToString, Vc}; @@ -46,29 +47,26 @@ impl FileSystem for EmbeddedFileSystem { (_, None) => return Ok(DirectoryContent::NotFound.cell()), }; - let entries = dir - .entries() - .iter() - .map(|e| { - let entry_name: RcStr = e - .path() - .file_name() - .unwrap_or_default() - .to_string_lossy() - .into(); - let entry_path = path.join(entry_name.clone()); - - ( - entry_name, - match e { - DirEntry::Dir(_) => DirectoryEntry::Directory(entry_path), - DirEntry::File(_) => DirectoryEntry::File(entry_path), - }, - ) - }) - .collect(); - - Ok(DirectoryContent::new(entries)) + let mut converted_entries = AutoMap::new(); + for e in dir.entries() { + let entry_name: RcStr = e + .path() + .file_name() + .unwrap_or_default() + .to_string_lossy() + .into(); + let entry_path = path.join(entry_name.clone()).to_resolved().await?; + + converted_entries.insert( + entry_name, + match e { + DirEntry::Dir(_) => DirectoryEntry::Directory(entry_path), + DirEntry::File(_) => DirectoryEntry::File(entry_path), + }, + ); + } + + Ok(DirectoryContent::new(converted_entries)) } #[turbo_tasks::function] diff --git a/turbopack/crates/turbo-tasks-fs/src/lib.rs b/turbopack/crates/turbo-tasks-fs/src/lib.rs index 611611fc297a9..404f43e62c792 100644 --- a/turbopack/crates/turbo-tasks-fs/src/lib.rs +++ b/turbopack/crates/turbo-tasks-fs/src/lib.rs @@ -59,7 +59,7 @@ use tokio::{ }; use tracing::Instrument; use turbo_tasks::{ - mark_stateful, trace::TraceRawVcs, Completion, Invalidator, RcStr, ReadRef, + mark_stateful, trace::TraceRawVcs, Completion, Invalidator, RcStr, ReadRef, ResolvedVc, SerializationInvalidator, ValueToString, Vc, }; use turbo_tasks_hash::{ @@ -530,29 +530,29 @@ impl FileSystem for DiskFileSystem { match &*self.read_dir_internal(fs_path).await? { InternalDirectoryContent::NotFound => Ok(DirectoryContent::not_found()), InternalDirectoryContent::Entries(entries) => { - let fs = fs_path.await?.fs; - let entries = entries - .iter() - .map(|(name, entry)| { - let entry = match entry { - InternalDirectoryEntry::File(path) => DirectoryEntry::File( - FileSystemPath::new_normalized(fs, path.clone()), - ), - InternalDirectoryEntry::Directory(path) => DirectoryEntry::Directory( - FileSystemPath::new_normalized(fs, path.clone()), - ), - InternalDirectoryEntry::Symlink(path) => DirectoryEntry::Symlink( - FileSystemPath::new_normalized(fs, path.clone()), - ), - InternalDirectoryEntry::Other(path) => DirectoryEntry::Other( - FileSystemPath::new_normalized(fs, path.clone()), - ), - InternalDirectoryEntry::Error => DirectoryEntry::Error, - }; - (name.clone(), entry) - }) - .collect(); - Ok(DirectoryContent::new(entries)) + let fs = *fs_path.await?.fs; + let normalize = + |path: &RcStr| FileSystemPath::new_normalized(fs, path.clone()).to_resolved(); + let mut normalized_entries = AutoMap::new(); + for (name, entry) in entries { + let entry = match entry { + InternalDirectoryEntry::File(path) => { + DirectoryEntry::File(normalize(path).await?) + } + InternalDirectoryEntry::Directory(path) => { + DirectoryEntry::Directory(normalize(path).await?) + } + InternalDirectoryEntry::Symlink(path) => { + DirectoryEntry::Symlink(normalize(path).await?) + } + InternalDirectoryEntry::Other(path) => { + DirectoryEntry::Other(normalize(path).await?) + } + InternalDirectoryEntry::Error => DirectoryEntry::Error, + }; + normalized_entries.insert(name.clone(), entry); + } + Ok(DirectoryContent::new(normalized_entries)) } } } @@ -881,7 +881,7 @@ impl ValueToString for DiskFileSystem { #[turbo_tasks::value] #[derive(Debug, Clone)] pub struct FileSystemPath { - pub fs: Vc>, + pub fs: ResolvedVc>, pub path: RcStr, } @@ -1085,7 +1085,7 @@ impl FileSystemPath { } #[turbo_tasks::value(transparent)] -pub struct FileSystemPathOption(Option>); +pub struct FileSystemPathOption(Option>); #[turbo_tasks::value_impl] impl FileSystemPathOption { @@ -1101,7 +1101,7 @@ impl FileSystemPath { /// /-separated path is expected to be already normalized (this is asserted /// in dev mode). #[turbo_tasks::function] - fn new_normalized(fs: Vc>, path: RcStr) -> Vc { + fn new_normalized(fs: ResolvedVc>, path: RcStr) -> Vc { // On Windows, the path must be converted to a unix path before creating. But on // Unix, backslashes are a valid char in file names, and the path can be // provided by the user, so we allow it. @@ -1125,7 +1125,7 @@ impl FileSystemPath { pub async fn join(self: Vc, path: RcStr) -> Result> { let this = self.await?; if let Some(path) = join_path(&this.path, &path) { - Ok(Self::new_normalized(this.fs, path.into())) + Ok(Self::new_normalized(*this.fs, path.into())) } else { bail!( "Vc(\"{}\").join(\"{}\") leaves the filesystem root", @@ -1147,7 +1147,7 @@ impl FileSystemPath { ) } Ok(Self::new_normalized( - this.fs, + *this.fs, format!("{}{}", this.path, path).into(), )) } @@ -1166,12 +1166,12 @@ impl FileSystemPath { } if let (path, Some(ext)) = this.split_extension() { return Ok(Self::new_normalized( - this.fs, + *this.fs, format!("{}{}.{}", path, appending, ext).into(), )); } Ok(Self::new_normalized( - this.fs, + *this.fs, format!("{}{}", this.path, appending).into(), )) } @@ -1182,7 +1182,9 @@ impl FileSystemPath { pub async fn try_join(&self, path: RcStr) -> Result> { if let Some(path) = join_path(&self.path, &path) { Ok(Vc::cell(Some( - Self::new_normalized(self.fs, path.into()).resolve().await?, + Self::new_normalized(*self.fs, path.into()) + .to_resolved() + .await?, ))) } else { Ok(FileSystemPathOption::none()) @@ -1196,7 +1198,9 @@ impl FileSystemPath { if let Some(path) = join_path(&self.path, &path) { if path.starts_with(&*self.path) { return Ok(Vc::cell(Some( - Self::new_normalized(self.fs, path.into()).resolve().await?, + Self::new_normalized(*self.fs, path.into()) + .to_resolved() + .await?, ))); } } @@ -1219,7 +1223,7 @@ impl FileSystemPath { #[turbo_tasks::function] pub fn fs(&self) -> Vc> { - self.fs + *self.fs } #[turbo_tasks::function] @@ -1243,7 +1247,7 @@ impl FileSystemPath { pub async fn with_extension(&self, extension: RcStr) -> Vc { let (path_without_extension, _) = self.split_extension(); Self::new_normalized( - self.fs, + *self.fs, // Like `Path::with_extension` and `PathBuf::set_extension`, if the extension is empty, // we remove the extension altogether. match extension.is_empty() { @@ -1392,7 +1396,7 @@ impl FileSystemPath { Some(index) => path[..index].to_string(), None => "".to_string(), }; - Ok(FileSystemPath::new_normalized(this.fs, p.into())) + Ok(FileSystemPath::new_normalized(*this.fs, p.into())) } #[turbo_tasks::function] @@ -1427,7 +1431,7 @@ impl FileSystemPath { } #[turbo_tasks::function] - pub async fn realpath_with_links(self: Vc) -> Result> { + pub async fn realpath_with_links(self: ResolvedVc) -> Result> { let this = self.await?; if this.is_root() { return Ok(RealPathResult { @@ -1436,14 +1440,18 @@ impl FileSystemPath { } .cell()); } - let parent = self.parent().resolve().await?; + let parent = self.parent().to_resolved().await?; let parent_result = parent.realpath_with_links().await?; let basename = this .path .rsplit_once('/') .map_or(this.path.as_str(), |(_, name)| name); let real_self = if parent_result.path != parent { - parent_result.path.join(basename.into()).resolve().await? + parent_result + .path + .join(basename.into()) + .to_resolved() + .await? } else { self }; @@ -1452,12 +1460,12 @@ impl FileSystemPath { if let LinkContent::Link { target, link_type } = &*real_self.read_link().await? { result.symlinks.push(real_self); result.path = if link_type.contains(LinkType::ABSOLUTE) { - real_self.root().resolve().await? + real_self.root().to_resolved().await? } else { result.path } .join(target.clone()) - .resolve() + .to_resolved() .await?; return Ok(result.cell()); } @@ -1480,15 +1488,15 @@ impl ValueToString for FileSystemPath { #[derive(Clone, Debug)] #[turbo_tasks::value(shared)] pub struct RealPathResult { - pub path: Vc, - pub symlinks: Vec>, + pub path: ResolvedVc, + pub symlinks: Vec>, } #[turbo_tasks::value_impl] impl RealPathResult { #[turbo_tasks::function] pub fn path(&self) -> Vc { - self.path + *self.path } } @@ -2080,10 +2088,10 @@ pub enum InternalDirectoryEntry { #[derive(Hash, Clone, Copy, Debug, PartialEq, Eq, TraceRawVcs, Serialize, Deserialize)] pub enum DirectoryEntry { - File(Vc), - Directory(Vc), - Symlink(Vc), - Other(Vc), + File(ResolvedVc), + Directory(ResolvedVc), + Symlink(ResolvedVc), + Other(ResolvedVc), Error, } @@ -2093,7 +2101,7 @@ pub enum DirectoryEntry { impl DirectoryEntry { pub async fn resolve_symlink(self) -> Result { if let DirectoryEntry::Symlink(symlink) = self { - let real_path = symlink.realpath().resolve().await?; + let real_path = symlink.realpath().to_resolved().await?; match *real_path.get_type().await? { FileSystemEntryType::Directory => Ok(DirectoryEntry::Directory(real_path)), FileSystemEntryType::File => Ok(DirectoryEntry::File(real_path)), diff --git a/turbopack/crates/turbo-tasks-fs/src/read_glob.rs b/turbopack/crates/turbo-tasks-fs/src/read_glob.rs index 69d1dbc2afd69..d5a88996ce2c2 100644 --- a/turbopack/crates/turbo-tasks-fs/src/read_glob.rs +++ b/turbopack/crates/turbo-tasks-fs/src/read_glob.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use anyhow::Result; -use turbo_tasks::{RcStr, Vc}; +use turbo_tasks::{RcStr, ResolvedVc, Vc}; use crate::{glob::Glob, DirectoryContent, DirectoryEntry, FileSystemPath}; @@ -9,7 +9,7 @@ use crate::{glob::Glob, DirectoryContent, DirectoryEntry, FileSystemPath}; #[derive(Default, Debug)] pub struct ReadGlobResult { pub results: HashMap, - pub inner: HashMap>, + pub inner: HashMap>, } /// Reads matches of a glob pattern. @@ -22,7 +22,7 @@ pub async fn read_glob( glob: Vc, include_dot_files: bool, ) -> Result> { - read_glob_internal("", directory, glob, include_dot_files).await + Ok(*read_glob_internal("", directory, glob, include_dot_files).await?) } #[turbo_tasks::function(fs)] @@ -32,7 +32,7 @@ async fn read_glob_inner( glob: Vc, include_dot_files: bool, ) -> Result> { - read_glob_internal(&prefix, directory, glob, include_dot_files).await + Ok(*read_glob_internal(&prefix, directory, glob, include_dot_files).await?) } async fn read_glob_internal( @@ -40,7 +40,7 @@ async fn read_glob_internal( directory: Vc, glob: Vc, include_dot_files: bool, -) -> Result> { +) -> Result> { let dir = directory.read_dir().await?; let mut result = ReadGlobResult::default(); let glob_value = glob.await?; @@ -63,7 +63,9 @@ async fn read_glob_internal( if glob_value.execute(&full_path_prefix) { result.inner.insert( full_path, - read_glob_inner(full_path_prefix, path, glob, include_dot_files), + read_glob_inner(full_path_prefix, *path, glob, include_dot_files) + .to_resolved() + .await?, ); } } @@ -78,5 +80,5 @@ async fn read_glob_internal( } DirectoryContent::NotFound => {} } - Ok(ReadGlobResult::cell(result)) + Ok(ReadGlobResult::resolved_cell(result)) } diff --git a/turbopack/crates/turbopack-core/src/chunk/optimize.rs b/turbopack/crates/turbopack-core/src/chunk/optimize.rs index d216b25174bb0..bea7a542ce426 100644 --- a/turbopack/crates/turbopack-core/src/chunk/optimize.rs +++ b/turbopack/crates/turbopack-core/src/chunk/optimize.rs @@ -45,7 +45,7 @@ where Ok(( if let Some(common_parent) = &*common_parent { - Some(FileSystemPathKey::new(*common_parent).await?) + Some(FileSystemPathKey::new(**common_parent).await?) } else { None }, diff --git a/turbopack/crates/turbopack-core/src/resolve/mod.rs b/turbopack/crates/turbopack-core/src/resolve/mod.rs index fa9ad1e0cb147..fc1c7d8d5f12b 100644 --- a/turbopack/crates/turbopack-core/src/resolve/mod.rs +++ b/turbopack/crates/turbopack-core/src/resolve/mod.rs @@ -1010,7 +1010,7 @@ async fn type_exists( ) -> Result>> { let result = fs_path.resolve().await?.realpath_with_links().await?; for path in result.symlinks.iter() { - refs.push(Vc::upcast(FileSource::new(*path))); + refs.push(Vc::upcast(FileSource::new(**path))); } let path = result.path.resolve().await?; Ok(if *path.get_type().await? == ty { @@ -1026,7 +1026,7 @@ async fn any_exists( ) -> Result)>> { let result = fs_path.resolve().await?.realpath_with_links().await?; for path in result.symlinks.iter() { - refs.push(Vc::upcast(FileSource::new(*path))); + refs.push(Vc::upcast(FileSource::new(**path))); } let path = result.path.resolve().await?; let ty = *path.get_type().await?; @@ -1334,10 +1334,10 @@ pub async fn resolve_raw( let RealPathResult { path, symlinks } = &*path.realpath_with_links().await?; Ok(ResolveResult::source_with_affecting_sources( RequestKey::new(request.into()), - Vc::upcast(FileSource::new(*path)), + Vc::upcast(FileSource::new(**path)), symlinks .iter() - .copied() + .map(|symlink| **symlink) .map(FileSource::new) .map(Vc::upcast) .collect(), @@ -2583,7 +2583,7 @@ async fn resolved( if let Some(resolved_map) = options_value.resolved_map { let result = resolved_map - .lookup(*path, original_context, original_request) + .lookup(**path, original_context, original_request) .await?; let resolved_result = resolve_import_map_result( @@ -2603,10 +2603,10 @@ async fn resolved( Ok(ResolveResult::source_with_affecting_sources( request_key, - Vc::upcast(FileSource::new_with_query(*path, query)), + Vc::upcast(FileSource::new_with_query(**path, query)), symlinks .iter() - .copied() + .map(|symlink| **symlink) .map(FileSource::new) .map(Vc::upcast) .collect(), diff --git a/turbopack/crates/turbopack-core/src/resolve/pattern.rs b/turbopack/crates/turbopack-core/src/resolve/pattern.rs index b0802bc504a8c..df2b4623dd448 100644 --- a/turbopack/crates/turbopack-core/src/resolve/pattern.rs +++ b/turbopack/crates/turbopack-core/src/resolve/pattern.rs @@ -1512,7 +1512,7 @@ pub async fn read_matches( if let Some(pos) = pat.match_position(&prefix) { results.push(( pos, - PatternMatch::File(prefix.clone().into(), *path), + PatternMatch::File(prefix.clone().into(), **path), )); } prefix.truncate(len) @@ -1527,7 +1527,7 @@ pub async fn read_matches( if let Some(pos) = pat.match_position(&prefix) { results.push(( pos, - PatternMatch::Directory(prefix.clone().into(), *path), + PatternMatch::Directory(prefix.clone().into(), **path), )); } prefix.push('/'); @@ -1535,13 +1535,13 @@ pub async fn read_matches( if let Some(pos) = pat.match_position(&prefix) { results.push(( pos, - PatternMatch::Directory(prefix.clone().into(), *path), + PatternMatch::Directory(prefix.clone().into(), **path), )); } if let Some(pos) = pat.could_match_position(&prefix) { nested.push(( pos, - read_matches(*path, prefix.clone().into(), true, pattern), + read_matches(**path, prefix.clone().into(), true, pattern), )); } prefix.truncate(len) @@ -1562,13 +1562,16 @@ pub async fn read_matches( pos, PatternMatch::Directory( prefix.clone().into(), - *fs_path, + **fs_path, ), )); } else { results.push(( pos, - PatternMatch::File(prefix.clone().into(), *fs_path), + PatternMatch::File( + prefix.clone().into(), + **fs_path, + ), )); } } @@ -1583,7 +1586,7 @@ pub async fn read_matches( pos, PatternMatch::Directory( prefix.clone().into(), - *fs_path, + **fs_path, ), )); } @@ -1598,7 +1601,7 @@ pub async fn read_matches( pos, PatternMatch::Directory( prefix.clone().into(), - *fs_path, + **fs_path, ), )); } diff --git a/turbopack/crates/turbopack-dev-server/src/source/static_assets.rs b/turbopack/crates/turbopack-dev-server/src/source/static_assets.rs index dc8ef38e3984f..8e113c1e3d198 100644 --- a/turbopack/crates/turbopack-dev-server/src/source/static_assets.rs +++ b/turbopack/crates/turbopack-dev-server/src/source/static_assets.rs @@ -56,11 +56,11 @@ async fn get_routes_from_directory(dir: Vc) -> Result Some( - get_routes_from_directory(*path) + get_routes_from_directory(**path) .with_prepended_base(vec![BaseSegment::Static(name.clone())]), ), _ => None, @@ -121,12 +121,12 @@ impl Introspectable for StaticAssetsContentSource { .map(|(name, entry)| { let child = match entry { DirectoryEntry::File(path) | DirectoryEntry::Symlink(path) => { - IntrospectableSource::new(Vc::upcast(FileSource::new(*path))) + IntrospectableSource::new(Vc::upcast(FileSource::new(**path))) } DirectoryEntry::Directory(path) => { Vc::upcast(StaticAssetsContentSource::with_prefix( Vc::cell(format!("{}{name}/", &*prefix).into()), - *path, + **path, )) } DirectoryEntry::Other(_) => todo!("what's DirectoryContent::Other?"), diff --git a/turbopack/crates/turbopack-ecmascript/src/references/node.rs b/turbopack/crates/turbopack-ecmascript/src/references/node.rs index 49c78c2b28ef4..820b121a30610 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/node.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/node.rs @@ -122,11 +122,11 @@ async fn resolve_reference_from_dir( PatternMatch::File(matched_path, file) => { let realpath = file.realpath_with_links().await?; for &symlink in &realpath.symlinks { - affecting_sources.push(Vc::upcast(FileSource::new(symlink))); + affecting_sources.push(Vc::upcast(FileSource::new(*symlink))); } results.push(( RequestKey::new(matched_path.clone()), - Vc::upcast(RawModule::new(Vc::upcast(FileSource::new(realpath.path)))), + Vc::upcast(RawModule::new(Vc::upcast(FileSource::new(*realpath.path)))), )); } PatternMatch::Directory(..) => {} diff --git a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs index 24f1beb39a358..6a096b422800c 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs @@ -84,7 +84,7 @@ impl DirList { DirectoryEntry::File(path) => { if let Some(relative_path) = root_val.get_relative_path_to(&*path.await?) { if regex.is_match(&relative_path) { - list.insert(relative_path, DirListEntry::File(*path)); + list.insert(relative_path, DirListEntry::File(**path)); } } } @@ -93,7 +93,7 @@ impl DirList { list.insert( relative_path, DirListEntry::Dir(DirList::read_internal( - root, *path, recursive, filter, + root, **path, recursive, filter, )), ); } diff --git a/turbopack/crates/turbopack-ecmascript/src/references/typescript.rs b/turbopack/crates/turbopack-ecmascript/src/references/typescript.rs index b6347fc845a8e..b2442a03a1005 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/typescript.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/typescript.rs @@ -80,7 +80,7 @@ impl ModuleReference for TsReferencePathAssetReference { .origin .asset_context() .process( - Vc::upcast(FileSource::new(*path)), + Vc::upcast(FileSource::new(**path)), Value::new(ReferenceType::TypeScript( TypeScriptReferenceSubType::Undefined, )), diff --git a/turbopack/crates/turbopack-node/src/transforms/webpack.rs b/turbopack/crates/turbopack-node/src/transforms/webpack.rs index 5460599d78927..ebd1fce574d80 100644 --- a/turbopack/crates/turbopack-node/src/transforms/webpack.rs +++ b/turbopack/crates/turbopack-node/src/transforms/webpack.rs @@ -704,7 +704,7 @@ async fn dir_dependency(glob: Vc) -> Result> { let glob = glob.await?; glob.inner .values() - .map(|&inner| dir_dependency(inner)) + .map(|&inner| dir_dependency(*inner)) .try_join() .await?; shallow.await?; diff --git a/turbopack/crates/turbopack-resolve/src/node_native_binding.rs b/turbopack/crates/turbopack-resolve/src/node_native_binding.rs index 8216a9da9743d..827eda87a6e98 100644 --- a/turbopack/crates/turbopack-resolve/src/node_native_binding.rs +++ b/turbopack/crates/turbopack-resolve/src/node_native_binding.rs @@ -150,7 +150,7 @@ pub async fn resolve_node_pre_gyp_files( { sources.insert( format!("{native_binding_path}/{key}").into(), - Vc::upcast(FileSource::new(dylib)), + Vc::upcast(FileSource::new(*dylib)), ); } } @@ -179,17 +179,17 @@ pub async fn resolve_node_pre_gyp_files( DirectoryEntry::File(dylib) => { sources.insert( format!("deps/lib/{key}").into(), - Vc::upcast(FileSource::new(dylib)), + Vc::upcast(FileSource::new(*dylib)), ); } DirectoryEntry::Symlink(dylib) => { let realpath_with_links = dylib.realpath_with_links().await?; for &symlink in realpath_with_links.symlinks.iter() { - affecting_paths.push(symlink); + affecting_paths.push(*symlink); } sources.insert( format!("deps/lib/{key}").into(), - Vc::upcast(FileSource::new(realpath_with_links.path)), + Vc::upcast(FileSource::new(*realpath_with_links.path)), ); } _ => {} diff --git a/turbopack/crates/turbopack-resolve/src/typescript.rs b/turbopack/crates/turbopack-resolve/src/typescript.rs index ee5f27517bc59..a46faf4661933 100644 --- a/turbopack/crates/turbopack-resolve/src/typescript.rs +++ b/turbopack/crates/turbopack-resolve/src/typescript.rs @@ -269,7 +269,7 @@ pub async fn tsconfig_resolve_options( let mut context_dir = source.ident().path().parent(); if let Some(base_url) = json["compilerOptions"]["baseUrl"].as_str() { if let Some(new_context) = *context_dir.try_join(base_url.into()).await? { - context_dir = new_context; + context_dir = *new_context; } }; for (key, value) in paths.iter() { @@ -336,7 +336,7 @@ pub async fn tsconfig_resolve_options( .unwrap_or_default(); Ok(TsConfigResolveOptions { - base_url, + base_url: base_url.as_deref().copied(), import_map, is_module_resolution_nodenext, } diff --git a/turbopack/crates/turbopack-test-utils/src/snapshot.rs b/turbopack/crates/turbopack-test-utils/src/snapshot.rs index c8d34ef86b2f0..2c73d5bd7e53f 100644 --- a/turbopack/crates/turbopack-test-utils/src/snapshot.rs +++ b/turbopack/crates/turbopack-test-utils/src/snapshot.rs @@ -91,7 +91,7 @@ pub async fn expected(dir: Vc) -> Result { - expected.insert(*file); + expected.insert(**file); } _ => bail!( "expected file at {}, found {:?}", From 7f5c64b295f872461898855d3d21fe7713f2a598 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Thu, 3 Oct 2024 21:09:37 -0700 Subject: [PATCH 05/19] docs(turbo-tasks): Rewrite the `turbo_tasks::value` documentation (#70743) This documentation contained broken links, broken formatting, grammatical mistakes, misleading or outdated information, incomplete information, and lacked context one why one might use the various arguments. ![Screenshot 2024-10-02 at 21-40-23 value in turbo_tasks - Rust.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/HAZVitxRNnZz8QMiPn4a/4ed70252-9996-4070-843c-df510c664444.png) --- .../crates/turbo-tasks-macros/src/lib.rs | 77 ------------- .../turbo-tasks-macros/src/value_macro.rs | 6 +- turbopack/crates/turbo-tasks/src/lib.rs | 105 +++++++++++++++++- .../crates/turbo-tasks/src/vc/resolved.rs | 2 +- turbopack/crates/turbo-tasks/src/vc/traits.rs | 10 +- 5 files changed, 113 insertions(+), 87 deletions(-) diff --git a/turbopack/crates/turbo-tasks-macros/src/lib.rs b/turbopack/crates/turbo-tasks-macros/src/lib.rs index 75124c7ae8c0e..8e6358c47ed40 100644 --- a/turbopack/crates/turbo-tasks-macros/src/lib.rs +++ b/turbopack/crates/turbo-tasks-macros/src/lib.rs @@ -47,83 +47,6 @@ pub fn derive_task_input(input: TokenStream) -> TokenStream { derive::derive_task_input(input) } -/// Creates a Vc struct for a `struct` or `enum` that represent -/// that type placed into a cell in a Task. -/// -/// That Vc object can be `await`ed to get a readonly reference -/// to the value contained in the cell. -/// -/// ## Arguments -/// -/// Example: `#[turbo_tasks::value(into = "new", eq = "manual")]` -/// -/// ### `cell` -/// -/// Possible values: -/// -/// - "new": Always overrides the value in the cell. Invalidating all -/// dependent tasks. -/// - "shared" (default): Compares with the existing value in the cell, before -/// overriding it. Requires Value to implement [Eq]. -/// -/// ### `eq` -/// -/// Possible values: -/// -/// - "manual": Prevents deriving [Eq] so you can do it manually. -/// -/// ### `into` -/// -/// When provided the Vc implement `From` to allow to convert -/// a Value to a Vc by placing it into a cell in a Task. -/// -/// Possible values: -/// -/// - "new": Always overrides the value in the cell. Invalidating all -/// dependent tasks. -/// - "shared": Compares with the existing value in the cell, before -/// overriding it. Requires Value to implement [Eq]. -/// - "none" (default): Prevents implementing `From`. -/// -/// ### `serialization` -/// -/// Affects serialization via [serde::Serialize] and [serde::Deserialize]. -/// -/// Possible values: -/// -/// - "auto" (default): Derives the serialization traits and enabled serialization. -/// - "auto_for_input": Same as "auto", but also adds the marker trait [turbo_tasks::TypedForInput]. -/// - "custom": Prevents deriving the serialization traits, but still enables serialization (you -/// need to manually implement [serde::Serialize] and [serde::Deserialize]). -/// - "custom_for_input":Same as "auto", but also adds the marker trait -/// [turbo_tasks::TypedForInput]. -/// - "none": Disables serialization and prevents deriving the traits. -/// -/// ### `shared` -/// -/// Sets both `cell = "shared"` and `into = "shared"` -/// -/// No value. -/// -/// Example: `#[turbo_tasks::value(shared)]` -/// -/// ### `transparent` -/// -/// If applied to a unit struct (e.g. `struct Wrapper(Value)`) the outer struct -/// is skipped for all operations (cell, into, reading). -/// -/// No value. -/// -/// Example: `#[turbo_tasks::value(transparent)]` -/// -/// ### `resolved` -/// -/// A shorthand syntax for -/// [`#[derive(turbo_tasks::ResolvedValue)]`][macro@turbo_tasks::ResolvedValue] -/// -/// Example: `#[turbo_tasks::value(resolved)]` -/// -/// TODO: add more documentation: presets, traits #[allow_internal_unstable(min_specialization, into_future, trivial_bounds)] #[proc_macro_error] #[proc_macro_attribute] diff --git a/turbopack/crates/turbo-tasks-macros/src/value_macro.rs b/turbopack/crates/turbo-tasks-macros/src/value_macro.rs index 0319c9ea4a511..570aeea20b3f3 100644 --- a/turbopack/crates/turbo-tasks-macros/src/value_macro.rs +++ b/turbopack/crates/turbo-tasks-macros/src/value_macro.rs @@ -339,9 +339,9 @@ pub fn value(args: TokenStream, input: TokenStream) -> TokenStream { let into = if let IntoMode::New | IntoMode::Shared = into_mode { quote! { - impl Into> for #ident { - fn into(self) -> turbo_tasks::Vc<#ident> { - self.cell() + impl ::std::convert::From<#ident> for turbo_tasks::Vc<#ident> { + fn from(value: #ident) -> Self { + value.cell() } } } diff --git a/turbopack/crates/turbo-tasks/src/lib.rs b/turbopack/crates/turbo-tasks/src/lib.rs index a289b5ad18aea..b65a3ae423a27 100644 --- a/turbopack/crates/turbo-tasks/src/lib.rs +++ b/turbopack/crates/turbo-tasks/src/lib.rs @@ -107,7 +107,7 @@ pub use serialization_invalidation::SerializationInvalidator; pub use state::{State, TransientState}; pub use task::{task_input::TaskInput, SharedReference}; pub use trait_ref::{IntoTraitRef, TraitRef}; -pub use turbo_tasks_macros::{function, value, value_impl, value_trait, TaskInput}; +pub use turbo_tasks_macros::{function, value_impl, value_trait, TaskInput}; pub use value::{TransientInstance, TransientValue, Value}; pub use value_type::{TraitMethod, TraitType, ValueType}; pub use vc::{ @@ -118,6 +118,109 @@ pub use vc::{ pub use crate::rcstr::RcStr; +/// Implements [`VcValueType`] for the given `struct` or `enum`. These value types can be used +/// inside of a "value cell" as [`Vc<...>`][Vc]. +/// +/// A [`Vc`] represents a (potentially lazy) memoized computation. Each [`Vc`]'s value is placed +/// into a cell associated with the current [`TaskId`]. That [`Vc`] object can be `await`ed to get +/// [a read-only reference to the value contained in the cell][ReadRef]. +/// +/// This macro accepts multiple comma-separated arguments. For example: +/// +/// ``` +/// # #![feature(arbitrary_self_types)] +/// #[turbo_tasks::value(transparent, into = "shared")] +/// struct Foo(Vec); +/// ``` +/// +/// ## `cell = "..."` +/// +/// Controls when a cell is invalidated upon recomputation of a task. Internally, this is performed +/// by setting the [`VcValueType::CellMode`] associated type. +/// +/// - **`"new"`:** Always overrides the value in the cell, invalidating all dependent tasks. +/// - **`"shared"` *(default)*:** Compares with the existing value in the cell, before overriding it. +/// Requires the value to implement [`Eq`]. +/// +/// Avoiding unnecessary invalidation is important to reduce downstream recomputation of tasks that +/// depend on this cell's value. +/// +/// Use `"new"` only if a correct implementation of [`Eq`] is not possible, would be expensive (e.g. +/// would require comparing a large collection), or if you're implementing a low-level primitive +/// that intentionally forces recomputation. +/// +/// ## `eq = "..."` +/// +/// By default, we `#[derive(PartialEq, Eq)]`. [`Eq`] is required by `cell = "shared"`. This +/// argument allows overriding that default implementation behavior. +/// +/// - **`"manual"`:** Prevents deriving [`Eq`] and [`PartialEq`] so you can do it manually. +/// +/// ## `into = "..."` +/// +/// This macro always implements a `.cell()` method on your type with the signature: +/// +/// ```ignore +/// /// Wraps the value in a cell. +/// fn cell(self) -> Vc; +/// ``` +/// +/// This argument controls the visibility of the `.cell()` method, as well as whether a +/// [`From for Vc`][From] implementation is generated. +/// +/// - **`"new"` or `"shared"`:** Exposes both `.cell()` and [`From`]/[`Into`] implementations. Both +/// of these values (`"new"` or `"shared"`) do the same thing (for legacy reasons). +/// - **`"none"` *(default)*:** Makes `.cell()` private and prevents implementing [`From`]/[`Into`]. +/// +/// You should use the default value of `"none"` when providing your own public constructor methods. +/// +/// The naming of this field and it's values are due to legacy reasons. +/// +/// ## `serialization = "..."` +/// +/// Affects serialization via [`serde::Serialize`] and [`serde::Deserialize`]. Serialization is +/// required for persistent caching of tasks to disk. +/// +/// - **`"auto"` *(default)*:** Derives the serialization traits and enables serialization. +/// - **`"auto_for_input"`:** Same as `"auto"`, but also adds the marker trait [`TypedForInput`]. +/// - **`"custom"`:** Prevents deriving the serialization traits, but still enables serialization +/// (you must manually implement [`serde::Serialize`] and [`serde::Deserialize`]). +/// - **`"custom_for_input"`:** Same as `"custom"`, but also adds the marker trait +/// [`TypedForInput`]. +/// - **`"none"`:** Disables serialization and prevents deriving the traits. +/// +/// ## `shared` +/// +/// Sets both `cell = "shared"` *(already the default)* and `into = "shared"`, exposing the +/// `.cell()` method and adding a [`From`]/[`Into`] implementation. +/// +/// ## `transparent` +/// +/// This attribute is only valid on single-element unit structs. When this value is set: +/// +/// 1. The struct will use [`#[repr(transparent)]`][repr-transparent]. +/// 1. Read operations (`vc.await?`) return a [`ReadRef`] containing the inner type, rather than the +/// outer struct. Internally, this is accomplished using [`VcTransparentRead`] for the +/// [`VcValueType::Read`] associated type. +/// 1. Construction of the type must be performed using [`Vc::cell(inner)`][Vc::cell], rather than +/// using the `.cell()` method on the outer type (`outer.cell()`). +/// 1. The [`ValueDebug`][crate::debug::ValueDebug] implementation will defer to the inner type. +/// +/// This is commonly used to create [`VcValueType`] wrappers for foreign or generic types, such as +/// [`Vec`] or [`Option`]. +/// +/// [repr-transparent]: https://doc.rust-lang.org/nomicon/other-reprs.html#reprtransparent +/// +/// ## `resolved` +/// +/// Applies the [`#[derive(ResolvedValue)]`][macro@ResolvedValue] macro. +/// +/// Indicates that this struct has no fields containing [`Vc`] by implementing the [`ResolvedValue`] +/// marker trait. In order to safely implement [`ResolvedValue`], this inserts compile-time +/// assertions that every field in this struct has a type that is also a [`ResolvedValue`]. +#[rustfmt::skip] +pub use turbo_tasks_macros::value; + pub type TaskIdSet = AutoSet, 2>; pub mod test_helpers { diff --git a/turbopack/crates/turbo-tasks/src/vc/resolved.rs b/turbopack/crates/turbo-tasks/src/vc/resolved.rs index 3f194faed1567..3b85ff4a6e584 100644 --- a/turbopack/crates/turbo-tasks/src/vc/resolved.rs +++ b/turbopack/crates/turbo-tasks/src/vc/resolved.rs @@ -222,7 +222,7 @@ where /// /// This trait is marked as unsafe. You should not derive it yourself, but /// instead you should rely on [`#[turbo_tasks::value(resolved)]`][macro@ -/// turbo_tasks::value] to do it for you. +/// crate::value] to do it for you. pub unsafe trait ResolvedValue {} unsafe impl ResolvedValue for ResolvedVc {} diff --git a/turbopack/crates/turbo-tasks/src/vc/traits.rs b/turbopack/crates/turbo-tasks/src/vc/traits.rs index 526db09af974b..a4dbad46e5c35 100644 --- a/turbopack/crates/turbo-tasks/src/vc/traits.rs +++ b/turbopack/crates/turbo-tasks/src/vc/traits.rs @@ -54,9 +54,9 @@ where { } -/// Marker trait that a turbo_tasks::value is prepared for -/// serialization as [`Value<...>`][crate::Value] input. -/// Either use [`#[turbo_tasks::value(serialization: -/// auto_for_input)]`][macro@crate::value] or avoid [`Value<...>`][crate::Value] -/// in favor of a real [Vc][crate::Vc]. +/// Marker trait that a turbo_tasks::value is prepared for serialization as +/// [`Value<...>`][crate::Value] input. +/// +/// Either use [`#[turbo_tasks::value(serialization = "auto_for_input")]`][macro@crate::value] or +/// avoid [`Value<...>`][crate::Value] in favor of a real [Vc][crate::Vc]. pub trait TypedForInput: VcValueType {} From e2ed2c567a3f72109d3415a72b9bfa1d6fb4ade5 Mon Sep 17 00:00:00 2001 From: Josh Story Date: Thu, 3 Oct 2024 22:59:46 -0700 Subject: [PATCH 06/19] [dynamicIO] Error when dynamic behavior is outside of a Suspense boundary (#70734) When `dynamicIO` is enabled it is important that you can reason about what parts of component tree are allowed to be dynamic and which must be static. The heuristic we're going with is to require that anything dynamic must be rendered inside a Suspense boundary. The rationale here is that if you have a static component then you don't need to define a fallback UI for it because it will never render. Conversely to have a useful dynamic site having a well defined fallback UI to show when the dynamic part is not ready yet is helpful. If PPR is turned off the Suspense boundaries won't actually define a static UI during prerendering but we want the upgrade path to PPR to be as unblocked as possible so we require that you follow this semantic when `dynamicIO` is enabled even if PPR is not. There are some special considerations we need to make for `generateMetadata`, `generateViewport`, and use of synchronosuly dynamic APIs like `(cookies() as unknown as UnsafeUnwrappedCookies).get(...)`. Metadata & Viewport can't be wrapped in a Suspense boundary. So if something else in your application is dynamic we don't error for dynamic metadata/viewport. If dynamic metadata/viewport is the only thing that is dynamic in your application we consider this an error. Your recourse is to make these functions only read static/cached data or alternatively you can make the application itself dynamic by introducing something dynamic inside a Suspense boundary. If you use a Synchronously dynamic API like the one mentioned above you will likely get incomplete parts of your component tree identified as dynamic b/c the synchronous dynamic API immediately terminates the prerender. We provide component stacks in these cases but the correct fix is to find the synchronous dynamic API and make it async. --- .../src/lib/metadata/metadata-boundary.tsx | 48 +++ .../src/lib/metadata/metadata-constants.tsx | 3 + packages/next/src/lib/metadata/metadata.tsx | 12 +- .../next/src/server/app-render/app-render.tsx | 69 +++- .../app-render/create-component-tree.tsx | 100 +---- .../server/app-render/dynamic-rendering.ts | 216 +++++++--- .../next/src/server/app-render/entry-base.ts | 8 + .../acceptance-app/hydration-error.test.ts | 18 +- .../app-dir/dynamic-data/dynamic-data.test.ts | 2 - .../require-static/app/connection/page.js | 4 +- .../dynamic-io-errors.sync-dynamic.ts | 340 +++++++++++++++ .../dynamic-io-errors.test.ts | 361 ++++++++++++++++ .../dynamic-boundary/app/indirection.tsx | 13 + .../fixtures/dynamic-boundary/app/layout.tsx | 9 + .../fixtures/dynamic-boundary/app/page.tsx | 64 +++ .../fixtures/dynamic-boundary/next.config.js | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 31 ++ .../next.config.js | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 17 + .../next.config.js | 13 + .../fixtures/dynamic-root/app/indirection.tsx | 13 + .../fixtures/dynamic-root/app/layout.tsx | 9 + .../fixtures/dynamic-root/app/page.tsx | 65 +++ .../fixtures/dynamic-root/next.config.js | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 31 ++ .../next.config.js | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 17 + .../next.config.js | 13 + .../fixtures/static/app/layout.tsx | 9 + .../fixtures/static/app/page.tsx | 3 + .../fixtures/static/next.config.js | 13 + .../app/indirection.tsx | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 84 ++++ .../next.config.js | 13 + .../app/indirection.tsx | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 82 ++++ .../next.config.js | 13 + .../app/indirection.tsx | 13 + .../sync-cookies-with-fallback/app/layout.tsx | 9 + .../sync-cookies-with-fallback/app/page.tsx | 64 +++ .../sync-cookies-with-fallback/next.config.js | 13 + .../app/indirection.tsx | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 62 +++ .../next.config.js | 13 + .../app/indirection.tsx | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 76 ++++ .../next.config.js | 13 + .../app/indirection.tsx | 13 + .../app/layout.tsx | 9 + .../app/page.tsx | 74 ++++ .../next.config.js | 13 + .../page.tsx | 0 .../cases/dynamic_api_cookies_async/page.tsx | 28 -- .../cases/dynamic_api_cookies_root/page.tsx | 47 --- .../page.tsx | 0 .../cases/dynamic_api_headers_root/page.tsx | 46 --- .../page.tsx | 3 + .../cases/dynamic_api_no_store_root/page.tsx | 37 -- .../page.tsx | 0 .../page.tsx | 55 --- .../page.tsx | 0 .../page.tsx | 52 --- .../page.tsx | 0 .../app/cases/fetch_mixed_root/page.tsx | 50 --- .../{io_mixed_boundary => io_mixed}/page.tsx | 0 .../app/cases/io_mixed_root/page.tsx | 45 -- .../cases/parallel/@slot/no-store/page.tsx | 2 + .../cases/{task_boundary => task}/page.tsx | 0 .../dynamic-io/app/cases/task_root/page.tsx | 28 -- .../app-dir/dynamic-io/app/client-utils.ts | 23 ++ .../connection/static-behavior/root/page.tsx | 31 -- .../app/cookies/exercise/layout.tsx | 5 + .../{async_boundary => async}/page.tsx | 6 +- .../static-behavior/async_root/page.tsx | 25 -- .../{sync_boundary => sync}/page.tsx | 15 +- .../static-behavior/sync_root/page.tsx | 27 -- .../app/headers/exercise/async/page.tsx | 2 +- .../{commponents.tsx => components.tsx} | 0 .../app/headers/exercise/layout.tsx | 5 + .../app/headers/exercise/sync/page.tsx | 2 +- .../{async_boundary => async}/page.tsx | 6 +- .../static-behavior/async_root/page.tsx | 26 -- .../{sync_boundary => sync}/page.tsx | 10 +- .../static-behavior/sync_root/page.tsx | 26 -- .../generate-static-params/[slug]/layout.tsx | 10 + .../sync/layout-access/client/layout.tsx | 13 +- .../sync/layout-access/server/layout.tsx | 1 + .../sync/layout-has/client/layout.tsx | 13 +- .../sync/layout-has/server/layout.tsx | 1 + .../sync/layout-spread/client/layout.tsx | 13 +- .../sync/layout-spread/server/layout.tsx | 1 + .../sync/page-access/client/page.tsx | 13 +- .../sync/page-access/server/page.tsx | 1 + .../[highcard]/sync/page-has/client/page.tsx | 13 +- .../[highcard]/sync/page-has/server/page.tsx | 1 + .../sync/page-spread/client/page.tsx | 13 +- .../sync/page-spread/server/page.tsx | 1 + .../[status]/sync/layout/client/layout.tsx | 7 + .../[status]/sync/layout/server/layout.tsx | 1 + .../[status]/sync/page/client/page.tsx | 7 + .../[status]/sync/page/server/page.tsx | 1 + .../app/params/shadowing/layout.tsx | 5 + .../client/{use_boundary => use}/page.tsx | 0 .../app/search/async/client/use_root/page.tsx | 48 --- .../server/{await_boundary => await}/page.tsx | 0 .../search/async/server/await_root/page.tsx | 44 -- .../server/{use_boundary => use}/page.tsx | 0 .../app/search/async/server/use_root/page.tsx | 46 --- .../{access_boundary => access}/page.tsx | 9 +- .../search/sync/client/access_root/page.tsx | 42 -- .../client/{has_boundary => has}/page.tsx | 9 +- .../app/search/sync/client/has_root/page.tsx | 48 --- .../{spread_boundary => spread}/page.tsx | 9 +- .../search/sync/client/spread_root/page.tsx | 54 --- .../{access_boundary => access}/page.tsx | 3 +- .../search/sync/server/access_root/page.tsx | 40 -- .../server/{has_boundary => has}/page.tsx | 3 +- .../app/search/sync/server/has_root/page.tsx | 46 --- .../{spread_boundary => spread}/page.tsx | 3 +- .../search/sync/server/spread_root/page.tsx | 52 --- .../dynamic-io/dynamic-io.connection.test.ts | 22 - .../dynamic-io/dynamic-io.cookies.test.ts | 56 +-- .../dynamic-io/dynamic-io.headers.test.ts | 56 +-- .../dynamic-io/dynamic-io.params.test.ts | 48 ++- .../dynamic-io/dynamic-io.search.test.ts | 388 +----------------- .../e2e/app-dir/dynamic-io/dynamic-io.test.ts | 210 +--------- test/e2e/app-dir/dynamic-io/next.config.js | 1 + .../instrumentation/opentelemetry.test.ts | 2 +- 136 files changed, 2338 insertions(+), 1859 deletions(-) create mode 100644 packages/next/src/lib/metadata/metadata-boundary.tsx create mode 100644 packages/next/src/lib/metadata/metadata-constants.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.ts create mode 100644 test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/indirection.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/indirection.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/indirection.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/indirection.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/indirection.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/indirection.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/indirection.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/indirection.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/layout.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js rename test/e2e/app-dir/dynamic-io/app/cases/{dynamic_api_cookies_boundary => dynamic_api_cookies}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_async/page.tsx delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/cases/{dynamic_api_headers_boundary => dynamic_api_headers}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/cases/{dynamic_api_no_store_boundary => dynamic_api_no_store}/page.tsx (88%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/cases/{dynamic_api_search_params_client_boundary => dynamic_api_search_params_client}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/cases/{dynamic_api_search_params_server_boundary => dynamic_api_search_params_server}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/cases/{fetch_mixed_boundary => fetch_mixed}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/cases/{io_mixed_boundary => io_mixed}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/io_mixed_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/cases/{task_boundary => task}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cases/task_root/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io/app/client-utils.ts delete mode 100644 test/e2e/app-dir/dynamic-io/app/connection/static-behavior/root/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io/app/cookies/exercise/layout.tsx rename test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/{async_boundary => async}/page.tsx (91%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/{sync_boundary => sync}/page.tsx (63%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/headers/exercise/{commponents.tsx => components.tsx} (100%) create mode 100644 test/e2e/app-dir/dynamic-io/app/headers/exercise/layout.tsx rename test/e2e/app-dir/dynamic-io/app/headers/static-behavior/{async_boundary => async}/page.tsx (91%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/headers/static-behavior/{sync_boundary => sync}/page.tsx (81%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_root/page.tsx create mode 100644 test/e2e/app-dir/dynamic-io/app/params/shadowing/layout.tsx rename test/e2e/app-dir/dynamic-io/app/search/async/client/{use_boundary => use}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/async/client/use_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/search/async/server/{await_boundary => await}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/async/server/await_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/search/async/server/{use_boundary => use}/page.tsx (100%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/async/server/use_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/search/sync/client/{access_boundary => access}/page.tsx (84%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/sync/client/access_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/search/sync/client/{has_boundary => has}/page.tsx (85%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/sync/client/has_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/search/sync/client/{spread_boundary => spread}/page.tsx (86%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/search/sync/server/{access_boundary => access}/page.tsx (91%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/sync/server/access_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/search/sync/server/{has_boundary => has}/page.tsx (92%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/sync/server/has_root/page.tsx rename test/e2e/app-dir/dynamic-io/app/search/sync/server/{spread_boundary => spread}/page.tsx (93%) delete mode 100644 test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_root/page.tsx diff --git a/packages/next/src/lib/metadata/metadata-boundary.tsx b/packages/next/src/lib/metadata/metadata-boundary.tsx new file mode 100644 index 0000000000000..483d7c72f8a76 --- /dev/null +++ b/packages/next/src/lib/metadata/metadata-boundary.tsx @@ -0,0 +1,48 @@ +'use client' + +import { + METADATA_BOUNDARY_NAME, + VIEWPORT_BOUNDARY_NAME, + OUTLET_BOUNDARY_NAME, +} from './metadata-constants' + +// We use a namespace object to allow us to recover the name of the function +// at runtime even when production bundling/minification is used. +const NameSpace = { + [METADATA_BOUNDARY_NAME]: function ({ + children, + }: { + children: React.ReactNode + }) { + return children + }, + [VIEWPORT_BOUNDARY_NAME]: function ({ + children, + }: { + children: React.ReactNode + }) { + return children + }, + [OUTLET_BOUNDARY_NAME]: function ({ + children, + }: { + children: React.ReactNode + }) { + return children + }, +} + +export const MetadataBoundary = + // We use slice(0) to trick the bundler into not inlining/minifying the function + // so it retains the name inferred from the namespace object + NameSpace[METADATA_BOUNDARY_NAME.slice(0) as typeof METADATA_BOUNDARY_NAME] + +export const ViewportBoundary = + // We use slice(0) to trick the bundler into not inlining/minifying the function + // so it retains the name inferred from the namespace object + NameSpace[VIEWPORT_BOUNDARY_NAME.slice(0) as typeof VIEWPORT_BOUNDARY_NAME] + +export const OutletBoundary = + // We use slice(0) to trick the bundler into not inlining/minifying the function + // so it retains the name inferred from the namespace object + NameSpace[OUTLET_BOUNDARY_NAME.slice(0) as typeof OUTLET_BOUNDARY_NAME] diff --git a/packages/next/src/lib/metadata/metadata-constants.tsx b/packages/next/src/lib/metadata/metadata-constants.tsx new file mode 100644 index 0000000000000..4e973215f282e --- /dev/null +++ b/packages/next/src/lib/metadata/metadata-constants.tsx @@ -0,0 +1,3 @@ +export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__' +export const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__' +export const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__' diff --git a/packages/next/src/lib/metadata/metadata.tsx b/packages/next/src/lib/metadata/metadata.tsx index 79ecb120f4bd1..fd998daf1651c 100644 --- a/packages/next/src/lib/metadata/metadata.tsx +++ b/packages/next/src/lib/metadata/metadata.tsx @@ -49,6 +49,8 @@ export function createMetadataComponents({ errorType, createServerParamsForMetadata, workStore, + MetadataBoundary, + ViewportBoundary, }: { tree: LoaderTree searchParams: Promise @@ -58,12 +60,18 @@ export function createMetadataComponents({ errorType?: 'not-found' | 'redirect' createServerParamsForMetadata: CreateServerParamsForMetadata workStore: WorkStore + MetadataBoundary: (props: { children: React.ReactNode }) => React.ReactNode + ViewportBoundary: (props: { children: React.ReactNode }) => React.ReactNode }): [React.ComponentType, () => Promise] { function MetadataRoot() { return ( <> - - + + + + + + {appUsingSizeAdjustment ? : null} ) diff --git a/packages/next/src/server/app-render/app-render.tsx b/packages/next/src/server/app-render/app-render.tsx index 47578c41893d6..faa23f668ca92 100644 --- a/packages/next/src/server/app-render/app-render.tsx +++ b/packages/next/src/server/app-render/app-render.tsx @@ -118,6 +118,8 @@ import { isRenderInterruptedReason, createDynamicTrackingState, getFirstDynamicReason, + trackAllowedDynamicAccess, + throwIfDisallowedDynamic, type DynamicTrackingState, } from './dynamic-rendering' import { @@ -389,6 +391,8 @@ async function generateDynamicRSCPayload( createServerSearchParamsForMetadata, createServerParamsForMetadata, createMetadataComponents, + MetadataBoundary, + ViewportBoundary, }, getDynamicParamFromSegment, appUsingSizeAdjustment, @@ -415,6 +419,8 @@ async function generateDynamicRSCPayload( appUsingSizeAdjustment, createServerParamsForMetadata, workStore, + MetadataBoundary, + ViewportBoundary, }) flightData = ( await walkTreeWithFlightRouterState({ @@ -569,6 +575,8 @@ async function getRSCPayload( createServerSearchParamsForMetadata, createServerParamsForMetadata, createMetadataComponents, + MetadataBoundary, + ViewportBoundary, }, requestStore: { url }, workStore, @@ -593,6 +601,8 @@ async function getRSCPayload( appUsingSizeAdjustment, createServerParamsForMetadata, workStore, + MetadataBoundary, + ViewportBoundary, }) const preloadCallbacks: PreloadCallbacks = [] @@ -668,6 +678,8 @@ async function getErrorRSCPayload( createServerSearchParamsForMetadata, createServerParamsForMetadata, createMetadataComponents, + MetadataBoundary, + ViewportBoundary, }, requestStore: { url }, requestId, @@ -686,6 +698,8 @@ async function getErrorRSCPayload( appUsingSizeAdjustment, createServerParamsForMetadata, workStore, + MetadataBoundary, + ViewportBoundary, }) const initialHead = ( @@ -1813,7 +1827,6 @@ async function prerenderToStream( onHTMLRenderSSRError ) - let dynamicTracking: null | DynamicTrackingState = null let reactServerPrerenderResult: null | ReactServerPrerenderResult = null const setHeader = (name: string, value: string | string[]) => { res.setHeader(name, value) @@ -1932,7 +1945,7 @@ async function prerenderToStream( // Reset the dynamic IO state for the final render reactServerIsDynamic = false flightController = new AbortController() - dynamicTracking = createDynamicTrackingState( + let dynamicTracking = createDynamicTrackingState( renderOpts.isDebugDynamicAccesses ) @@ -2003,9 +2016,23 @@ async function prerenderToStream( dynamicTracking, } let SSRIsDynamic = false - function SSROnError(err: unknown, errorInfo?: ErrorInfo) { - if (err === abortReason || isPrerenderInterruptedError(err)) { + function SSROnError(err: unknown, errorInfo: ErrorInfo) { + if ( + isAbortReason(err, abortReason) || + isPrerenderInterruptedError(err) + ) { SSRIsDynamic = true + + const componentStack: string | undefined = (errorInfo as any) + .componentStack + if (typeof componentStack === 'string') { + trackAllowedDynamicAccess( + workStore.route, + err, + componentStack, + dynamicTracking + ) + } return } @@ -2057,6 +2084,8 @@ async function prerenderToStream( } ) + throwIfDisallowedDynamic(workStore, dynamicTracking) + const getServerInsertedHTML = makeGetServerInsertedHTML({ polyfills, renderServerInsertedHTML, @@ -2174,7 +2203,7 @@ async function prerenderToStream( // details between the prospective render and the final render let flightController = new AbortController() - dynamicTracking = createDynamicTrackingState( + let dynamicTracking = createDynamicTrackingState( renderOpts.isDebugDynamicAccesses ) @@ -2287,12 +2316,22 @@ async function prerenderToStream( ) function SSROnError(err: unknown, errorInfo?: ErrorInfo) { - if (err === abortReason) { - SSRIsDynamic = true - return PRERENDER_COMPLETE - } else if (isPrerenderInterruptedError(err)) { + if ( + isAbortReason(err, abortReason) || + isPrerenderInterruptedError(err) + ) { SSRIsDynamic = true - return err.digest + const componentStack: string | undefined = (errorInfo as any) + .componentStack + if (typeof componentStack === 'string') { + trackAllowedDynamicAccess( + workStore.route, + err, + componentStack, + dynamicTracking + ) + } + return } return htmlRendererErrorHandler(err, errorInfo) @@ -2362,6 +2401,8 @@ async function prerenderToStream( } } + throwIfDisallowedDynamic(workStore, dynamicTracking) + if (SSRIsDynamic) { // Something dynamic happened in the SSR phase of the render. This could be IO or it could be // a dynamic API like accessing searchParams in a client Page @@ -2431,7 +2472,7 @@ async function prerenderToStream( } } else if (renderOpts.experimental.isRoutePPREnabled) { // We're statically generating with PPR and need to do dynamic tracking - dynamicTracking = createDynamicTrackingState( + let dynamicTracking = createDynamicTrackingState( renderOpts.isDebugDynamicAccesses ) const reactServerPrerenderStore: PrerenderStore = { @@ -2835,7 +2876,7 @@ async function prerenderToStream( serverInsertedHTMLToHead: true, validateRootLayout, }), - dynamicTracking, + dynamicTracking: null, } } catch (finalErr: any) { if (process.env.NODE_ENV === 'development' && isNotFoundError(finalErr)) { @@ -2902,3 +2943,7 @@ export async function warmFlightResponse( chunkListeners.push(r) }) } + +function isAbortReason(err: unknown, abortReason: Error): err is Error { + return err === abortReason +} diff --git a/packages/next/src/server/app-render/create-component-tree.tsx b/packages/next/src/server/app-render/create-component-tree.tsx index 93e1f49d07850..545e421f249f0 100644 --- a/packages/next/src/server/app-render/create-component-tree.tsx +++ b/packages/next/src/server/app-render/create-component-tree.tsx @@ -92,6 +92,7 @@ async function createComponentTreeInternal({ NotFoundBoundary, LayoutRouter, RenderFromTemplateContext, + OutletBoundary, ClientPageRoot, ClientSegmentRoot, createServerSearchParamsForServerPage, @@ -460,15 +461,10 @@ async function createComponentTreeInternal({ if (!MaybeComponent) { return [ actualSegment, - + {layerAssets} {parallelRouteProps.children} - , + , parallelRouteCacheNodeSeedData, loadingData, ] @@ -494,18 +490,13 @@ async function createComponentTreeInternal({ ) { return [ actualSegment, - + {layerAssets} - , + , parallelRouteCacheNodeSeedData, loadingData, ] @@ -570,15 +561,11 @@ async function createComponentTreeInternal({ return [ actualSegment, - - - {pageElement} - {layerAssets} - + {pageElement} + {layerAssets} + + + , parallelRouteCacheNodeSeedData, loadingData, @@ -644,11 +631,7 @@ async function createComponentTreeInternal({ ) segmentNode = ( - + <> @@ -660,33 +643,24 @@ async function createComponentTreeInternal({ {layerAssets} {clientSegment} - + ) } else { segmentNode = ( - + <> {layerAssets} {clientSegment} - + ) } } else { segmentNode = ( - + {layerAssets} {clientSegment} - + ) } } else { @@ -706,11 +680,7 @@ async function createComponentTreeInternal({ // We should instead look into handling the fallback behavior differently in development mode so that it doesn't // rely on the `NotFound` behavior. segmentNode = ( - + <> - + ) } else { segmentNode = ( - + {layerAssets} {serverSegment} - + ) } } @@ -767,28 +732,3 @@ async function MetadataOutlet({ } return null } - -async function Segment({ - isDynamicIO, - isStaticGeneration, - ready, - children, -}: { - isDynamicIO: boolean - isStaticGeneration: boolean - ready?: () => Promise - children: React.ReactNode -}) { - if (isDynamicIO && isStaticGeneration && ready) { - // During static generation we wait for metadata to complete before rendering segments. - // This is slower but it allows us to ensure that metadata is finished before we start - // rendering the segment which can synchronously abort the render in certain circumstances - try { - await ready() - } catch { - // we'll let the MetadataOutlet component render with the page error to let the right - // error boundary catch this error - } - } - return children -} diff --git a/packages/next/src/server/app-render/dynamic-rendering.ts b/packages/next/src/server/app-render/dynamic-rendering.ts index 286751f8a16fa..9e5cf7d2647f7 100644 --- a/packages/next/src/server/app-render/dynamic-rendering.ts +++ b/packages/next/src/server/app-render/dynamic-rendering.ts @@ -36,6 +36,11 @@ import { import { cacheAsyncStorage } from './cache-async-storage.external' import { workAsyncStorage } from '../../client/components/work-async-storage.external' import { makeHangingPromise } from '../dynamic-rendering-utils' +import { + METADATA_BOUNDARY_NAME, + VIEWPORT_BOUNDARY_NAME, + OUTLET_BOUNDARY_NAME, +} from '../../lib/metadata/metadata-constants' const hasPostpone = typeof React.unstable_postpone === 'function' @@ -64,6 +69,20 @@ export type DynamicTrackingState = { * The dynamic accesses that occurred during the render. */ readonly dynamicAccesses: Array + + /** + * disallowedDynamic tracks information about what dynamic accesses + * were not properly scoped. These are prerender failures both at build + * and revalidate time. + */ + readonly disallowedDynamic: { + hasSuspendedDynamic: boolean + hasDynamicMetadata: boolean + hasDynamicViewport: boolean + syncDynamicExpression: string + syncDynamicErrors: Array + dynamicErrors: Array + } } export function createDynamicTrackingState( @@ -72,6 +91,14 @@ export function createDynamicTrackingState( return { isDebugDynamicAccesses, dynamicAccesses: [], + disallowedDynamic: { + hasSuspendedDynamic: false, + hasDynamicMetadata: false, + hasDynamicViewport: false, + syncDynamicExpression: '', + syncDynamicErrors: [], + dynamicErrors: [], + }, } } @@ -115,18 +142,16 @@ export function markCurrentScopeAsDynamic( const prerenderStore = prerenderAsyncStorage.getStore() if (prerenderStore && prerenderStore.type === 'prerender') { - if (prerenderStore.controller) { + if (isDynamicIOPrerender(prerenderStore)) { // We're prerendering the RSC stream with dynamicIO enabled and we need to abort the // current render because something dynamic is being used. // This won't throw so we still need to fall through to determine if/how we handle // this specific dynamic request. - abortRender(prerenderStore.controller, store.route, expression) - errorWithTracking(prerenderStore.dynamicTracking, store.route, expression) - } else if (prerenderStore.cacheSignal) { - // we're prerendering with dynamicIO but we don't want to eagerly abort this - // prospective render. We error here to avoid returning anything from whatever - // is trying to access dynamic data. - errorWithTracking(prerenderStore.dynamicTracking, store.route, expression) + abortAndThrowOnSynchronousDynamicDataAccess( + store.route, + expression, + prerenderStore + ) } else { postponeWithTracking( store.route, @@ -201,18 +226,16 @@ export function trackDynamicDataAccessed( const prerenderStore = prerenderAsyncStorage.getStore() if (prerenderStore && prerenderStore.type === 'prerender') { - if (prerenderStore.controller) { + if (isDynamicIOPrerender(prerenderStore)) { // We're prerendering the RSC stream with dynamicIO enabled and we need to abort the // current render because something dynamic is being used. // This won't throw so we still need to fall through to determine if/how we handle // this specific dynamic request. - abortRender(prerenderStore.controller, store.route, expression) - errorWithTracking(prerenderStore.dynamicTracking, store.route, expression) - } else if (prerenderStore.cacheSignal) { - // we're prerendering with dynamicIO but we don't want to eagerly abort this - // prospective render. We error here to avoid returning anything from whatever - // is trying to access dynamic data. - errorWithTracking(prerenderStore.dynamicTracking, store.route, expression) + abortAndThrowOnSynchronousDynamicDataAccess( + store.route, + expression, + prerenderStore + ) } else { postponeWithTracking( store.route, @@ -336,6 +359,12 @@ export function abortAndThrowOnSynchronousDynamicDataAccess( expression: string, prerenderStore: PrerenderStoreModern ): never { + if (prerenderStore.dynamicTracking) { + const disallowedDynamic = prerenderStore.dynamicTracking.disallowedDynamic + if (disallowedDynamic.syncDynamicExpression === '') { + disallowedDynamic.syncDynamicExpression = expression + } + } abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) throw createPrerenderInterruptedError( `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.` @@ -358,29 +387,6 @@ export function Postpone({ reason, route }: PostponeProps): never { postponeWithTracking(route, reason, dynamicTracking) } -function errorWithTracking( - dynamicTracking: null | DynamicTrackingState, - route: string, - expression: string -): never { - if (dynamicTracking) { - dynamicTracking.dynamicAccesses.push({ - // When we aren't debugging, we don't need to create another error for the - // stack trace. - stack: dynamicTracking.isDebugDynamicAccesses - ? new Error().stack - : undefined, - expression, - }) - } - const reason = - `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + - `React throws this special object to indicate where. It should not be caught by ` + - `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error` - - throw createPrerenderInterruptedError(reason) -} - export function postponeWithTracking( route: string, expression: string, @@ -455,25 +461,13 @@ export function isPrerenderInterruptedError( return ( typeof error === 'object' && error !== null && - (error as any).digest === NEXT_PRERENDER_INTERRUPTED + (error as any).digest === NEXT_PRERENDER_INTERRUPTED && + 'name' in error && + 'message' in error && + error instanceof Error ) } -function abortRender( - controller: AbortController, - route: string, - expression: string -): void { - // TODO improve the error message to communicate what it means to have a complete - // prerender that was interrupted - const reason = - `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + - `React throws this special object to indicate where. It should not be caught by ` + - `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error` - - controller.abort(createPrerenderInterruptedError(reason)) -} - export function isRenderInterruptedReason(reason: string) { return reason === NEXT_PRERENDER_INTERRUPTED } @@ -597,3 +591,115 @@ export function useDynamicRouteParams(expression: string) { } } } + +const hasSuspenseRegex = /\n\s+at Suspense \(\)/ +const hasMetadataRegex = new RegExp( + `\\n\\s+at ${METADATA_BOUNDARY_NAME}[\\n\\s]` +) +const hasViewportRegex = new RegExp( + `\\n\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\n\\s]` +) +const hasOutletRegex = new RegExp(`\\n\\s+at ${OUTLET_BOUNDARY_NAME}[\\n\\s]`) + +export function trackAllowedDynamicAccess( + route: string, + thrownValue: Error, + componentStack: string, + dynamicTracking: DynamicTrackingState +) { + const disallowedDynamic = dynamicTracking.disallowedDynamic + if (hasSuspenseRegex.test(componentStack)) { + disallowedDynamic.hasSuspendedDynamic = true + return + } else if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return + } else if (hasMetadataRegex.test(componentStack)) { + // + disallowedDynamic.hasDynamicMetadata = true + return + } else if (hasViewportRegex.test(componentStack)) { + disallowedDynamic.hasDynamicViewport = true + return + } else if (isPrerenderInterruptedError(thrownValue)) { + const syncDynamicExpression = disallowedDynamic.syncDynamicExpression + let message: string + if (syncDynamicExpression) { + message = `Route ${route} used a synchronous Dynamic API: ${syncDynamicExpression}, which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.` + } else { + message = `Route ${route} used a synchronous Dynamic API which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.` + } + const error = createErrorWithComponentStack(message, componentStack) + disallowedDynamic.syncDynamicErrors.push(error) + return + } else if (disallowedDynamic.syncDynamicExpression) { + const message = `Route ${route} used a synchronous Dynamic API: ${disallowedDynamic.syncDynamicExpression}. This particular component may have been dynamic anyway or it may have just not finished before the synchronous Dynamic API was invoked.` + const error = createErrorWithComponentStack(message, componentStack) + disallowedDynamic.syncDynamicErrors.push(error) + return + } else { + // The thrownValue must have been the RENDER_COMPLETE abortReason because the only kinds of errors tracked here are + // interrupts or render completes + const message = `Route ${route} performed an IO operation that was not cached and no Suspense boundary was found to define a fallback UI.` + const error = createErrorWithComponentStack(message, componentStack) + disallowedDynamic.dynamicErrors.push(error) + return + } +} + +function createErrorWithComponentStack( + message: string, + componentStack: string +) { + const error = new Error(message) + error.stack = 'Error: ' + message + componentStack + return error +} + +export function throwIfDisallowedDynamic( + workStore: WorkStore, + dynamicTracking: DynamicTrackingState +): void { + const disallowedDynamic = dynamicTracking.disallowedDynamic + const syncDynamicErrors = disallowedDynamic.syncDynamicErrors + if (syncDynamicErrors.length) { + for (let i = 0; i < syncDynamicErrors.length; i++) { + console.error(syncDynamicErrors[i]) + } + throw new StaticGenBailoutError( + `Route ${workStore.route} used a synchronous Dynamic API while prerendering which caused some part of the page to be dynamic without a Suspense boundary above it defining a fallback UI. It is best to avoid synchronous Dynamic API access during prerendering.` + ) + } + + const dynamicErrors = disallowedDynamic.dynamicErrors + if (dynamicErrors.length) { + for (let i = 0; i < dynamicErrors.length; i++) { + console.error(dynamicErrors[i]) + } + throw new StaticGenBailoutError( + `Route ${workStore.route} has one or more dynamic components without a defined fallback UI. Render dynamic components inside a Suspense boundary to indicate what the appropriate fallback UI should be.` + ) + } + + if (!disallowedDynamic.hasSuspendedDynamic) { + if (disallowedDynamic.hasDynamicMetadata) { + if (disallowedDynamic.syncDynamicExpression) { + throw new StaticGenBailoutError( + `Route ${workStore.route} used ${disallowedDynamic.syncDynamicExpression} before Next.js could finish rendering metadata.` + ) + } + throw new StaticGenBailoutError( + `Route ${workStore.route} has a dynamic \`generateMetadata\` but nothing else is dynamic. Try updating your \`generateMetadata\` to use cached data or ensure your route has at least one dynamic component in the a Page or Layout.` + ) + } else if (disallowedDynamic.hasDynamicViewport) { + if (disallowedDynamic.syncDynamicExpression) { + throw new StaticGenBailoutError( + `Route ${workStore.route} used ${disallowedDynamic.syncDynamicExpression} before Next.js could finish rendering viewport.` + ) + } + throw new StaticGenBailoutError( + `Route ${workStore.route} has a dynamic \`generateViewport\` but nothing else is dynamic. Try updating your \`generateViewport\` to use cached data or ensure your route has at least one dynamic component in the a Page or Layout.` + ) + } + } +} diff --git a/packages/next/src/server/app-render/entry-base.ts b/packages/next/src/server/app-render/entry-base.ts index 323101d02822b..a048a9b03f9d9 100644 --- a/packages/next/src/server/app-render/entry-base.ts +++ b/packages/next/src/server/app-render/entry-base.ts @@ -33,6 +33,11 @@ import { createMetadataComponents } from '../../lib/metadata/metadata' import { patchFetch as _patchFetch } from '../lib/patch-fetch' // not being used but needs to be included in the client manifest for /_not-found import '../../client/components/error-boundary' +import { + MetadataBoundary, + ViewportBoundary, + OutletBoundary, +} from '../../lib/metadata/metadata-boundary' import { preloadStyle, preloadFont, preconnect } from './rsc/preloads' import { Postpone } from './rsc/postpone' @@ -65,6 +70,9 @@ export { preloadFont, preconnect, Postpone, + MetadataBoundary, + ViewportBoundary, + OutletBoundary, taintObjectReference, ClientPageRoot, ClientSegmentRoot, diff --git a/test/development/acceptance-app/hydration-error.test.ts b/test/development/acceptance-app/hydration-error.test.ts index 62cba0745e591..1a82c5aa0a5e5 100644 --- a/test/development/acceptance-app/hydration-error.test.ts +++ b/test/development/acceptance-app/hydration-error.test.ts @@ -168,6 +168,7 @@ describe('Error overlay for hydration errors in App router', () => { expect(pseudoHtml).toMatchInlineSnapshot(` "...
+ ... +
" `) } @@ -374,6 +375,7 @@ describe('Error overlay for hydration errors in App router', () => { } else { expect(pseudoHtml).toEqual(outdent` ... + ... + - test }`) @@ -871,10 +873,10 @@ describe('Error overlay for hydration errors in App router', () => { if (isTurbopack) { expect(fullPseudoHtml).toMatchInlineSnapshot(` "... - - - - + + + +
@@ -891,10 +893,10 @@ describe('Error overlay for hydration errors in App router', () => { } else { expect(fullPseudoHtml).toMatchInlineSnapshot(` "... - - - - + + + +
diff --git a/test/e2e/app-dir/dynamic-data/dynamic-data.test.ts b/test/e2e/app-dir/dynamic-data/dynamic-data.test.ts index 8ba6ec4a9a7f2..ad216acfd848e 100644 --- a/test/e2e/app-dir/dynamic-data/dynamic-data.test.ts +++ b/test/e2e/app-dir/dynamic-data/dynamic-data.test.ts @@ -101,8 +101,6 @@ describe('dynamic-data', () => { // in dev we expect the entire page to be rendered at runtime expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') - // we expect there to be no suspense boundary in fallback state - expect($('#boundary').html()).toBeNull() } else if (process.env.__NEXT_EXPERIMENTAL_PPR) { // in PPR we expect the shell to be rendered at build and the page to be rendered at runtime expect($('#layout').text()).toBe('at buildtime') diff --git a/test/e2e/app-dir/dynamic-data/fixtures/require-static/app/connection/page.js b/test/e2e/app-dir/dynamic-data/fixtures/require-static/app/connection/page.js index c45ca779f1200..79beaf4c4059b 100644 --- a/test/e2e/app-dir/dynamic-data/fixtures/require-static/app/connection/page.js +++ b/test/e2e/app-dir/dynamic-data/fixtures/require-static/app/connection/page.js @@ -1,6 +1,4 @@ -import Server, { connection } from 'next/server' - -console.log('Server', Server) +import { connection } from 'next/server' export const dynamic = 'error' diff --git a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.ts b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.ts new file mode 100644 index 0000000000000..a4adf480e884e --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.ts @@ -0,0 +1,340 @@ +import { nextTestSetup } from 'e2e-utils' + +const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR + +const stackStart = /\s+at / + +function createExpectError(cliOutput: string) { + let cliIndex = 0 + return function expectError( + containing: string, + withStackContaining?: string + ) { + const initialCliIndex = cliIndex + let lines = cliOutput.slice(cliIndex).split('\n') + + let i = 0 + while (i < lines.length) { + let line = lines[i++] + '\n' + cliIndex += line.length + if (line.includes(containing)) { + if (typeof withStackContaining !== 'string') { + return + } else { + while (i < lines.length) { + let stackLine = lines[i++] + '\n' + if (!stackStart.test(stackLine)) { + expect(stackLine).toContain(withStackContaining) + } + if (stackLine.includes(withStackContaining)) { + return + } + } + } + } + } + + expect(cliOutput.slice(initialCliIndex)).toContain(containing) + } +} + +function runTests(options: { withMinification: boolean }) { + const isTurbopack = !!process.env.TURBOPACK + const { withMinification } = options + describe(`Dynamic IO Errors - ${withMinification ? 'With Minification' : 'Without Minification'}`, () => { + describe('Sync Dynamic - With Fallback - client searchParams', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-client-search-with-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should not error the build when synchronously reading search params in a client component if all dynamic access is inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + if (WITH_PPR) { + expect(next.cliOutput).toContain('◐ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + } else { + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + } + }) + }) + + describe('Sync Dynamic - Without Fallback - client searchParams', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-client-search-without-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if dynamic IO happens in the root (outside a Suspense)', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + expectError( + 'Error: Route / used a synchronous Dynamic API: `searchParams.foo`, which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / used a synchronous Dynamic API while prerendering which caused some part of the page to be dynamic without a Suspense boundary above it defining a fallback UI.' + ) + expectError('exiting the build.') + }) + }) + + describe('Sync Dynamic - With Fallback - server searchParams', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-server-search-with-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should not error the build when synchronously reading search params in a client component if all dynamic access is inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + if (WITH_PPR) { + expect(next.cliOutput).toContain('◐ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + } else { + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(0) + } + }) + }) + + describe('Sync Dynamic - Without Fallback - server searchParams', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-server-search-without-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if dynamic IO happens in the root (outside a Suspense)', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + if (WITH_PPR) { + expectError( + 'Error: Route / used a synchronous Dynamic API: `searchParams.foo`. This particular component may have been dynamic anyway or it may have just not finished before the synchronous Dynamic API was invoked.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + } else { + expectError( + 'Error: Route / used a synchronous Dynamic API: `searchParams.foo`, which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + } + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / used a synchronous Dynamic API while prerendering which caused some part of the page to be dynamic without a Suspense boundary above it defining a fallback UI.' + ) + expectError('exiting the build.') + }) + }) + + describe('Sync Dynamic - With Fallback - cookies', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-cookies-with-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should not error the build when synchronously reading search params in a client component if all dynamic access is inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + if (WITH_PPR) { + expect(next.cliOutput).toContain('◐ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + } else { + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(0) + } + }) + }) + + describe('Sync Dynamic - Without Fallback - cookies', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/sync-cookies-without-fallback', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if dynamic IO happens in the root (outside a Suspense)', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + if (WITH_PPR) { + expectError( + "Error: Route / used a synchronous Dynamic API: cookies().get('token'). This particular component may have been dynamic anyway or it may have just not finished before the synchronous Dynamic API was invoked.", + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + } else { + expectError( + "Error: Route / used a synchronous Dynamic API: cookies().get('token'), which caused this component to not finish rendering before the prerender completed and no fallback UI was defined.", + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + } + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / used a synchronous Dynamic API while prerendering which caused some part of the page to be dynamic without a Suspense boundary above it defining a fallback UI.' + ) + expectError('exiting the build.') + }) + }) + }) +} + +runTests({ withMinification: true }) +runTests({ withMinification: false }) diff --git a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts new file mode 100644 index 0000000000000..83f4ae3d95678 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts @@ -0,0 +1,361 @@ +import { nextTestSetup } from 'e2e-utils' + +const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR + +const stackStart = /\s+at / + +function createExpectError(cliOutput: string) { + let cliIndex = 0 + return function expectError( + containing: string, + withStackContaining?: string + ): Array { + const initialCliIndex = cliIndex + let lines = cliOutput.slice(cliIndex).split('\n') + + let i = 0 + while (i < lines.length) { + let line = lines[i++] + '\n' + cliIndex += line.length + if (line.includes(containing)) { + if (typeof withStackContaining !== 'string') { + return + } else { + while (i < lines.length) { + let stackLine = lines[i++] + '\n' + if (!stackStart.test(stackLine)) { + expect(stackLine).toContain(withStackContaining) + } + if (stackLine.includes(withStackContaining)) { + return + } + } + } + } + } + + expect(cliOutput.slice(initialCliIndex)).toContain(containing) + } +} + +function runTests(options: { withMinification: boolean }) { + const isTurbopack = !!process.env.TURBOPACK + const { withMinification } = options + describe(`Dynamic IO Errors - ${withMinification ? 'With Minification' : 'Without Minification'}`, () => { + describe('Dynamic Metadata - Static Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-metadata-static-route', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if generateMetadata is dynamic', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / has a dynamic `generateMetadata` but nothing else is dynamic.' + ) + }) + }) + + describe('Dynamic Metadata - Dynamic Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-metadata-dynamic-route', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should partially prerender when all dynamic components are inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('#dynamic').text()).toBe('Dynamic') + expect($('[data-fallback]').length).toBe(0) + }) + }) + + describe('Dynamic Viewport - Static Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-viewport-static-route', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if generateViewport is dynamic', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / has a dynamic `generateViewport` but nothing else is dynamic.' + ) + }) + }) + + describe('Dynamic Viewport - Dynamic Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-viewport-dynamic-route', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should partially prerender when all dynamic components are inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error('expected build not to fail for fully static project') + } + + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('#dynamic').text()).toBe('Dynamic') + expect($('[data-fallback]').length).toBe(0) + }) + }) + + describe('Static Route', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/static', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should not error the build when all routes are static', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + throw new Error('expected build not to fail for fully static project') + } + }) + }) + + describe('Dynamic Root', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-root', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + it('should error the build if dynamic IO happens in the root (outside a Suspense)', async () => { + try { + await next.start() + } catch { + // we expect the build to fail + } + const expectError = createExpectError(next.cliOutput) + + expectError( + 'Error: Route / performed an IO operation that was not cached and no Suspense boundary was found to define a fallback UI.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionTwo' + ) + if (WITH_PPR) { + // React currently fatals the render in canary because we don't have access to the prerender API there. with a fatal only + // one task actually reports and error at the moment. We should fix upstream but for now we exclude the second error when PPR is off + // because we are using canary React and renderToReadableStream rather than experimental React and prerender + expectError( + 'Error: Route / performed an IO operation that was not cached and no Suspense boundary was found to define a fallback UI.', + // Turbopack doesn't support disabling minification yet + withMinification || isTurbopack ? undefined : 'IndirectionThree' + ) + } + expectError('Error occurred prerendering page "/"') + expectError( + 'Error: Route / has one or more dynamic components without a defined fallback UI.' + ) + expectError('exiting the build.') + }) + }) + + describe('Dynamic Boundary', () => { + const { next, isNextDev, skipped } = nextTestSetup({ + files: __dirname + '/fixtures/dynamic-boundary', + skipStart: true, + }) + + if (skipped) { + return + } + + if (isNextDev) { + it('does not run in dev', () => {}) + return + } + + beforeEach(async () => { + if (!withMinification) { + await next.patchFile('next.config.js', (content) => + content.replace( + 'serverMinification: true,', + 'serverMinification: false,' + ) + ) + } + }) + + if (WITH_PPR) { + it('should partially prerender when all dynamic components are inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error( + 'expected build not to fail for fully static project' + ) + // we expect the build to fail + } + + expect(next.cliOutput).toContain('◐ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + }) + } else { + it('should not error the build when all dynamic components are inside a Suspense boundary', async () => { + try { + await next.start() + } catch { + throw new Error( + 'expected build not to fail for fully static project' + ) + } + + expect(next.cliOutput).toContain('ƒ / ') + const $ = await next.render$('/') + expect($('[data-fallback]').length).toBe(2) + }) + } + }) + }) +} + +runTests({ withMinification: true }) +runTests({ withMinification: false }) diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/page.tsx new file mode 100644 index 0000000000000..9b9db2186b117 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/app/page.tsx @@ -0,0 +1,64 @@ +import { Suspense } from 'react' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +export default async function Page() { + return ( + <> +

+ This page calls fetch three times. One is cached and outside of a + Suspense boundary. The other two are uncached but inside Suspense + boundaries. We expect this page to be dynamic but not produce a build + error. If PPR is enabled we expect this page to be partially static. + uncached. +

+ + + + + }> + + + + + }> + + + + + ) +} + +async function FetchingComponent({ + nonce, + cached, +}: { + nonce: string + cached?: boolean +}) { + return ( +
+ message:{' '} + {cached ? await fetchRandomCached(nonce) : await fetchRandom(nonce)} +
+ ) +} + +const fetchRandomCached = async (entropy: string) => { + const response = await fetch( + 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy, + { cache: 'force-cache' } + ) + return response.text() +} + +const fetchRandom = async (entropy: string) => { + const response = await fetch( + 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy + ) + return response.text() +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/page.tsx new file mode 100644 index 0000000000000..63ac6c94ead04 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/app/page.tsx @@ -0,0 +1,31 @@ +import { Suspense } from 'react' + +export async function generateMetadata() { + await new Promise((r) => setTimeout(r, 0)) + return { title: 'Dynamic Metadata' } +} + +export default async function Page() { + return ( + <> +

+ This page is static except for generateMetadata which does some IO. This + is a build error because metadata is not wrapped in a Suspense boundary. + We expect that if you intended for your metadata to be dynamic you will + ensure your page is dynamic too +

+ }> + + + + ) +} + +function Fallback() { + return
loading...
+} + +async function Dynamic() { + await new Promise((r) => setTimeout(r)) + return

Dynamic

+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/page.tsx new file mode 100644 index 0000000000000..7683f646fc518 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/app/page.tsx @@ -0,0 +1,17 @@ +export async function generateMetadata() { + await new Promise((r) => setTimeout(r, 0)) + return { title: 'Dynamic Metadata' } +} + +export default async function Page() { + return ( + <> +

+ This page is static except for generateMetadata which does some IO. This + is a build error because metadata is not wrapped in a Suspense boundary. + We expect that if you intended for your metadata to be dynamic you will + ensure your page is dynamic too +

+ + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/page.tsx new file mode 100644 index 0000000000000..dbfa973f4cfed --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/app/page.tsx @@ -0,0 +1,65 @@ +import { Suspense } from 'react' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +export default async function Page() { + return ( + <> +

+ This page calls fetches eight times. Four are cached and Four are not. + In each set of Four, two are wrapped in Suspense. This leaves two + fetches that are uncached and not wrapped in Suspense which is + considered an error when dynamicIO is enabled. We expect the build to + fail with two component stacks that point to the offending IO +

+ + + + + + + + + + + + + + + + + + + + ) +} + +async function FetchingComponent({ + nonce, + cached, +}: { + nonce: string + cached?: boolean +}) { + return ( +
+ message 1:{' '} + {cached ? await fetchRandomCached(nonce) : await fetchRandom(nonce)} +
+ ) +} + +const fetchRandomCached = async (entropy: string) => { + const response = await fetch( + 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy, + { cache: 'force-cache' } + ) + return response.text() +} + +const fetchRandom = async (entropy: string) => { + const response = await fetch( + 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy + ) + return response.text() +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js new file mode 100644 index 0000000000000..f91d543c0e266 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: false, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/page.tsx new file mode 100644 index 0000000000000..a621880d2bc24 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/app/page.tsx @@ -0,0 +1,31 @@ +import { Suspense } from 'react' + +export async function generateViewport() { + await new Promise((r) => setTimeout(r, 0)) + return { themeColor: 'black' } +} + +export default async function Page() { + return ( + <> +

+ This page is static except for generateViewport which does some IO. This + is a build error because metadata is not wrapped in a Suspense boundary. + We expect that if you intended for your metadata to be dynamic you will + ensure your page is dynamic too +

+ }> + + + + ) +} + +function Fallback() { + return
loading...
+} + +async function Dynamic() { + await new Promise((r) => setTimeout(r)) + return

Dynamic

+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/page.tsx new file mode 100644 index 0000000000000..8f6065b55d3c3 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/app/page.tsx @@ -0,0 +1,17 @@ +export async function generateViewport() { + await new Promise((r) => setTimeout(r, 0)) + return { themeColor: 'black' } +} + +export default async function Page() { + return ( + <> +

+ This page is static except for generateViewport which does some IO. This + is a build error because metadata is not wrapped in a Suspense boundary. + We expect that if you intended for your metadata to be dynamic you will + ensure your page is dynamic too +

+ + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/page.tsx new file mode 100644 index 0000000000000..54f32172cf7d7 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/app/page.tsx @@ -0,0 +1,3 @@ +export default async function Page() { + return
hello world
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/page.tsx new file mode 100644 index 0000000000000..377ea07feadcf --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/app/page.tsx @@ -0,0 +1,84 @@ +'use client' + +import { Suspense, use } from 'react' +import { type UnsafeUnwrappedSearchParams } from 'next/server' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +type SearchParams = { foo: string | string[] | undefined } +export default async function Page(props: { + searchParams: Promise +}) { + return ( + <> +

+ This page accesses searchParams synchronously but it does so late enough + in the render that all unfinished sub-trees have a defined Suspense + boundary. This is fine and doesn't need to error the build. +

+ }> + + + + + }> + + + + + + + + + ) +} + +function SearchParamsReadingComponent({ + searchParams, +}: { + searchParams: Promise +}) { + if (typeof window === 'undefined') { + use(new Promise((r) => process.nextTick(r))) + } + const fooParams = ( + searchParams as unknown as UnsafeUnwrappedSearchParams + ).foo + return ( +
+ this component read the accessed the `foo` search param: {fooParams} +
+ ) +} + +function LongRunningComponent() { + if (typeof window === 'undefined') { + use( + new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + ) + } + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync searchParams access happens. +
+ ) +} + +function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync searchParams access happens. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/page.tsx new file mode 100644 index 0000000000000..7bbced3751bee --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/app/page.tsx @@ -0,0 +1,82 @@ +'use client' + +import { Suspense, use } from 'react' +import { type UnsafeUnwrappedSearchParams } from 'next/server' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +type SearchParams = { foo: string | string[] | undefined } +export default async function Page(props: { + searchParams: Promise +}) { + return ( + <> +

+ This page accesses searchParams synchronously but it does so late enough + in the render that all unfinished sub-trees have a defined Suspense + boundary. This is fine and doesn't need to error the build. +

+ }> + + + + + + + + + + + + ) +} + +function SearchParamsReadingComponent({ + searchParams, +}: { + searchParams: Promise +}) { + if (typeof window === 'undefined') { + use(new Promise((r) => process.nextTick(r))) + } + const fooParams = ( + searchParams as unknown as UnsafeUnwrappedSearchParams + ).foo + return ( +
+ this component read the accessed the `foo` search param: {fooParams} +
+ ) +} + +function LongRunningComponent() { + if (typeof window === 'undefined') { + use( + new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + ) + } + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync searchParams access happens. +
+ ) +} + +function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync searchParams access happens. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/page.tsx new file mode 100644 index 0000000000000..4abb91d8ecce7 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/app/page.tsx @@ -0,0 +1,64 @@ +import { Suspense } from 'react' +import { cookies, type UnsafeUnwrappedCookies } from 'next/headers' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +export default async function Page() { + return ( + <> +

+ This page access cookies synchronously and it triggers dynamic before + another component is finished which doesn't define a fallback UI with + Suspense. This is considered a build error and the message should + clearly indicate that it was caused by a synchronous dynamic API usage. +

+ }> + + + + + }> + + + + + + + + + ) +} + +async function CookiesReadingComponent() { + await new Promise((r) => process.nextTick(r)) + const _token = (cookies() as unknown as UnsafeUnwrappedCookies).get('token') + return
this component read the `token` cookie synchronously
+} + +async function LongRunningComponent() { + await new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync cookies call happens. +
+ ) +} + +async function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync cookies call is triggered. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/page.tsx new file mode 100644 index 0000000000000..390e62e8f89e0 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/app/page.tsx @@ -0,0 +1,62 @@ +import { Suspense } from 'react' +import { cookies, type UnsafeUnwrappedCookies } from 'next/headers' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +export default async function Page() { + return ( + <> +

+ This page access cookies synchronously and it triggers dynamic before + another component is finished which doesn't define a fallback UI with + Suspense. This is considered a build error and the message should + clearly indicate that it was caused by a synchronous dynamic API usage. +

+ }> + + + + + + + + + + + + ) +} + +async function CookiesReadingComponent() { + await new Promise((r) => process.nextTick(r)) + const _token = (cookies() as unknown as UnsafeUnwrappedCookies).get('token') + return
this component read the `token` cookie synchronously
+} + +async function LongRunningComponent() { + await new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync cookies call happens. +
+ ) +} + +async function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync cookies call is triggered. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/page.tsx new file mode 100644 index 0000000000000..703053937dbb0 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/app/page.tsx @@ -0,0 +1,76 @@ +import { Suspense } from 'react' +import { type UnsafeUnwrappedSearchParams } from 'next/server' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +type SearchParams = { foo: string | string[] | undefined } +export default async function Page(props: { + searchParams: Promise +}) { + return ( + <> +

+ This page accesses searchParams synchronously but it does so late enough + in the render that all unfinished sub-trees have a defined Suspense + boundary. This is fine and doesn't need to error the build. +

+ }> + + + + + }> + + + + + + + + + ) +} + +async function SearchParamsReadingComponent({ + searchParams, +}: { + searchParams: Promise +}) { + await new Promise((r) => process.nextTick(r)) + const fooParams = ( + searchParams as unknown as UnsafeUnwrappedSearchParams + ).foo + return ( +
+ this component read the accessed the `foo` search param: {fooParams} +
+ ) +} + +async function LongRunningComponent() { + await new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync searchParams access happens. +
+ ) +} + +async function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync searchParams access happens. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/indirection.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/indirection.tsx new file mode 100644 index 0000000000000..6afe901491d3a --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/indirection.tsx @@ -0,0 +1,13 @@ +'use client' + +export function IndirectionOne({ children }) { + return children +} + +export function IndirectionTwo({ children }) { + return children +} + +export function IndirectionThree({ children }) { + return children +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/layout.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/layout.tsx new file mode 100644 index 0000000000000..745e32b8a8d23 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/layout.tsx @@ -0,0 +1,9 @@ +export default function Root({ children }: { children: React.ReactNode }) { + return ( + + +
{children}
+ + + ) +} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/page.tsx b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/page.tsx new file mode 100644 index 0000000000000..47f77115ffdbb --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/app/page.tsx @@ -0,0 +1,74 @@ +import { Suspense } from 'react' +import { type UnsafeUnwrappedSearchParams } from 'next/server' + +import { IndirectionOne, IndirectionTwo, IndirectionThree } from './indirection' + +type SearchParams = { foo: string | string[] | undefined } +export default async function Page(props: { + searchParams: Promise +}) { + return ( + <> +

+ This page accesses searchParams synchronously but it does so late enough + in the render that all unfinished sub-trees have a defined Suspense + boundary. This is fine and doesn't need to error the build. +

+ }> + + + + + + + + + + + + ) +} + +async function SearchParamsReadingComponent({ + searchParams, +}: { + searchParams: Promise +}) { + await new Promise((r) => process.nextTick(r)) + const fooParams = ( + searchParams as unknown as UnsafeUnwrappedSearchParams + ).foo + return ( +
+ this component read the accessed the `foo` search param: {fooParams} +
+ ) +} + +async function LongRunningComponent() { + await new Promise((r) => + process.nextTick(async () => { + await 1 + process.nextTick(r) + }) + ) + return ( +
+ this component took a long time to resolve (but still before the dynamicIO + cutoff). It might not be done before the sync searchParams access happens. +
+ ) +} + +async function ShortRunningComponent() { + return ( +
+ This component runs quickly (in a microtask). It should be finished before + the sync searchParams access happens. +
+ ) +} + +function Fallback() { + return
loading...
+} diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js new file mode 100644 index 0000000000000..a3d79eebc79cd --- /dev/null +++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js @@ -0,0 +1,13 @@ +/** + * @type {import('next').NextConfig} + */ +const nextConfig = { + experimental: { + ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', + dynamicIO: true, + serverMinification: true, + }, +} + +module.exports = nextConfig diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_async/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_async/page.tsx deleted file mode 100644 index 6cda978c99068..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_async/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { cookies } from 'next/headers' - -export default async function Page() { - await 1 - return ( - <> -

- This page calls `cookies()` in a child component. Even though the page - doesn't do any IO it should still bail out of static generation. -

- - - - ) -} - -async function ComponentOne() { - try { - ;(await cookies()).get('test') - } catch (e) { - // swallow any throw. We should still not be static - } - return
This component read cookies
-} - -async function ComponentTwo() { - return
This component didn't read cookies
-} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_root/page.tsx deleted file mode 100644 index 180c9cbcefa9d..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_cookies_root/page.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { cookies } from 'next/headers' - -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - return ( - <> -

- This page calls `cookies()` in a child component without a parent - Suspense boundary -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentThatReadsCookies() { - let sentinelCookie - try { - const cookie = (await cookies()).get('x-sentinel') - if (cookie) { - sentinelCookie = cookie.value - } else { - sentinelCookie = '~not-found~' - } - } catch (e) { - sentinelCookie = '~thrown~' - // swallow any throw. We should still not be static - } - return ( -
- This component read cookies: "{sentinelCookie}" -
- ) -} -async function OtherComponent() { - return
This component didn't read cookies
-} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_root/page.tsx deleted file mode 100644 index 8842f34697f0c..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_headers_root/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { headers } from 'next/headers' - -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - return ( - <> -

- This page calls `headers()` in a child component without a parent - Suspense boundary -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentThatReadsHeaders() { - let sentinelHeader - try { - sentinelHeader = (await headers()).get('x-sentinel') - if (!sentinelHeader) { - sentinelHeader = '~not-found~' - } - } catch (e) { - sentinelHeader = '~thrown~' - // swallow any throw. We should still not be static - } - return ( -
- This component read headers: "{sentinelHeader}" -
- ) -} - -async function OtherComponent() { - return
This component didn't read headers
-} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store/page.tsx similarity index 88% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store/page.tsx index 844fc08d3fe6a..1fad25096426c 100644 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store/page.tsx @@ -5,6 +5,9 @@ import { unstable_noStore as noStore } from 'next/cache' import { getSentinelValue } from '../../getSentinelValue' export default async function Page() { + // We wait for metadata to finish before rendering this component which will trigger + // a synchronous abort + await new Promise((r) => process.nextTick(r)) return ( <>

diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_root/page.tsx deleted file mode 100644 index ca5bd49c4df78..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_no_store_root/page.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { unstable_noStore as noStore } from 'next/cache' - -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - return ( - <> -

- This page calls `unstable_noStore()` in a child component without a - parent Suspense boundary -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentThatCallsNoStore() { - try { - noStore() - } catch (e) { - // swallow any throw. We still want to ensure this is dynamic - } - return
This component called unstable_noStore()
-} - -async function OtherComponent() { - return
This component didn't call unstable_noStore()
-} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_root/page.tsx deleted file mode 100644 index eb0fe324b3acc..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_client_root/page.tsx +++ /dev/null @@ -1,55 +0,0 @@ -'use client' - -import { getSentinelValue } from '../../getSentinelValue' -import { use } from 'react' - -export default function Page({ searchParams }: { searchParams: Promise }) { - return ( - <> -

- This page reads `searchParams.foo` in a client component without a - parent Suspense boundary. -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -function ComponentOne({ searchParams }: { searchParams: Promise }) { - let sentinelSearch - const sp = use(searchParams) - try { - if (sp.sentinel) { - sentinelSearch = sp.sentinel - } else { - sentinelSearch = '~not-found~' - } - } catch (e) { - sentinelSearch = '~thrown~' - // swallow any throw. We should still not be static - } - return ( -
- This component accessed `searchParams.sentinel`: " - {sentinelSearch}" -
- ) -} - -function ComponentTwo() { - return ( - <> -
This component didn't access any searchParams properties
-
{getSentinelValue()}
- - ) -} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_root/page.tsx deleted file mode 100644 index 1a1ecc6ea4670..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/dynamic_api_search_params_server_root/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { getSentinelValue } from '../../getSentinelValue' - -export default function Page({ searchParams }: { searchParams: Promise }) { - return ( - <> -

- This page reads `searchParams.foo` in a client component without a - parent Suspense boundary. -

-

- With PPR this page has an empty shell because the dynamic API usage is - not inside a Suspense boundary. -

-

- Without PPR this page is fully dynamic because a dynamic API was used. -

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentOne({ searchParams }: { searchParams: Promise }) { - let sentinelSearch - const sp = await searchParams - try { - if (sp.sentinel) { - sentinelSearch = sp.sentinel - } else { - sentinelSearch = '~not-found~' - } - } catch (e) { - sentinelSearch = '~thrown~' - // swallow any throw. We should still not be static - } - return ( -
- This component accessed `searchParams.sentinel`: " - {sentinelSearch}" -
- ) -} - -function ComponentTwo() { - return ( - <> -
This component didn't access any searchParams properties
-
{getSentinelValue()}
- - ) -} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_root/page.tsx deleted file mode 100644 index 83c68a30e4215..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/fetch_mixed_root/page.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - await 1 - return ( - <> -

- This page fetches using cache inside one component and without cache - inside another component. -

-

Niether component is wrapped in a Suspense boundary.

-

- With PPR this page should have an empty shell because the uncached fetch - does not have a parent Suspense boundary. -

-

Without PPR this page should be dynamic.

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentOne() { - return
message 1: {await fetchRandomCached('a')}
-} - -async function ComponentTwo() { - return ( - <> -
message 2: {await fetchRandom('b')}
-
message 2: {await fetchRandomCached('c')}
- - ) -} - -const fetchRandomCached = async (entropy: string) => { - const response = await fetch( - 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy, - { cache: 'force-cache' } - ) - return response.text() -} - -const fetchRandom = async (entropy: string) => { - const response = await fetch( - 'https://next-data-api-endpoint.vercel.app/api/random?b=' + entropy - ) - return response.text() -} diff --git a/test/e2e/app-dir/dynamic-io/app/cases/io_mixed_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/io_mixed/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/io_mixed_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/io_mixed/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/io_mixed_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/io_mixed_root/page.tsx deleted file mode 100644 index 56b235096aef6..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/io_mixed_root/page.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { unstable_cache as cache } from 'next/cache' - -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - await 1 - return ( - <> -

- This page renders two components. The first calls a simulated IO - function wrapped in `unstable_cache`. The second calls the simulated IO - function without being wrapped in `unstable_cache`. -

-

Niether component is wrapped in a Suspense boundary

-

- With PPR this page should have an empty shell because the uncached IO - function does not have a parent Suspense boundary. -

-

Without PPR this page should be dynamic.

- - -
{getSentinelValue()}
- - ) -} - -async function ComponentOne() { - return
message 1: {await getCachedMessage('hello cached fast', 2)}
-} - -async function ComponentTwo() { - return ( - <> -
message 2: {await getMessage('hello uncached fast', 0)}
-
message 3: {await getCachedMessage('hello cached slow', 20)}
- - ) -} - -async function getMessage(echo, delay) { - await new Promise((r) => setTimeout(r, delay)) - return echo -} - -const getCachedMessage = cache(getMessage) diff --git a/test/e2e/app-dir/dynamic-io/app/cases/parallel/@slot/no-store/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/parallel/@slot/no-store/page.tsx index dbdf1fa30e110..0f4a6c15f6cad 100644 --- a/test/e2e/app-dir/dynamic-io/app/cases/parallel/@slot/no-store/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/cases/parallel/@slot/no-store/page.tsx @@ -3,6 +3,8 @@ import { unstable_noStore as noStore } from 'next/cache' import { getSentinelValue } from '../../../../getSentinelValue' export default async function Page() { + // We wait for metadata to finish before calling noStore + await new Promise((r) => process.nextTick(r)) noStore() return ( <> diff --git a/test/e2e/app-dir/dynamic-io/app/cases/task_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/task/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/cases/task_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cases/task/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/cases/task_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cases/task_root/page.tsx deleted file mode 100644 index 1fabaee140e15..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cases/task_root/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { getSentinelValue } from '../../getSentinelValue' - -export default async function Page() { - await 1 - return ( - <> -

- This page renders a component that requires async IO. It is simulated - using setTimeout(f, 1000). -

-

- This simulated IO component does not have a parent suspense boundary -

-

- With PPR this page should have an empty static shell because uncached - "IO" was used without a parent Suspense boundary. -

-

Without PPR this page should be dynamic.

- -
{getSentinelValue()}
- - ) -} - -async function ComponentWithIO() { - await new Promise((r) => setTimeout(r, 1000)) - return

hello IO

-} diff --git a/test/e2e/app-dir/dynamic-io/app/client-utils.ts b/test/e2e/app-dir/dynamic-io/app/client-utils.ts new file mode 100644 index 0000000000000..3caba62f6c3de --- /dev/null +++ b/test/e2e/app-dir/dynamic-io/app/client-utils.ts @@ -0,0 +1,23 @@ +export function createWaiter() { + let cached = null + function wait() { + if (typeof window === 'undefined') { + if (cached) { + return cached + } + cached = new Promise((r) => process.nextTick(r)) + return cached + } else { + if (cached) { + return cached + } + cached = Promise.resolve() + return cached + } + } + + function cleanup() { + cached = null + } + return { wait, cleanup } +} diff --git a/test/e2e/app-dir/dynamic-io/app/connection/static-behavior/root/page.tsx b/test/e2e/app-dir/dynamic-io/app/connection/static-behavior/root/page.tsx deleted file mode 100644 index f5ad949a2e3d3..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/connection/static-behavior/root/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { connection } from 'next/server' - -import { getSentinelValue } from '../../../getSentinelValue' -/** - * This test case is constructed to demonstrate how using the async form of cookies can lead to a better - * prerender with dynamic IO when PPR is on. There is no difference when PPR is off. When PPR is on the second component - * can finish rendering before the prerender completes and so we can produce a static shell where the Fallback closest - * to Cookies access is read - */ -export default async function Page() { - return ( - <> - - -
{getSentinelValue()}
- - ) -} - -async function Component() { - await connection() - return ( -
- cookie foo -
- ) -} - -function ComponentTwo() { - return

footer

-} diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/exercise/layout.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/exercise/layout.tsx new file mode 100644 index 0000000000000..b550c55e3d770 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io/app/cookies/exercise/layout.tsx @@ -0,0 +1,5 @@ +import { Suspense } from 'react' + +export default function Layout({ children }: { children: React.ReactNode }) { + return {children} +} diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async/page.tsx similarity index 91% rename from test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async/page.tsx index fef4e3a78bfda..68157fc221e99 100644 --- a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async/page.tsx @@ -10,13 +10,13 @@ import { getSentinelValue } from '../../../getSentinelValue' */ export default async function Page() { return ( - <> - + +
{getSentinelValue()}
- +
) } diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_root/page.tsx deleted file mode 100644 index 0027e215a0ecd..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/async_root/page.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { cookies } from 'next/headers' - -import { getSentinelValue } from '../../../getSentinelValue' - -export default async function Page() { - return ( - <> - -
{getSentinelValue()}
- - ) -} - -async function Component() { - const cookie = (await cookies()).get('x-sentinel') - if (cookie && cookie.value) { - return ( -
- cookie {cookie.value} -
- ) - } else { - return
no cookie found
- } -} diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync/page.tsx similarity index 63% rename from test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync/page.tsx index c4a5e2a63dda6..65879d4635a05 100644 --- a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync/page.tsx @@ -2,21 +2,18 @@ import { Suspense } from 'react' import { cookies, type UnsafeUnwrappedCookies } from 'next/headers' import { getSentinelValue } from '../../../getSentinelValue' -/** - * This test case is constructed to demonstrate the deopting behavior of synchronously - * accesing dynamic data like cookies. won't be able to render before we abort - * to it will bubble up to the root and mark the whoe page as dynamic when PPR is one. There - * is no real change in behavior when PPR is off. - */ + export default async function Page() { + // We delay rendering so that metadata can be resolved first + await new Promise((r) => process.nextTick(r)) return ( - <> - + +
{getSentinelValue()}
- +
) } diff --git a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_root/page.tsx deleted file mode 100644 index 910a25fd39a08..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/cookies/static-behavior/sync_root/page.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { cookies, type UnsafeUnwrappedCookies } from 'next/headers' - -import { getSentinelValue } from '../../../getSentinelValue' - -export default async function Page() { - return ( - <> - -
{getSentinelValue()}
- - ) -} - -function Component() { - const cookie = (cookies() as unknown as UnsafeUnwrappedCookies).get( - 'x-sentinel' - ) - if (cookie && cookie.value) { - return ( -
- cookie {cookie.value} -
- ) - } else { - return
no cookie found
- } -} diff --git a/test/e2e/app-dir/dynamic-io/app/headers/exercise/async/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/exercise/async/page.tsx index 482027458ba38..d709194ffce94 100644 --- a/test/e2e/app-dir/dynamic-io/app/headers/exercise/async/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/headers/exercise/async/page.tsx @@ -1,7 +1,7 @@ import { headers } from 'next/headers' import { getSentinelValue } from '../../../getSentinelValue' -import { AllComponents } from '../commponents' +import { AllComponents } from '../components' export default async function Page() { const allHeaders = await headers() diff --git a/test/e2e/app-dir/dynamic-io/app/headers/exercise/commponents.tsx b/test/e2e/app-dir/dynamic-io/app/headers/exercise/components.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/headers/exercise/commponents.tsx rename to test/e2e/app-dir/dynamic-io/app/headers/exercise/components.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/headers/exercise/layout.tsx b/test/e2e/app-dir/dynamic-io/app/headers/exercise/layout.tsx new file mode 100644 index 0000000000000..2eeff2adc3998 --- /dev/null +++ b/test/e2e/app-dir/dynamic-io/app/headers/exercise/layout.tsx @@ -0,0 +1,5 @@ +import { Suspense } from 'react' + +export default function Layout({ children }) { + return {children} +} diff --git a/test/e2e/app-dir/dynamic-io/app/headers/exercise/sync/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/exercise/sync/page.tsx index 56e783bd96816..1ca4de30424a9 100644 --- a/test/e2e/app-dir/dynamic-io/app/headers/exercise/sync/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/headers/exercise/sync/page.tsx @@ -1,7 +1,7 @@ import { headers, type UnsafeUnwrappedHeaders } from 'next/headers' import { getSentinelValue } from '../../../getSentinelValue' -import { AllComponents } from '../commponents' +import { AllComponents } from '../components' export default async function Page() { const xSentinelValues = new Set() diff --git a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async/page.tsx similarity index 91% rename from test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async/page.tsx index 0d43fc61f315d..07842812ee913 100644 --- a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async/page.tsx @@ -10,13 +10,13 @@ import { getSentinelValue } from '../../../getSentinelValue' */ export default async function Page() { return ( - <> - + +
{getSentinelValue()}
- +
) } diff --git a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_root/page.tsx deleted file mode 100644 index 39a354a81d4e8..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/async_root/page.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { headers } from 'next/headers' - -import { getSentinelValue } from '../../../getSentinelValue' - -export default async function Page() { - return ( - <> - -
{getSentinelValue()}
- - ) -} - -async function Component() { - const hasHeader = (await headers()).has('x-sentinel') - if (hasHeader) { - return ( -
- header{' '} - {(await headers()).get('x-sentinel')} -
- ) - } else { - return
no header found
- } -} diff --git a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync/page.tsx similarity index 81% rename from test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync/page.tsx index 272c5a791200d..cb8d4b3bd2796 100644 --- a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync/page.tsx @@ -5,18 +5,18 @@ import { getSentinelValue } from '../../../getSentinelValue' /** * This test case is constructed to demonstrate the deopting behavior of synchronously * accesing dynamic data like headers. won't be able to render before we abort - * to it will bubble up to the root and mark the whoe page as dynamic when PPR is one. There - * is no real change in behavior when PPR is off. */ export default async function Page() { + // We introduce a delay to allow metadata to resolve fully + await new Promise((r) => process.nextTick(r)) return ( - <> - + +
{getSentinelValue()}
- +
) } diff --git a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_root/page.tsx deleted file mode 100644 index b0e4a1ab1c2c0..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/headers/static-behavior/sync_root/page.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { headers, type UnsafeUnwrappedHeaders } from 'next/headers' - -import { getSentinelValue } from '../../../getSentinelValue' - -export default async function Page() { - return ( - <> - -
{getSentinelValue()}
- - ) -} - -function Component() { - const _headers = headers() as unknown as UnsafeUnwrappedHeaders - const hasHeader = _headers.has('x-sentinel') - if (hasHeader) { - return ( -
- header {_headers.get('x-sentinel')} -
- ) - } else { - return
no header found
- } -} diff --git a/test/e2e/app-dir/dynamic-io/app/params/generate-static-params/[slug]/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/generate-static-params/[slug]/layout.tsx index 8a1e8873cdfbc..8de3ac40b1f86 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/generate-static-params/[slug]/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/generate-static-params/[slug]/layout.tsx @@ -1,3 +1,5 @@ +import { Suspense } from 'react' + // TODO once we make fetchCache inert with dynamicIO this test is expected // to start failing. Right now the force cache causes the fetches to be identical // and we get only one prebuilt route. once we remove the caching behavior of fetchCache @@ -19,6 +21,14 @@ export async function generateStaticParams() { } export default async function Layout({ children, params }) { + return ( + + {children} + + ) +} + +async function Inner({ children, params }) { return ( <>

{await params.slug}

diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/client/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/client/layout.tsx index dd188f38d293e..39e5d2479b228 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/client/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/client/layout.tsx @@ -1,20 +1,23 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, children, }: { params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/server/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/server/layout.tsx index 2d28608d7fe48..64a4443c04c0a 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/server/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-access/server/layout.tsx @@ -9,6 +9,7 @@ export default async function Page({ params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/client/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/client/layout.tsx index 7c1fbbed0bb59..bf6dd140c695c 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/client/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/client/layout.tsx @@ -1,20 +1,23 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, children, }: { params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/server/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/server/layout.tsx index 937b756bcde76..07debf876948f 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/server/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-has/server/layout.tsx @@ -9,6 +9,7 @@ export default async function Page({ params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/client/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/client/layout.tsx index a93ab56886680..e8541a0485f7f 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/client/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/client/layout.tsx @@ -1,20 +1,23 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, children, }: { params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/server/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/server/layout.tsx index 8724b1001e121..d9b79ec049e0b 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/server/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/layout-spread/server/layout.tsx @@ -10,6 +10,7 @@ export default async function Page({ params: Promise<{ lowcard: string; highcard: string }> children: React.ReactNode }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/client/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/client/page.tsx index 19aae1c3a25e4..a7dcebb8db2af 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/client/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/client/page.tsx @@ -1,18 +1,21 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, }: { params: Promise<{ lowcard: string; highcard: string }> }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/server/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/server/page.tsx index 18d6ebbb61dbd..0268de2b1d0c3 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/server/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-access/server/page.tsx @@ -7,6 +7,7 @@ export default async function Page({ }: { params: Promise<{ lowcard: string; highcard: string }> }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/client/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/client/page.tsx index 89bc9544063aa..dc0f0b88f7b88 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/client/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/client/page.tsx @@ -1,18 +1,21 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, }: { params: Promise<{ lowcard: string; highcard: string }> }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/server/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/server/page.tsx index fcee9c7be7383..e7272343e10ec 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/server/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-has/server/page.tsx @@ -7,6 +7,7 @@ export default async function Page({ }: { params: Promise<{ lowcard: string; highcard: string }> }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams return (
diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/client/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/client/page.tsx index de695d9c8a682..570d3e85e901b 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/client/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/client/page.tsx @@ -1,18 +1,21 @@ 'use client' +import { use } from 'react' + import { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../getSentinelValue' -export default async function Page({ +import { createWaiter } from '../../../../../../../client-utils' +const waiter = createWaiter() + +export default function Page({ params, }: { params: Promise<{ lowcard: string; highcard: string }> }) { - // We wait an extra microtask to avoid erroring before some sibling branches have completed. - // In a future update we will make this a build error and explicitly test it but to keep the spirit of - // this test in tact we contrive a slightly delayed sync access - await 1 + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/server/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/server/page.tsx index 505873d1a6dc4..fb623ca42fcd4 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/server/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/semantics/[lowcard]/[highcard]/sync/page-spread/server/page.tsx @@ -7,6 +7,7 @@ export default async function Page({ }: { params: Promise<{ lowcard: string; highcard: string }> }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/client/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/client/layout.tsx index 071abe498e76d..e5c9280989418 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/client/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/client/layout.tsx @@ -1,9 +1,14 @@ 'use client' +import { use } from 'react' + import type { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../../../getSentinelValue' +import { createWaiter } from '../../../../../../../../../client-utils' +const waiter = createWaiter() + export default function Layout({ params, children, @@ -11,6 +16,8 @@ export default function Layout({ params: Promise<{ dyn: string; then: string; value: string; status: string }> children: React.ReactNode }) { + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/server/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/server/layout.tsx index eb3ff00c4cab3..dbb3fdacf9a86 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/server/layout.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/layout/server/layout.tsx @@ -9,6 +9,7 @@ export default async function Page({ params: Promise<{ dyn: string; then: string; value: string; status: string }> children: React.ReactNode }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/client/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/client/page.tsx index a041d143a81b2..3da7091d3e063 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/client/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/client/page.tsx @@ -1,14 +1,21 @@ 'use client' +import { use } from 'react' + import type { UnsafeUnwrappedParams } from 'next/server' import { getSentinelValue } from '../../../../../../../../../getSentinelValue' +import { createWaiter } from '../../../../../../../../../client-utils' +const waiter = createWaiter() + export default function Page({ params, }: { params: Promise<{ dyn: string; then: string; value: string; status: string }> }) { + use(waiter.wait()) + waiter.cleanup() const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/server/page.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/server/page.tsx index b4f46edffaffb..9c0fdaaf36e43 100644 --- a/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/server/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/[dyn]/[then]/[value]/[status]/sync/page/server/page.tsx @@ -7,6 +7,7 @@ export default async function Page({ }: { params: Promise<{ dyn: string; then: string; value: string; status: string }> }) { + await new Promise((r) => process.nextTick(r)) const syncParams = params as unknown as UnsafeUnwrappedParams const copied = { ...syncParams } return ( diff --git a/test/e2e/app-dir/dynamic-io/app/params/shadowing/layout.tsx b/test/e2e/app-dir/dynamic-io/app/params/shadowing/layout.tsx new file mode 100644 index 0000000000000..df33304d18dec --- /dev/null +++ b/test/e2e/app-dir/dynamic-io/app/params/shadowing/layout.tsx @@ -0,0 +1,5 @@ +import { Suspense } from 'react' + +export default function Layout({ children }) { + return {children} +} diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/client/use_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/client/use/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/search/async/client/use_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/async/client/use/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/client/use_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/client/use_root/page.tsx deleted file mode 100644 index e119d05d89067..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/async/client/use_root/page.tsx +++ /dev/null @@ -1,48 +0,0 @@ -'use client' - -import { use } from 'react' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default function Page({ - searchParams, -}: { - searchParams: Promise -}) { - return ( - <> -

- This page `use`'s the searchParams promise before accessing a property - on it. -

-

There use is not wrapped in a Suspense boundary

-

With PPR we expect the page to have an empty shell

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ - searchParams, -}: { - searchParams: Promise -}) { - const params = use(searchParams) - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {params.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/server/await_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/server/await/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/search/async/server/await_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/async/server/await/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/server/await_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/server/await_root/page.tsx deleted file mode 100644 index 2242f56e05bb8..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/async/server/await_root/page.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - return ( - <> -

- This page awaits the searchParams promise before accessing a property on - it. -

-

There use is not wrapped in a Suspense boundary

-

With PPR we expect the page to have an empty shell

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -async function Component({ - searchParams, -}: { - searchParams: Promise -}) { - const params = await searchParams - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {params.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/server/use_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/server/use/page.tsx similarity index 100% rename from test/e2e/app-dir/dynamic-io/app/search/async/server/use_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/async/server/use/page.tsx diff --git a/test/e2e/app-dir/dynamic-io/app/search/async/server/use_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/async/server/use_root/page.tsx deleted file mode 100644 index 0a597159e79f9..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/async/server/use_root/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { getSentinelValue } from '../../../../getSentinelValue' - -import { use } from 'react' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - return ( - <> -

- This page `use`'s the searchParams promise before accessing a property - on it. -

-

There use is not wrapped in a Suspense boundary

-

With PPR we expect the page to have an empty shell

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ - searchParams, -}: { - searchParams: Promise -}) { - const params = use(searchParams) - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {params.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/access/page.tsx similarity index 84% rename from test/e2e/app-dir/dynamic-io/app/search/sync/client/access_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/client/access/page.tsx index 8eec267109b2f..036166e059af6 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/client/access/page.tsx @@ -1,11 +1,14 @@ 'use client' -import { Suspense } from 'react' +import { Suspense, use } from 'react' import type { UnsafeUnwrappedSearchParams } from 'next/server' import { getSentinelValue } from '../../../../getSentinelValue' +import { createWaiter } from '../../../../client-utils' +const waiter = createWaiter() + type AnySearchParams = { [key: string]: string | string[] | undefined } export default function Page({ @@ -13,11 +16,13 @@ export default function Page({ }: { searchParams: Promise }) { + use(waiter.wait()) + waiter.cleanup() const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_root/page.tsx deleted file mode 100644 index a9d13573c12bc..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/access_root/page.tsx +++ /dev/null @@ -1,42 +0,0 @@ -'use client' - -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {searchParams.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/has/page.tsx similarity index 85% rename from test/e2e/app-dir/dynamic-io/app/search/sync/client/has_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/client/has/page.tsx index 0f61a1d082d6f..a7cb275bcdb51 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/client/has/page.tsx @@ -1,11 +1,14 @@ 'use client' -import { Suspense } from 'react' +import { Suspense, use } from 'react' import type { UnsafeUnwrappedSearchParams } from 'next/server' import { getSentinelValue } from '../../../../getSentinelValue' +import { createWaiter } from '../../../../client-utils' +const waiter = createWaiter() + type AnySearchParams = { [key: string]: string | string[] | undefined } export default function Page({ @@ -13,11 +16,13 @@ export default function Page({ }: { searchParams: Promise }) { + use(waiter.wait()) + waiter.cleanup() const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_root/page.tsx deleted file mode 100644 index 16a4545347fdc..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/has_root/page.tsx +++ /dev/null @@ -1,48 +0,0 @@ -'use client' - -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - return ( - <> -
- This component checks if the sentinel search param is defined -

- sentinel:{' '} - {String('sentinel' in searchParams)} -

-

- foo: {String('foo' in searchParams)} -

-
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread/page.tsx similarity index 86% rename from test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/client/spread/page.tsx index 7a766a0204e09..0405e824c3b44 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread/page.tsx @@ -1,11 +1,14 @@ 'use client' -import { Suspense } from 'react' +import { Suspense, use } from 'react' import type { UnsafeUnwrappedSearchParams } from 'next/server' import { getSentinelValue } from '../../../../getSentinelValue' +import { createWaiter } from '../../../../client-utils' +const waiter = createWaiter() + type AnySearchParams = { [key: string]: string | string[] | undefined } export default function Page({ @@ -13,11 +16,13 @@ export default function Page({ }: { searchParams: Promise }) { + use(waiter.wait()) + waiter.cleanup() const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_root/page.tsx deleted file mode 100644 index adbaf90a219c1..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/client/spread_root/page.tsx +++ /dev/null @@ -1,54 +0,0 @@ -'use client' - -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - const copied = { ...searchParams } - return ( - <> -
-

This component clones search params and then prints

-
    - {Object.keys(copied).map((k) => { - return ( -
  • - {k}:{' '} - - {copied[k]} - -
  • - ) - })} -
-
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/access/page.tsx similarity index 91% rename from test/e2e/app-dir/dynamic-io/app/search/sync/server/access_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/server/access/page.tsx index 10390951a4bdb..b8f663697cfd8 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/server/access/page.tsx @@ -11,11 +11,12 @@ export default async function Page({ }: { searchParams: Promise }) { + await new Promise((r) => process.nextTick(r)) const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_root/page.tsx deleted file mode 100644 index 0d7f2ff0173d7..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/access_root/page.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - return ( - <> -
- This component accessed `searchParams.sentinel`: " - {searchParams.sentinel}" -
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/has/page.tsx similarity index 92% rename from test/e2e/app-dir/dynamic-io/app/search/sync/server/has_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/server/has/page.tsx index df1f18aa137f2..8d5b18ed85cd2 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/server/has/page.tsx @@ -11,11 +11,12 @@ export default async function Page({ }: { searchParams: Promise }) { + await new Promise((r) => process.nextTick(r)) const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_root/page.tsx deleted file mode 100644 index d8f296b9b3690..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/has_root/page.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - return ( - <> -
- This component checks if the sentinel search param is defined -

- sentinel:{' '} - {String('sentinel' in searchParams)} -

-

- foo: {String('foo' in searchParams)} -

-
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_boundary/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread/page.tsx similarity index 93% rename from test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_boundary/page.tsx rename to test/e2e/app-dir/dynamic-io/app/search/sync/server/spread/page.tsx index 796d66a1b35c6..14ce5eb0b7002 100644 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_boundary/page.tsx +++ b/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread/page.tsx @@ -11,11 +11,12 @@ export default async function Page({ }: { searchParams: Promise }) { + await new Promise((r) => process.nextTick(r)) const castedSearchParams = searchParams as unknown as UnsafeUnwrappedSearchParams return ( <> -

This page access a search param synchonrously

+

This page access a search param synchronously

The `use` is inside a Suspense boundary

With PPR we expect the page to have a partially static page

Without PPR we expect the page to be dynamic

diff --git a/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_root/page.tsx b/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_root/page.tsx deleted file mode 100644 index 5aa663c8677e8..0000000000000 --- a/test/e2e/app-dir/dynamic-io/app/search/sync/server/spread_root/page.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import type { UnsafeUnwrappedSearchParams } from 'next/server' - -import { getSentinelValue } from '../../../../getSentinelValue' - -type AnySearchParams = { [key: string]: string | string[] | undefined } - -export default async function Page({ - searchParams, -}: { - searchParams: Promise -}) { - const castedSearchParams = - searchParams as unknown as UnsafeUnwrappedSearchParams - return ( - <> -

This page access a search param synchonrously

-

The `use` is inside a Suspense boundary

-

With PPR we expect the page to have a partially static page

-

Without PPR we expect the page to be dynamic

- - - - ) -} - -function Component({ searchParams }: { searchParams: AnySearchParams }) { - const copied = { ...searchParams } - return ( - <> -
-

This component clones search params and then prints

-
    - {Object.keys(copied).map((k) => { - return ( -
  • - {k}:{' '} - - {copied[k]} - -
  • - ) - })} -
-
- {getSentinelValue()} - - ) -} - -function ComponentTwo() { - return null -} diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts index b859bf8eedf41..94570682a7e19 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts @@ -24,17 +24,6 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#foo').text()).toBe('foo') } - - $ = await next.render$('/connection/static-behavior/root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#foo').text()).toBe('foo') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#foo').text()).toBe('foo') - } }) } else { it('should produce dynamic pages when using connection', async () => { @@ -48,17 +37,6 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at runtime') expect($('#foo').text()).toBe('foo') } - - $ = await next.render$('/connection/static-behavior/root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#foo').text()).toBe('foo') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#foo').text()).toBe('foo') - } }) } diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts index 4b57942ffc805..595344433264e 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts @@ -14,7 +14,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that use async cookies', async () => { - let $ = await next.render$('/cookies/static-behavior/async_boundary', {}) + let $ = await next.render$('/cookies/static-behavior/async', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -24,67 +24,23 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#x-sentinel').text()).toBe('hello') } - - $ = await next.render$('/cookies/static-behavior/async_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } }) it('should partially prerender pages that use sync cookies', async () => { - let $ = await next.render$('/cookies/static-behavior/sync_boundary', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/cookies/static-behavior/sync_root', {}) + let $ = await next.render$('/cookies/static-behavior/sync', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') expect($('#x-sentinel').text()).toBe('hello') } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') + expect($('#layout').text()).toBe('at buildtime') + expect($('#page').text()).toBe('at buildtime') expect($('#x-sentinel').text()).toBe('hello') } }) } else { it('should produce dynamic pages when using async or sync cookies', async () => { - let $ = await next.render$('/cookies/static-behavior/sync_boundary', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/cookies/static-behavior/sync_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/cookies/static-behavior/async_boundary', {}) + let $ = await next.render$('/cookies/static-behavior/sync', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -95,7 +51,7 @@ describe('dynamic-io', () => { expect($('#x-sentinel').text()).toBe('hello') } - $ = await next.render$('/cookies/static-behavior/async_root', {}) + $ = await next.render$('/cookies/static-behavior/async', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts index ccdca14ad8833..f64009d0b2204 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts @@ -14,7 +14,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that use async headers', async () => { - let $ = await next.render$('/headers/static-behavior/async_boundary', {}) + let $ = await next.render$('/headers/static-behavior/async', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -24,67 +24,23 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#x-sentinel').text()).toBe('hello') } - - $ = await next.render$('/headers/static-behavior/async_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } }) it('should partially prerender pages that use sync headers', async () => { - let $ = await next.render$('/headers/static-behavior/sync_boundary', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/headers/static-behavior/sync_root', {}) + let $ = await next.render$('/headers/static-behavior/sync', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') expect($('#x-sentinel').text()).toBe('hello') } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') + expect($('#layout').text()).toBe('at buildtime') + expect($('#page').text()).toBe('at buildtime') expect($('#x-sentinel').text()).toBe('hello') } }) } else { it('should produce dynamic pages when using async or sync headers', async () => { - let $ = await next.render$('/headers/static-behavior/sync_boundary', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/headers/static-behavior/sync_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#x-sentinel').text()).toBe('hello') - } - - $ = await next.render$('/headers/static-behavior/async_boundary', {}) + let $ = await next.render$('/headers/static-behavior/sync', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -95,7 +51,7 @@ describe('dynamic-io', () => { expect($('#x-sentinel').text()).toBe('hello') } - $ = await next.render$('/headers/static-behavior/async_root', {}) + $ = await next.render$('/headers/static-behavior/async', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts index 64a31d27967d1..8e5f42a79b6ba 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts @@ -2227,7 +2227,11 @@ describe('dynamic-io', () => { expect($('#param-status').text()).toBe('qux') expect(getLines('In route /params')).toEqual([]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toBe('bar') @@ -2248,7 +2252,11 @@ describe('dynamic-io', () => { expect($('#param-status').text()).toBe('qux') expect(getLines('In route /params')).toEqual([]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toBe('bar') @@ -2272,7 +2280,11 @@ describe('dynamic-io', () => { expect($('#param-status').text()).toBe('qux') expect(getLines('In route /params')).toEqual([]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toBe('bar') @@ -2293,7 +2305,11 @@ describe('dynamic-io', () => { expect($('#param-status').text()).toBe('qux') expect(getLines('In route /params')).toEqual([]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toBe('bar') @@ -2325,7 +2341,11 @@ describe('dynamic-io', () => { expect.stringContaining('accessed directly with `params.value`'), ]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toEqual( @@ -2356,7 +2376,11 @@ describe('dynamic-io', () => { expect.stringContaining('accessed directly with `params.value`'), ]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toEqual( @@ -2392,7 +2416,11 @@ describe('dynamic-io', () => { expect.stringContaining('accessed directly with `params.value`'), ]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toEqual( @@ -2425,7 +2453,11 @@ describe('dynamic-io', () => { expect.stringContaining('accessed directly with `params.value`'), ]) } else { - expect($('#layout').text()).toBe('at runtime') + if (WITH_PPR) { + expect($('#layout').text()).toBe('at buildtime') + } else { + expect($('#layout').text()).toBe('at runtime') + } expect($('#page').text()).toBe('at runtime') expect($('#param-dyn').text()).toBe('foo') expect($('#param-then').text()).toEqual( diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts index cfad2443702a7..f72125e44f9ab 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts @@ -28,9 +28,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that await searchParams in a server component', async () => { - let $ = await next.render$( - '/search/async/server/await_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/async/server/await?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -42,23 +40,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/async/server/await_root?sentinel=hello') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that `use` searchParams in a server component', async () => { - let $ = await next.render$( - '/search/async/server/use_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/async/server/use?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -70,23 +55,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/async/server/use_root?sentinel=hello') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that `use` searchParams in a client component', async () => { - let $ = await next.render$( - '/search/async/client/use_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/async/client/use?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -98,34 +70,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/async/client/use_root?sentinel=hello') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that await searchParams in a server component', async () => { - let $ = await next.render$( - '/search/async/server/await_boundary?sentinel=hello' - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } - - $ = await next.render$('/search/async/server/await_root?sentinel=hello') + let $ = await next.render$('/search/async/server/await?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -138,20 +86,7 @@ describe('dynamic-io', () => { }) it('should not prerender pages that `use` searchParams in a server component', async () => { - let $ = await next.render$( - '/search/async/server/use_boundary?sentinel=hello' - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } - - $ = await next.render$('/search/async/server/use_root?sentinel=hello') + let $ = await next.render$('/search/async/server/use?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -164,20 +99,7 @@ describe('dynamic-io', () => { }) it('should not prerender pages that `use` searchParams in a client component', async () => { - let $ = await next.render$( - '/search/async/client/use_boundary?sentinel=hello' - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } - - $ = await next.render$('/search/async/client/use_root?sentinel=hello') + let $ = await next.render$('/search/async/client/use?sentinel=hello') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') @@ -192,9 +114,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that access a searchParam property synchronously in a server component', async () => { - let $ = await next.render$( - '/search/sync/server/access_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/server/access?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -215,29 +135,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/server/access_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - 'searchParam property was accessed directly with `searchParams.sentinel`' - ), - ]) - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that access a searchParam property synchronously in a client component', async () => { - let $ = await next.render$( - '/search/sync/client/access_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/client/access?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -256,29 +157,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/client/access_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - 'searchParam property was accessed directly with `searchParams.sentinel`' - ), - ]) - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that checks for the existence of a searchParam property synchronously in a server component', async () => { - let $ = await next.render$( - '/search/sync/server/has_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/server/has?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -304,35 +186,10 @@ describe('dynamic-io', () => { expect($('#has-foo').text()).toBe('false') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/server/has_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar' - ), - expect.stringContaining( - '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that checks for the existence of a searchParam property synchronously in a client component', async () => { - let $ = await next.render$( - '/search/sync/client/has_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/client/has?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -356,34 +213,11 @@ describe('dynamic-io', () => { expect($('#has-foo').text()).toBe('false') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/client/has_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar' - ), - expect.stringContaining( - '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that spreads ...searchParam synchronously in a server component', async () => { let $ = await next.render$( - '/search/sync/server/spread_boundary?sentinel=hello&foo=foo&then=bar&value=baz' + '/search/sync/server/spread?sentinel=hello&foo=foo&then=bar&value=baz' ) let searchWarnings = getLines('In route /search') if (isNextDev) { @@ -411,33 +245,11 @@ describe('dynamic-io', () => { expect($('#value-value').text()).toBe('baz') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$( - '/search/sync/server/spread_root?sentinel=hello&foo=foo' - ) - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining('searchParams are being enumerated.'), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - } }) it('should partially prerender pages that spreads ...searchParam synchronously in a client component', async () => { let $ = await next.render$( - '/search/sync/client/spread_boundary?sentinel=hello&foo=foo&then=bar&value=baz' + '/search/sync/client/spread?sentinel=hello&foo=foo&then=bar&value=baz' ) let searchWarnings = getLines('In route /search') if (isNextDev) { @@ -470,38 +282,10 @@ describe('dynamic-io', () => { expect($('#value-value').text()).toBe('baz') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$( - '/search/sync/client/spread_root?sentinel=hello&foo=foo' - ) - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining('searchParams are being enumerated.'), - expect.stringContaining( - 'accessed directly with `searchParams.sentinel`' - ), - expect.stringContaining('accessed directly with `searchParams.foo`'), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender a page that accesses a searchParam property synchronously in a server component', async () => { - let $ = await next.render$( - '/search/sync/server/access_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/server/access?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -518,30 +302,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/server/access_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - 'searchParam property was accessed directly with `searchParams.sentinel`' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that accesses a searchParam property synchronously in a client component', async () => { - let $ = await next.render$( - '/search/sync/client/access_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/client/access?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -558,30 +322,10 @@ describe('dynamic-io', () => { expect($('#value').text()).toBe('hello') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/client/access_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - 'searchParam property was accessed directly with `searchParams.sentinel`' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that checks for the existence of a searchParam property synchronously in a server component', async () => { - let $ = await next.render$( - '/search/sync/server/has_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/server/has?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -603,35 +347,10 @@ describe('dynamic-io', () => { expect($('#has-foo').text()).toBe('false') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/server/has_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar.' - ), - expect.stringContaining( - 'Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar.' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that checks for the existence of a searchParam property synchronously in a client component', async () => { - let $ = await next.render$( - '/search/sync/client/has_boundary?sentinel=hello' - ) + let $ = await next.render$('/search/sync/client/has?sentinel=hello') let searchWarnings = getLines('In route /search') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') @@ -653,34 +372,11 @@ describe('dynamic-io', () => { expect($('#has-foo').text()).toBe('false') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$('/search/sync/client/has_root?sentinel=hello') - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining( - '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar.' - ), - expect.stringContaining( - 'Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar.' - ), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('#has-sentinel').text()).toBe('true') - expect($('#has-foo').text()).toBe('false') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that spreads ...searchParam synchronously in a server component', async () => { let $ = await next.render$( - '/search/sync/server/spread_boundary?sentinel=hello&foo=foo&then=bar&value=baz' + '/search/sync/server/spread?sentinel=hello&foo=foo&then=bar&value=baz' ) let searchWarnings = getLines('In route /search') if (isNextDev) { @@ -704,33 +400,11 @@ describe('dynamic-io', () => { expect($('#value-value').text()).toBe('baz') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$( - '/search/sync/server/spread_root?sentinel=hello&foo=foo' - ) - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining('searchParams are being enumerated.'), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - } }) it('should not prerender a page that spreads ...searchParam synchronously in a client component', async () => { let $ = await next.render$( - '/search/sync/client/spread_boundary?sentinel=hello&foo=foo&then=bar&value=baz' + '/search/sync/client/spread?sentinel=hello&foo=foo&then=bar&value=baz' ) let searchWarnings = getLines('In route /search') if (isNextDev) { @@ -761,32 +435,6 @@ describe('dynamic-io', () => { expect($('#value-value').text()).toBe('baz') expect($('#page').text()).toBe('at runtime') } - - $ = await next.render$( - '/search/sync/client/spread_root?sentinel=hello&foo=foo' - ) - searchWarnings = getLines('In route /search') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - expect(searchWarnings).toEqual([ - expect.stringContaining('searchParams are being enumerated.'), - expect.stringContaining( - 'accessed directly with `searchParams.sentinel`' - ), - expect.stringContaining('accessed directly with `searchParams.foo`'), - ]) - } else { - expect(searchWarnings).toHaveLength(0) - expect($('#layout').text()).toBe('at runtime') - expect($('[data-value]').length).toBe(2) - expect($('#value-sentinel').text()).toBe('hello') - expect($('#value-foo').text()).toBe('foo') - expect($('#page').text()).toBe('at runtime') - } }) } }) diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts index a06d80877a7b6..4ba284cf9c380 100644 --- a/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts +++ b/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts @@ -71,7 +71,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that take longer than a task to render', async () => { - let $ = await next.render$('/cases/task_boundary', {}) + let $ = await next.render$('/cases/task', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -83,19 +83,10 @@ describe('dynamic-io', () => { // it gets revealed when the resume happens expect($('#inner').text()).toBe('at buildtime') } - - $ = await next.render$('/cases/task_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that take longer than a single task to render', async () => { - let $ = await next.render$('/cases/task_boundary', {}) + let $ = await next.render$('/cases/task', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -107,15 +98,6 @@ describe('dynamic-io', () => { // it gets revealed when the resume happens expect($('#inner').text()).toBe('at runtime') } - - $ = await next.render$('/cases/task_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } @@ -132,7 +114,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that use at least one fetch without cache', async () => { - let $ = await next.render$('/cases/fetch_mixed_boundary', {}) + let $ = await next.render$('/cases/fetch_mixed', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -142,19 +124,10 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#inner').text()).toBe('at buildtime') } - - $ = await next.render$('/cases/fetch_mixed_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that use at least one fetch without cache', async () => { - let $ = await next.render$('/cases/fetch_mixed_boundary', {}) + let $ = await next.render$('/cases/fetch_mixed', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -164,15 +137,6 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at runtime') expect($('#inner').text()).toBe('at runtime') } - - $ = await next.render$('/cases/fetch_mixed_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } @@ -189,7 +153,7 @@ describe('dynamic-io', () => { if (WITH_PPR) { it('should partially prerender pages that do any uncached IO', async () => { - let $ = await next.render$('/cases/io_mixed_boundary', {}) + let $ = await next.render$('/cases/io_mixed', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -199,19 +163,10 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#inner').text()).toBe('at buildtime') } - - $ = await next.render$('/cases/io_mixed_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that do any uncached IO', async () => { - let $ = await next.render$('/cases/io_mixed_boundary', {}) + let $ = await next.render$('/cases/io_mixed', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -221,21 +176,12 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at runtime') expect($('#inner').text()).toBe('at runtime') } - - $ = await next.render$('/cases/io_mixed_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `cookies()`', async () => { - let $ = await next.render$('/cases/dynamic_api_cookies_boundary', {}) + let $ = await next.render$('/cases/dynamic_api_cookies', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -247,21 +193,10 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at buildtime') expect($('#value').text()).toBe('hello') } - - $ = await next.render$('/cases/dynamic_api_cookies_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } }) } else { it('should not prerender pages that use `cookies()`', async () => { - let $ = await next.render$('/cases/dynamic_api_cookies_boundary', {}) + let $ = await next.render$('/cases/dynamic_api_cookies', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -273,23 +208,12 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') } - - $ = await next.render$('/cases/dynamic_api_cookies_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `headers()`', async () => { - let $ = await next.render$('/cases/dynamic_api_headers_boundary') + let $ = await next.render$('/cases/dynamic_api_headers') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -301,21 +225,10 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at buildtime') expect($('#value').text()).toBe('hello') } - - $ = await next.render$('/cases/dynamic_api_headers_root') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } }) } else { it('should not prerender pages that use `headers()`', async () => { - let $ = await next.render$('/cases/dynamic_api_headers_boundary') + let $ = await next.render$('/cases/dynamic_api_headers') if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -327,23 +240,12 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at runtime') expect($('#value').text()).toBe('hello') } - - $ = await next.render$('/cases/dynamic_api_headers_root') - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('hello') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `unstable_noStore()`', async () => { - let $ = await next.render$('/cases/dynamic_api_no_store_boundary', {}) + let $ = await next.render$('/cases/dynamic_api_no_store', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -353,19 +255,10 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at buildtime') expect($('#inner').text()).toBe('at buildtime') } - - $ = await next.render$('/cases/dynamic_api_no_store_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } else { it('should not prerender pages that use `unstable_noStore()`', async () => { - let $ = await next.render$('/cases/dynamic_api_no_store_boundary', {}) + let $ = await next.render$('/cases/dynamic_api_no_store', {}) if (isNextDev) { expect($('#layout').text()).toBe('at runtime') expect($('#page').text()).toBe('at runtime') @@ -375,22 +268,13 @@ describe('dynamic-io', () => { expect($('#page').text()).toBe('at runtime') expect($('#inner').text()).toBe('at runtime') } - - $ = await next.render$('/cases/dynamic_api_no_store_root', {}) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `searchParams` in Server Components', async () => { let $ = await next.render$( - '/cases/dynamic_api_search_params_server_boundary?sentinel=my+sentinel', + '/cases/dynamic_api_search_params_server?sentinel=my+sentinel', {} ) if (isNextDev) { @@ -404,25 +288,11 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at buildtime') expect($('#value').text()).toBe('my sentinel') } - - $ = await next.render$( - '/cases/dynamic_api_search_params_server_root?sentinel=my+sentinel', - {} - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } }) } else { it('should not prerender pages that use `searchParams` in Server Components', async () => { let $ = await next.render$( - '/cases/dynamic_api_search_params_server_boundary?sentinel=my+sentinel', + '/cases/dynamic_api_search_params_server?sentinel=my+sentinel', {} ) if (isNextDev) { @@ -436,27 +306,13 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at runtime') expect($('#value').text()).toBe('my sentinel') } - - $ = await next.render$( - '/cases/dynamic_api_search_params_server_root?sentinel=my+sentinel', - {} - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } }) } if (WITH_PPR) { it('should partially prerender pages that use `searchParams` in Client Components', async () => { let $ = await next.render$( - '/cases/dynamic_api_search_params_client_boundary?sentinel=my+sentinel', + '/cases/dynamic_api_search_params_client?sentinel=my+sentinel', {} ) if (isNextDev) { @@ -472,25 +328,11 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at buildtime') expect($('#value').text()).toBe('my sentinel') } - - $ = await next.render$( - '/cases/dynamic_api_search_params_client_root?sentinel=my+sentinel', - {} - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } }) } else { it('should not prerender pages that use `searchParams` in Client Components', async () => { let $ = await next.render$( - '/cases/dynamic_api_search_params_client_boundary?sentinel=my+sentinel', + '/cases/dynamic_api_search_params_client?sentinel=my+sentinel', {} ) if (isNextDev) { @@ -504,20 +346,6 @@ describe('dynamic-io', () => { expect($('#inner').text()).toBe('at runtime') expect($('#value').text()).toBe('my sentinel') } - - $ = await next.render$( - '/cases/dynamic_api_search_params_client_root?sentinel=my+sentinel', - {} - ) - if (isNextDev) { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } else { - expect($('#layout').text()).toBe('at runtime') - expect($('#page').text()).toBe('at runtime') - expect($('#value').text()).toBe('my sentinel') - } }) } @@ -578,11 +406,9 @@ describe('dynamic-io', () => { expect($('#page-children').text()).toBe('at runtime') } else { if (WITH_PPR) { - // When using a sync dynamic API like noStore the prerender aborts - // before the shell can complete - expect($('#layout').text()).toBe('at runtime') + expect($('#layout').text()).toBe('at buildtime') expect($('#page-slot').text()).toBe('at runtime') - expect($('#page-children').text()).toBe('at runtime') + expect($('#page-children').text()).toBe('at buildtime') } else { expect($('#layout').text()).toBe('at runtime') expect($('#page-slot').text()).toBe('at runtime') diff --git a/test/e2e/app-dir/dynamic-io/next.config.js b/test/e2e/app-dir/dynamic-io/next.config.js index 650be7f1ecb99..f91d543c0e266 100644 --- a/test/e2e/app-dir/dynamic-io/next.config.js +++ b/test/e2e/app-dir/dynamic-io/next.config.js @@ -6,6 +6,7 @@ const nextConfig = { ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true', dynamicIO: true, + serverMinification: false, }, } diff --git a/test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts b/test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts index 136c95ba43bd1..08be5ac2b07b4 100644 --- a/test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts +++ b/test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts @@ -168,7 +168,7 @@ describe('opentelemetry', () => { }, { attributes: { - 'next.clientComponentLoadCount': 3, + 'next.clientComponentLoadCount': 6, 'next.span_type': 'NextNodeServer.clientComponentLoading', }, From 5d42735d9f994100d6c735b4272f977df872bc12 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Fri, 4 Oct 2024 08:45:23 +0200 Subject: [PATCH 07/19] auto import with `create::` prefix (#70774) ### Why? Consistency --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 0f288b28648a1..aa533555923f1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -96,5 +96,6 @@ "--ignore-revs-file", "${workspaceRoot}/.git-blame-ignore-revs" ], - "astGrep.serverPath": "node_modules/@ast-grep/cli/ast-grep" + "astGrep.serverPath": "node_modules/@ast-grep/cli/ast-grep", + "rust-analyzer.imports.prefix": "crate" } From 3b9889e1d881a777ccfe1a0dda55d44278fa305b Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Fri, 4 Oct 2024 09:57:55 +0200 Subject: [PATCH 08/19] [Turbopack] add new backend (#69667) ### What? Add a new turbo-tasks backend that stores data normalized and is prepared for persistent caching. No longer keeps state in task locals, but all state is stored immediately. This is required for persistent caching since it could store and resume at any point and we always need to be in a valid state. Tasks stay dirty until recomputed. (Previously dirty was changed to scheduled) ### Why? * Reduced memory usage * preparation for persistent caching --- Cargo.lock | 28 + Cargo.toml | 2 + crates/napi/Cargo.toml | 3 + crates/napi/src/next_api/project.rs | 67 +- crates/napi/src/next_api/utils.rs | 32 +- crates/napi/src/turbotrace.rs | 26 +- .../next/src/build/collect-build-traces.ts | 1 + packages/next/src/build/index.ts | 1 + .../next/src/build/swc/generated-native.d.ts | 5 +- packages/next/src/build/swc/index.ts | 8 +- packages/next/src/build/swc/types.ts | 10 +- .../src/server/dev/hot-reloader-turbopack.ts | 1 + test/development/basic/next-rs-api.test.ts | 14 +- turbopack/crates/node-file-trace/src/lib.rs | 76 +- turbopack/crates/node-file-trace/src/main.rs | 7 +- .../crates/turbo-tasks-backend/Cargo.toml | 38 + turbopack/crates/turbo-tasks-backend/build.rs | 5 + .../src/backend/indexed.rs | 4 + .../turbo-tasks-backend/src/backend/mod.rs | 1088 +++++++++++++++++ .../backend/operation/aggregation_update.rs | 882 +++++++++++++ .../backend/operation/cleanup_old_edges.rs | 143 +++ .../src/backend/operation/connect_child.rs | 149 +++ .../src/backend/operation/invalidate.rs | 93 ++ .../src/backend/operation/mod.rs | 360 ++++++ .../src/backend/operation/update_cell.rs | 52 + .../src/backend/operation/update_output.rs | 86 ++ .../src/backend/storage.rs | 371 ++++++ .../crates/turbo-tasks-backend/src/data.rs | 421 +++++++ .../crates/turbo-tasks-backend/src/lib.rs | 5 + .../turbo-tasks-backend/src/utils/bi_map.rs | 54 + .../src/utils/chunked_vec.rs | 76 ++ .../src/utils/dash_map_multi.rs | 220 ++++ .../turbo-tasks-backend/src/utils/mod.rs | 4 + .../src/utils/ptr_eq_arc.rs | 47 + .../turbo-tasks-backend/tests/all_in_one.rs | 1 + .../crates/turbo-tasks-backend/tests/basic.rs | 1 + .../turbo-tasks-backend/tests/call_types.rs | 1 + .../crates/turbo-tasks-backend/tests/debug.rs | 1 + .../turbo-tasks-backend/tests/detached.rs | 1 + .../tests/emptied_cells.rs | 1 + .../turbo-tasks-backend/tests/generics.rs | 1 + .../turbo-tasks-backend/tests/local_cell.rs | 1 + .../turbo-tasks-backend/tests/performance.rs | 1 + .../tests/read_ref_cell.rs | 1 + .../turbo-tasks-backend/tests/recompute.rs | 1 + .../turbo-tasks-backend/tests/resolved_vc.rs | 1 + .../turbo-tasks-backend/tests/test_config.trs | 3 + .../tests/trait_ref_cell.rs | 1 + .../src/derive/key_value_pair_macro.rs | 186 +++ .../turbo-tasks-macros/src/derive/mod.rs | 2 + .../crates/turbo-tasks-macros/src/lib.rs | 10 + .../crates/turbo-tasks-memory/tests/basic.rs | 1 + .../turbo-tasks-memory/tests/performance.rs | 1 + .../crates/turbo-tasks-testing/src/lib.rs | 2 +- .../crates/turbo-tasks-testing/src/run.rs | 27 +- .../crates/turbo-tasks-testing/tests/basic.rs | 40 + .../turbo-tasks-testing/tests/performance.rs | 100 ++ .../turbo-tasks-testing/tests/scope_stress.rs | 25 +- turbopack/crates/turbo-tasks/src/backend.rs | 85 +- .../crates/turbo-tasks/src/key_value_pair.rs | 8 + turbopack/crates/turbo-tasks/src/lib.rs | 4 +- 61 files changed, 4729 insertions(+), 157 deletions(-) create mode 100644 turbopack/crates/turbo-tasks-backend/Cargo.toml create mode 100644 turbopack/crates/turbo-tasks-backend/build.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/indexed.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/mod.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/operation/update_output.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/backend/storage.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/data.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/lib.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/utils/bi_map.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/utils/chunked_vec.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/utils/dash_map_multi.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/utils/mod.rs create mode 100644 turbopack/crates/turbo-tasks-backend/src/utils/ptr_eq_arc.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/all_in_one.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/basic.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/call_types.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/debug.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/detached.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/emptied_cells.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/generics.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/local_cell.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/performance.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/read_ref_cell.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/recompute.rs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/resolved_vc.rs create mode 100644 turbopack/crates/turbo-tasks-backend/tests/test_config.trs create mode 120000 turbopack/crates/turbo-tasks-backend/tests/trait_ref_cell.rs create mode 100644 turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs create mode 120000 turbopack/crates/turbo-tasks-memory/tests/basic.rs create mode 120000 turbopack/crates/turbo-tasks-memory/tests/performance.rs create mode 100644 turbopack/crates/turbo-tasks-testing/tests/basic.rs create mode 100644 turbopack/crates/turbo-tasks-testing/tests/performance.rs create mode 100644 turbopack/crates/turbo-tasks/src/key_value_pair.rs diff --git a/Cargo.lock b/Cargo.lock index 5e0c19e4c6cb3..2c36d4aab63b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4226,6 +4226,7 @@ dependencies = [ "tracing-chrome", "tracing-subscriber", "turbo-tasks", + "turbo-tasks-backend", "turbo-tasks-build", "turbo-tasks-fs", "turbo-tasks-malloc", @@ -8568,6 +8569,33 @@ dependencies = [ "unsize", ] +[[package]] +name = "turbo-tasks-backend" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "auto-hash-map", + "dashmap", + "either", + "hashbrown 0.14.5", + "indexmap 1.9.3", + "once_cell", + "parking_lot", + "rand", + "rustc-hash", + "serde", + "smallvec", + "tokio", + "tracing", + "turbo-prehash", + "turbo-tasks", + "turbo-tasks-build", + "turbo-tasks-hash", + "turbo-tasks-malloc", + "turbo-tasks-testing", +] + [[package]] name = "turbo-tasks-build" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index d4a9d2675d31a..098e39e555720 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,6 +45,7 @@ swc-ast-explorer = { path = "turbopack/crates/turbopack-swc-ast-explorer" } turbo-prehash = { path = "turbopack/crates/turbo-prehash" } turbo-tasks-malloc = { path = "turbopack/crates/turbo-tasks-malloc", default-features = false } turbo-tasks = { path = "turbopack/crates/turbo-tasks" } +turbo-tasks-backend = { path = "turbopack/crates/turbo-tasks-backend" } turbo-tasks-build = { path = "turbopack/crates/turbo-tasks-build" } turbo-tasks-bytes = { path = "turbopack/crates/turbo-tasks-bytes" } turbo-tasks-env = { path = "turbopack/crates/turbo-tasks-env" } @@ -143,6 +144,7 @@ dunce = "1.0.3" either = "1.9.0" futures = "0.3.26" futures-retry = "0.6.0" +hashbrown = "0.14.5" httpmock = { version = "0.6.8", default-features = false } image = { version = "0.25.0", default-features = false } indexmap = "1.9.2" diff --git a/crates/napi/Cargo.toml b/crates/napi/Cargo.toml index e7d428bbeb4fb..604dd24188771 100644 --- a/crates/napi/Cargo.toml +++ b/crates/napi/Cargo.toml @@ -37,6 +37,8 @@ __internal_dhat-heap = ["dhat"] # effectively does nothing. __internal_dhat-ad-hoc = ["dhat"] +new-backend = ["dep:turbo-tasks-backend"] + # Enable specific tls features per-target. [target.'cfg(all(target_os = "windows", target_arch = "aarch64"))'.dependencies] next-core = { workspace = true, features = ["native-tls"] } @@ -105,6 +107,7 @@ lightningcss-napi = { workspace = true } tokio = { workspace = true, features = ["full"] } turbo-tasks = { workspace = true } turbo-tasks-memory = { workspace = true } +turbo-tasks-backend = { workspace = true, optional = true } turbo-tasks-fs = { workspace = true } next-api = { workspace = true } next-build = { workspace = true } diff --git a/crates/napi/src/next_api/project.rs b/crates/napi/src/next_api/project.rs index 65143fd3ff11c..df20d341d7094 100644 --- a/crates/napi/src/next_api/project.rs +++ b/crates/napi/src/next_api/project.rs @@ -1,4 +1,4 @@ -use std::{io::Write, path::PathBuf, sync::Arc, thread, time::Duration}; +use std::{path::PathBuf, sync::Arc, thread, time::Duration}; use anyhow::{anyhow, bail, Context, Result}; use napi::{ @@ -24,7 +24,6 @@ use tracing::Instrument; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry}; use turbo_tasks::{Completion, RcStr, ReadRef, TransientInstance, TurboTasks, UpdateInfo, Vc}; use turbo_tasks_fs::{DiskFileSystem, FileContent, FileSystem, FileSystemPath}; -use turbo_tasks_memory::MemoryBackend; use turbopack_core::{ diagnostics::PlainDiagnostic, error::PrettyPrintError, @@ -44,8 +43,8 @@ use url::Url; use super::{ endpoint::ExternalEndpoint, utils::{ - get_diagnostics, get_issues, subscribe, NapiDiagnostic, NapiIssue, RootTask, - TurbopackResult, VcArc, + create_turbo_tasks, get_diagnostics, get_issues, subscribe, NapiDiagnostic, NapiIssue, + NextBackend, RootTask, TurbopackResult, VcArc, }, }; use crate::register; @@ -99,7 +98,7 @@ pub struct NapiProjectOptions { /// next.config's distDir. Project initialization occurs eariler than /// deserializing next.config, so passing it as separate option. - pub dist_dir: Option, + pub dist_dir: String, /// Filesystem watcher options. pub watch: NapiWatchOptions, @@ -273,7 +272,7 @@ impl From for DefineEnv { } pub struct ProjectInstance { - turbo_tasks: Arc>, + turbo_tasks: Arc>, container: Vc, exit_receiver: tokio::sync::Mutex>, } @@ -309,10 +308,7 @@ pub async fn project_new( let subscriber = Registry::default(); let subscriber = subscriber.with(EnvFilter::builder().parse(trace).unwrap()); - let dist_dir = options - .dist_dir - .as_ref() - .map_or_else(|| ".next".to_string(), |d| d.to_string()); + let dist_dir = options.dist_dir.clone(); let internal_dir = PathBuf::from(&options.project_path).join(dist_dir); std::fs::create_dir_all(&internal_dir) @@ -338,27 +334,30 @@ pub async fn project_new( subscriber.init(); } - let turbo_tasks = TurboTasks::new(MemoryBackend::new( - turbo_engine_options - .memory_limit - .map(|m| m as usize) - .unwrap_or(usize::MAX), - )); - let stats_path = std::env::var_os("NEXT_TURBOPACK_TASK_STATISTICS"); - if let Some(stats_path) = stats_path { - let task_stats = turbo_tasks.backend().task_statistics().enable().clone(); - exit.on_exit(async move { - tokio::task::spawn_blocking(move || { - let mut file = std::fs::File::create(&stats_path) - .with_context(|| format!("failed to create or open {stats_path:?}"))?; - serde_json::to_writer(&file, &task_stats) - .context("failed to serialize or write task statistics")?; - file.flush().context("failed to flush file") - }) - .await - .unwrap() - .unwrap(); - }); + let memory_limit = turbo_engine_options + .memory_limit + .map(|m| m as usize) + .unwrap_or(usize::MAX); + let turbo_tasks = create_turbo_tasks(PathBuf::from(&options.dist_dir), memory_limit)?; + #[cfg(not(feature = "new-backend"))] + { + use std::io::Write; + let stats_path = std::env::var_os("NEXT_TURBOPACK_TASK_STATISTICS"); + if let Some(stats_path) = stats_path { + let task_stats = turbo_tasks.backend().task_statistics().enable().clone(); + exit.on_exit(async move { + tokio::task::spawn_blocking(move || { + let mut file = std::fs::File::create(&stats_path) + .with_context(|| format!("failed to create or open {stats_path:?}"))?; + serde_json::to_writer(&file, &task_stats) + .context("failed to serialize or write task statistics")?; + file.flush().context("failed to flush file") + }) + .await + .unwrap() + .unwrap(); + }); + } } let options: ProjectOptions = options.into(); let container = turbo_tasks @@ -502,7 +501,7 @@ impl NapiRoute { fn from_route( pathname: String, value: Route, - turbo_tasks: &Arc>, + turbo_tasks: &Arc>, ) -> Self { let convert_endpoint = |endpoint: Vc>| { Some(External::new(ExternalEndpoint(VcArc::new( @@ -569,7 +568,7 @@ struct NapiMiddleware { impl NapiMiddleware { fn from_middleware( value: &Middleware, - turbo_tasks: &Arc>, + turbo_tasks: &Arc>, ) -> Result { Ok(NapiMiddleware { endpoint: External::new(ExternalEndpoint(VcArc::new( @@ -589,7 +588,7 @@ struct NapiInstrumentation { impl NapiInstrumentation { fn from_instrumentation( value: &Instrumentation, - turbo_tasks: &Arc>, + turbo_tasks: &Arc>, ) -> Result { Ok(NapiInstrumentation { node_js: External::new(ExternalEndpoint(VcArc::new( diff --git a/crates/napi/src/next_api/utils.rs b/crates/napi/src/next_api/utils.rs index 62cefa34b7af5..a5c4284c73c66 100644 --- a/crates/napi/src/next_api/utils.rs +++ b/crates/napi/src/next_api/utils.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, future::Future, ops::Deref, sync::Arc}; +use std::{collections::HashMap, future::Future, ops::Deref, path::PathBuf, sync::Arc}; use anyhow::{anyhow, Context, Result}; use napi::{ @@ -9,7 +9,6 @@ use napi::{ use serde::Serialize; use turbo_tasks::{ReadRef, TaskId, TryJoinIterExt, TurboTasks, Vc}; use turbo_tasks_fs::FileContent; -use turbo_tasks_memory::MemoryBackend; use turbopack_core::{ diagnostics::{Diagnostic, DiagnosticContextExt, PlainDiagnostic}, error::PrettyPrintError, @@ -19,22 +18,41 @@ use turbopack_core::{ use crate::util::log_internal_error_and_inform; +#[cfg(not(feature = "new-backend"))] +pub type NextBackend = turbo_tasks_memory::MemoryBackend; +#[cfg(feature = "new-backend")] +pub type NextBackend = turbo_tasks_backend::TurboTasksBackend; + +#[allow(unused_variables, reason = "feature-gated")] +pub fn create_turbo_tasks( + output_path: PathBuf, + memory_limit: usize, +) -> Result>> { + #[cfg(not(feature = "new-backend"))] + let backend = TurboTasks::new(turbo_tasks_memory::MemoryBackend::new(memory_limit)); + #[cfg(feature = "new-backend")] + let backend = TurboTasks::new(turbo_tasks_backend::TurboTasksBackend::new(Arc::new( + turbo_tasks_backend::LmdbBackingStorage::new(&output_path.join("cache/turbopack"))?, + ))); + Ok(backend) +} + /// A helper type to hold both a Vc operation and the TurboTasks root process. /// Without this, we'd need to pass both individually all over the place #[derive(Clone)] pub struct VcArc { - turbo_tasks: Arc>, + turbo_tasks: Arc>, /// The Vc. Must be resolved, otherwise you are referencing an inactive /// operation. vc: T, } impl VcArc { - pub fn new(turbo_tasks: Arc>, vc: T) -> Self { + pub fn new(turbo_tasks: Arc>, vc: T) -> Self { Self { turbo_tasks, vc } } - pub fn turbo_tasks(&self) -> &Arc> { + pub fn turbo_tasks(&self) -> &Arc> { &self.turbo_tasks } } @@ -57,7 +75,7 @@ pub fn serde_enum_to_string(value: &T) -> Result { /// The root of our turbopack computation. pub struct RootTask { #[allow(dead_code)] - turbo_tasks: Arc>, + turbo_tasks: Arc>, #[allow(dead_code)] task_id: Option, } @@ -301,7 +319,7 @@ impl ToNapiValue for TurbopackResult { } pub fn subscribe> + Send, V: ToNapiValue>( - turbo_tasks: Arc>, + turbo_tasks: Arc>, func: JsFunction, handler: impl 'static + Sync + Send + Clone + Fn() -> F, mapper: impl 'static + Sync + Send + FnMut(ThreadSafeCallContext) -> napi::Result>, diff --git a/crates/napi/src/turbotrace.rs b/crates/napi/src/turbotrace.rs index faf0c63db3764..fef534c04b550 100644 --- a/crates/napi/src/turbotrace.rs +++ b/crates/napi/src/turbotrace.rs @@ -1,35 +1,35 @@ -use std::sync::Arc; +use std::{path::PathBuf, sync::Arc}; use napi::bindgen_prelude::*; use node_file_trace::{start, Args}; use turbo_tasks::TurboTasks; -use turbo_tasks_memory::MemoryBackend; use turbopack::{ module_options::{EcmascriptOptionsContext, ModuleOptionsContext}, resolve_options_context::ResolveOptionsContext, }; +use crate::next_api::utils::{self, NextBackend}; + #[napi] -pub fn create_turbo_tasks(memory_limit: Option) -> External>> { - let turbo_tasks = TurboTasks::new(MemoryBackend::new( - memory_limit.map(|m| m as usize).unwrap_or(usize::MAX), - )); - External::new_with_size_hint( - turbo_tasks, - memory_limit.map(|u| u as usize).unwrap_or(usize::MAX), - ) +pub fn create_turbo_tasks( + output_path: String, + memory_limit: Option, +) -> External>> { + let limit = memory_limit.map(|u| u as usize).unwrap_or(usize::MAX); + let turbo_tasks = utils::create_turbo_tasks(PathBuf::from(&output_path), limit) + .expect("Failed to create TurboTasks"); + External::new_with_size_hint(turbo_tasks, limit) } #[napi] pub async fn run_turbo_tracing( options: Buffer, - turbo_tasks: Option>>>, + turbo_tasks: External>>, ) -> napi::Result> { let args: Args = serde_json::from_slice(options.as_ref())?; - let turbo_tasks = turbo_tasks.map(|t| t.clone()); let files = start( Arc::new(args), - turbo_tasks.as_ref(), + turbo_tasks.clone(), Some(ModuleOptionsContext { ecmascript: EcmascriptOptionsContext { enable_types: true, diff --git a/packages/next/src/build/collect-build-traces.ts b/packages/next/src/build/collect-build-traces.ts index 498aced6a9922..75639427ed0cf 100644 --- a/packages/next/src/build/collect-build-traces.ts +++ b/packages/next/src/build/collect-build-traces.ts @@ -119,6 +119,7 @@ export async function collectBuildTraces({ let turbotraceOutputPath: string | undefined let turbotraceFiles: string[] | undefined turboTasksForTrace = bindings.turbo.createTurboTasks( + distDir, (config.experimental.turbotrace?.memoryLimit ?? TURBO_TRACE_DEFAULT_MEMORY_LIMIT) * 1024 * diff --git a/packages/next/src/build/index.ts b/packages/next/src/build/index.ts index 1f2ab770fea3f..5eba2e12fde4f 100644 --- a/packages/next/src/build/index.ts +++ b/packages/next/src/build/index.ts @@ -1379,6 +1379,7 @@ export default async function build( config.experimental?.turbo?.root || config.outputFileTracingRoot || dir, + distDir, nextConfig: config, jsConfig: await getTurbopackJsConfig(dir, config), watch: { diff --git a/packages/next/src/build/swc/generated-native.d.ts b/packages/next/src/build/swc/generated-native.d.ts index 0921b0b0c2e2a..2c9def68d3b7b 100644 --- a/packages/next/src/build/swc/generated-native.d.ts +++ b/packages/next/src/build/swc/generated-native.d.ts @@ -103,7 +103,7 @@ export interface NapiProjectOptions { * next.config's distDir. Project initialization occurs eariler than * deserializing next.config, so passing it as separate option. */ - distDir?: string + distDir: string /** Filesystem watcher options. */ watch: NapiWatchOptions /** The contents of next.config.js, serialized to JSON. */ @@ -363,11 +363,12 @@ export interface NapiRewrite { missing?: Array } export function createTurboTasks( + outputPath: string, memoryLimit?: number | undefined | null ): ExternalObject export function runTurboTracing( options: Buffer, - turboTasks?: ExternalObject | undefined | null + turboTasks: ExternalObject ): Promise> export function getTargetTriple(): string export function initHeapProfiler(): ExternalObject diff --git a/packages/next/src/build/swc/index.ts b/packages/next/src/build/swc/index.ts index 06eb571c85afd..0b35aee09bd5c 100644 --- a/packages/next/src/build/swc/index.ts +++ b/packages/next/src/build/swc/index.ts @@ -1054,6 +1054,7 @@ async function loadWasm(importPath = '') { Log.error('Wasm binding does not support trace yet') }, createTurboTasks: function ( + _outputPath: string, _memoryLimit?: number | undefined ): ExternalObject { throw new Error( @@ -1234,8 +1235,11 @@ function loadNative(importPath?: string) { turboTasks ) }, - createTurboTasks(memoryLimit?: number): ExternalObject { - return bindings.createTurboTasks(memoryLimit) + createTurboTasks( + outputPath: string, + memoryLimit?: number + ): ExternalObject { + return bindings.createTurboTasks(outputPath, memoryLimit) }, createProject: bindingToApi(customBindings ?? bindings, false), startTurbopackTraceServer(traceFilePath) { diff --git a/packages/next/src/build/swc/types.ts b/packages/next/src/build/swc/types.ts index 69d99816e1645..76eaf9a02e112 100644 --- a/packages/next/src/build/swc/types.ts +++ b/packages/next/src/build/swc/types.ts @@ -6,7 +6,10 @@ export interface Binding { isWasm: boolean turbo: { startTrace(options: any, turboTasks: ExternalObject): any - createTurboTasks(memoryLimit?: number): ExternalObject + createTurboTasks( + outputPath: string, + memoryLimit?: number + ): ExternalObject createProject( options: ProjectOptions, turboEngineOptions?: TurboEngineOptions @@ -320,6 +323,11 @@ export interface ProjectOptions { */ projectPath: string + /** + * The path to the .next directory. + */ + distDir: string + /** * The next.config.js contents. */ diff --git a/packages/next/src/server/dev/hot-reloader-turbopack.ts b/packages/next/src/server/dev/hot-reloader-turbopack.ts index 56068bb00d2ab..f35251289c010 100644 --- a/packages/next/src/server/dev/hot-reloader-turbopack.ts +++ b/packages/next/src/server/dev/hot-reloader-turbopack.ts @@ -150,6 +150,7 @@ export async function createHotReloaderTurbopack( opts.nextConfig.experimental.turbo?.root || opts.nextConfig.outputFileTracingRoot || dir, + distDir, nextConfig: opts.nextConfig, jsConfig: await getTurbopackJsConfig(dir, nextConfig), watch: { diff --git a/test/development/basic/next-rs-api.test.ts b/test/development/basic/next-rs-api.test.ts index 71e084d64080d..8d57bbc23b95f 100644 --- a/test/development/basic/next-rs-api.test.ts +++ b/test/development/basic/next-rs-api.test.ts @@ -190,6 +190,12 @@ describe('next.rs api', () => { console.log(next.testDir) const nextConfig = await loadConfig(PHASE_DEVELOPMENT_SERVER, next.testDir) const bindings = await loadBindings() + const distDir = path.join( + process.env.NEXT_SKIP_ISOLATE + ? path.resolve(__dirname, '../../..') + : next.testDir, + '.next' + ) project = await bindings.turbo.createProject({ env: {}, jsConfig: { @@ -197,6 +203,7 @@ describe('next.rs api', () => { }, nextConfig: nextConfig, projectPath: next.testDir, + distDir, rootPath: process.env.NEXT_SKIP_ISOLATE ? path.resolve(__dirname, '../../..') : next.testDir, @@ -209,12 +216,7 @@ describe('next.rs api', () => { clientRouterFilters: undefined, config: nextConfig, dev: true, - distDir: path.join( - process.env.NEXT_SKIP_ISOLATE - ? path.resolve(__dirname, '../../..') - : next.testDir, - '.next' - ), + distDir: distDir, fetchCacheKeyPrefix: undefined, hasRewrites: false, middlewareMatchers: undefined, diff --git a/turbopack/crates/node-file-trace/src/lib.rs b/turbopack/crates/node-file-trace/src/lib.rs index 5b6b09befbe36..387c95240ac2b 100644 --- a/turbopack/crates/node-file-trace/src/lib.rs +++ b/turbopack/crates/node-file-trace/src/lib.rs @@ -28,7 +28,6 @@ use turbo_tasks::{ use turbo_tasks_fs::{ glob::Glob, DirectoryEntry, DiskFileSystem, FileSystem, FileSystemPath, ReadGlobResult, }; -use turbo_tasks_memory::MemoryBackend; use turbopack::{ emit_asset, emit_with_completion, module_options::ModuleOptionsContext, rebase::RebasedAsset, ModuleAssetContext, @@ -177,7 +176,7 @@ fn default_output_directory() -> String { } impl Args { - fn common(&self) -> &CommonArgs { + pub fn common(&self) -> &CommonArgs { match self { Args::Print { common, .. } | Args::Annotate { common, .. } @@ -310,78 +309,16 @@ fn process_input(dir: &Path, context_directory: &str, input: &[String]) -> Resul .collect() } -pub async fn start( +pub async fn start( args: Arc, - turbo_tasks: Option<&Arc>>, + turbo_tasks: Arc>, module_options: Option, resolve_options: Option, ) -> Result> { register(); - let &CommonArgs { - memory_limit, - #[cfg(feature = "persistent_cache")] - cache: CacheArgs { - ref cache, - ref cache_fully, - }, - .. - } = args.common(); - #[cfg(feature = "persistent_cache")] - if let Some(cache) = cache { - use tokio::time::timeout; - use turbo_tasks_memory::MemoryBackendWithPersistedGraph; - use turbo_tasks_rocksdb::RocksDbPersistedGraph; - - run( - &args, - || { - let start = Instant::now(); - let backend = MemoryBackendWithPersistedGraph::new( - RocksDbPersistedGraph::new(cache).unwrap(), - ); - let tt = TurboTasks::new(backend); - let elapsed = start.elapsed(); - println!("restored cache {}", FormatDuration(elapsed)); - tt - }, - |tt, _, duration| async move { - let mut start = Instant::now(); - if *cache_fully { - tt.wait_background_done().await; - tt.stop_and_wait().await; - let elapsed = start.elapsed(); - println!("flushed cache {}", FormatDuration(elapsed)); - } else { - let background_timeout = - std::cmp::max(duration / 5, Duration::from_millis(100)); - let timed_out = timeout(background_timeout, tt.wait_background_done()) - .await - .is_err(); - tt.stop_and_wait().await; - let elapsed = start.elapsed(); - if timed_out { - println!("flushed cache partially {}", FormatDuration(elapsed)); - } else { - println!("flushed cache completely {}", FormatDuration(elapsed)); - } - } - start = Instant::now(); - drop(tt); - let elapsed = start.elapsed(); - println!("writing cache {}", FormatDuration(elapsed)); - }, - ) - .await; - return; - } - run( - args.clone(), - || { - turbo_tasks.cloned().unwrap_or_else(|| { - TurboTasks::new(MemoryBackend::new(memory_limit.unwrap_or(usize::MAX))) - }) - }, + args, + turbo_tasks, |_, _, _| async move {}, module_options, resolve_options, @@ -391,7 +328,7 @@ pub async fn start( async fn run>( args: Arc, - create_tt: impl Fn() -> Arc>, + tt: Arc>, final_finish: impl FnOnce(Arc>, TaskId, Duration) -> F, module_options: Option, resolve_options: Option, @@ -459,7 +396,6 @@ async fn run>( matches!(&*args, Args::Annotate { .. }) || matches!(&*args, Args::Print { .. }); let (sender, mut receiver) = channel(1); let dir = current_dir().unwrap(); - let tt = create_tt(); let module_options = TransientInstance::new(module_options.unwrap_or_default()); let resolve_options = TransientInstance::new(resolve_options.unwrap_or_default()); let log_options = TransientInstance::new(LogOptions { diff --git a/turbopack/crates/node-file-trace/src/main.rs b/turbopack/crates/node-file-trace/src/main.rs index 2e435166363da..77767706c2df9 100644 --- a/turbopack/crates/node-file-trace/src/main.rs +++ b/turbopack/crates/node-file-trace/src/main.rs @@ -5,6 +5,8 @@ use std::sync::Arc; use anyhow::Result; use clap::Parser; use node_file_trace::{start, Args}; +use turbo_tasks::TurboTasks; +use turbo_tasks_memory::MemoryBackend; #[global_allocator] static ALLOC: turbo_tasks_malloc::TurboMalloc = turbo_tasks_malloc::TurboMalloc; @@ -15,7 +17,10 @@ async fn main() -> Result<()> { console_subscriber::init(); let args = Arc::new(Args::parse()); let should_print = matches!(&*args, Args::Print { .. }); - let result = start(args, None, None, None).await?; + let turbo_tasks = TurboTasks::new(MemoryBackend::new( + args.common().memory_limit.unwrap_or(usize::MAX), + )); + let result = start(args, turbo_tasks, None, None).await?; if should_print { for file in result.iter() { println!("{}", file); diff --git a/turbopack/crates/turbo-tasks-backend/Cargo.toml b/turbopack/crates/turbo-tasks-backend/Cargo.toml new file mode 100644 index 0000000000000..f51271f10f948 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "turbo-tasks-backend" +version = "0.1.0" +description = "TBD" +license = "MPL-2.0" +edition = "2021" +autobenches = false + +[lib] +bench = false + +[lints] +workspace = true + +[dependencies] +anyhow = { workspace = true } +async-trait = { workspace = true } +auto-hash-map = { workspace = true } +dashmap = { workspace = true, features = ["raw-api"]} +either = { workspace = true } +hashbrown = { workspace = true } +indexmap = { workspace = true } +once_cell = { workspace = true } +parking_lot = { workspace = true } +rand = { workspace = true } +rustc-hash = { workspace = true } +serde = { workspace = true } +smallvec = { workspace = true } +tokio = { workspace = true } +tracing = { workspace = true } +turbo-prehash = { workspace = true } +turbo-tasks = { workspace = true } +turbo-tasks-hash = { workspace = true } +turbo-tasks-malloc = { workspace = true, default-features = false } +turbo-tasks-testing = { workspace = true } + +[build-dependencies] +turbo-tasks-build = { workspace = true } diff --git a/turbopack/crates/turbo-tasks-backend/build.rs b/turbopack/crates/turbo-tasks-backend/build.rs new file mode 100644 index 0000000000000..1673efed59cce --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/build.rs @@ -0,0 +1,5 @@ +use turbo_tasks_build::generate_register; + +fn main() { + generate_register(); +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/indexed.rs b/turbopack/crates/turbo-tasks-backend/src/backend/indexed.rs new file mode 100644 index 0000000000000..b5598224c2eef --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/indexed.rs @@ -0,0 +1,4 @@ +pub trait Indexed { + type Index: Clone + PartialEq + Eq + std::hash::Hash; + fn index(&self) -> Self::Index; +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs new file mode 100644 index 0000000000000..c8a9697a52d58 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs @@ -0,0 +1,1088 @@ +pub mod indexed; +mod operation; +mod storage; + +use std::{ + borrow::Cow, + collections::{HashMap, HashSet}, + future::Future, + hash::BuildHasherDefault, + mem::take, + pin::Pin, + sync::{ + atomic::{AtomicUsize, Ordering}, + Arc, + }, + time::Duration, +}; + +use anyhow::{bail, Result}; +use auto_hash_map::{AutoMap, AutoSet}; +use dashmap::DashMap; +use parking_lot::{Condvar, Mutex}; +use rustc_hash::FxHasher; +use smallvec::smallvec; +use turbo_tasks::{ + backend::{ + Backend, BackendJobId, CachedTaskType, CellContent, TaskExecutionSpec, TransientTaskRoot, + TransientTaskType, TypedCellContent, + }, + event::EventListener, + registry, + util::IdFactoryWithReuse, + CellId, FunctionId, RawVc, ReadConsistency, TaskId, TraitTypeId, TurboTasksBackendApi, + ValueTypeId, TRANSIENT_TASK_BIT, +}; + +pub use self::operation::AnyOperation; +use crate::{ + backend::{ + operation::{ + get_aggregation_number, is_root_node, AggregatedDataUpdate, AggregationUpdateJob, + AggregationUpdateQueue, CleanupOldEdgesOperation, ConnectChildOperation, + ExecuteContext, OutdatedEdge, + }, + storage::{get, get_many, remove, Storage}, + }, + data::{ + ActiveType, AggregationNumber, CachedDataItem, CachedDataItemIndex, CachedDataItemKey, + CachedDataItemValue, CachedDataUpdate, CellRef, InProgressCellState, InProgressState, + OutputValue, RootState, + }, + utils::{bi_map::BiMap, chunked_vec::ChunkedVec, ptr_eq_arc::PtrEqArc}, +}; + +const SNAPSHOT_REQUESTED_BIT: usize = 1 << (usize::BITS - 1); + +struct SnapshotRequest { + snapshot_requested: bool, + suspended_operations: HashSet>, +} + +impl SnapshotRequest { + fn new() -> Self { + Self { + snapshot_requested: false, + suspended_operations: HashSet::new(), + } + } +} + +type TransientTaskOnce = + Mutex> + Send + 'static>>>>; + +pub enum TransientTask { + /// A root task that will track dependencies and re-execute when + /// dependencies change. Task will eventually settle to the correct + /// execution. + /// + /// Always active. Automatically scheduled. + Root(TransientTaskRoot), + + // TODO implement these strongly consistency + /// A single root task execution. It won't track dependencies. + /// Task will definitely include all invalidations that happened before the + /// start of the task. It may or may not include invalidations that + /// happened after that. It may see these invalidations partially + /// applied. + /// + /// Active until done. Automatically scheduled. + Once(TransientTaskOnce), +} + +pub struct TurboTasksBackend { + persisted_task_id_factory: IdFactoryWithReuse, + transient_task_id_factory: IdFactoryWithReuse, + + persisted_task_cache_log: Mutex, TaskId)>>, + task_cache: BiMap, TaskId>, + transient_tasks: DashMap>, + + persisted_storage_log: Mutex>, + storage: Storage, + + /// Number of executing operations + Highest bit is set when snapshot is + /// requested. When that bit is set, operations should pause until the + /// snapshot is completed. When the bit is set and in progress counter + /// reaches zero, `operations_completed_when_snapshot_requested` is + /// triggered. + in_progress_operations: AtomicUsize, + + snapshot_request: Mutex, + /// Condition Variable that is triggered when `in_progress_operations` + /// reaches zero while snapshot is requested. All operations are either + /// completed or suspended. + operations_suspended: Condvar, + /// Condition Variable that is triggered when a snapshot is completed and + /// operations can continue. + snapshot_completed: Condvar, +} + +impl Default for TurboTasksBackend { + fn default() -> Self { + Self::new() + } +} + +impl TurboTasksBackend { + pub fn new() -> Self { + Self { + persisted_task_id_factory: IdFactoryWithReuse::new(1, (TRANSIENT_TASK_BIT - 1) as u64), + transient_task_id_factory: IdFactoryWithReuse::new( + TRANSIENT_TASK_BIT as u64, + u32::MAX as u64, + ), + persisted_task_cache_log: Mutex::new(ChunkedVec::new()), + task_cache: BiMap::new(), + transient_tasks: DashMap::new(), + persisted_storage_log: Mutex::new(ChunkedVec::new()), + storage: Storage::new(), + in_progress_operations: AtomicUsize::new(0), + snapshot_request: Mutex::new(SnapshotRequest::new()), + operations_suspended: Condvar::new(), + snapshot_completed: Condvar::new(), + } + } + + fn execute_context<'a>( + &'a self, + turbo_tasks: &'a dyn TurboTasksBackendApi, + ) -> ExecuteContext<'a> { + ExecuteContext::new(self, turbo_tasks) + } + + fn suspending_requested(&self) -> bool { + (self.in_progress_operations.load(Ordering::Relaxed) & SNAPSHOT_REQUESTED_BIT) != 0 + } + + fn operation_suspend_point(&self, suspend: impl FnOnce() -> AnyOperation) { + if self.suspending_requested() { + let operation = Arc::new(suspend()); + let mut snapshot_request = self.snapshot_request.lock(); + if snapshot_request.snapshot_requested { + snapshot_request + .suspended_operations + .insert(operation.clone().into()); + let value = self.in_progress_operations.fetch_sub(1, Ordering::AcqRel) - 1; + assert!((value & SNAPSHOT_REQUESTED_BIT) != 0); + if value == SNAPSHOT_REQUESTED_BIT { + self.operations_suspended.notify_all(); + } + self.snapshot_completed + .wait_while(&mut snapshot_request, |snapshot_request| { + snapshot_request.snapshot_requested + }); + self.in_progress_operations.fetch_add(1, Ordering::AcqRel); + snapshot_request + .suspended_operations + .remove(&operation.into()); + } + } + } + + pub(crate) fn start_operation(&self) -> OperationGuard<'_> { + let fetch_add = self.in_progress_operations.fetch_add(1, Ordering::AcqRel); + if (fetch_add & SNAPSHOT_REQUESTED_BIT) != 0 { + let mut snapshot_request = self.snapshot_request.lock(); + if snapshot_request.snapshot_requested { + let value = self.in_progress_operations.fetch_sub(1, Ordering::AcqRel) - 1; + if value == SNAPSHOT_REQUESTED_BIT { + self.operations_suspended.notify_all(); + } + self.snapshot_completed + .wait_while(&mut snapshot_request, |snapshot_request| { + snapshot_request.snapshot_requested + }); + self.in_progress_operations.fetch_add(1, Ordering::AcqRel); + } + } + OperationGuard { backend: self } + } +} + +pub(crate) struct OperationGuard<'a> { + backend: &'a TurboTasksBackend, +} + +impl<'a> Drop for OperationGuard<'a> { + fn drop(&mut self) { + let fetch_sub = self + .backend + .in_progress_operations + .fetch_sub(1, Ordering::AcqRel); + if fetch_sub - 1 == SNAPSHOT_REQUESTED_BIT { + self.backend.operations_suspended.notify_all(); + } + } +} + +// Operations +impl TurboTasksBackend { + fn connect_child( + &self, + parent_task: TaskId, + child_task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + operation::ConnectChildOperation::run( + parent_task, + child_task, + self.execute_context(turbo_tasks), + ); + } + + fn try_read_task_output( + &self, + task_id: TaskId, + reader: Option, + consistency: ReadConsistency, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + let ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task_id); + + if let Some(in_progress) = get!(task, InProgress) { + match in_progress { + InProgressState::Scheduled { done_event, .. } + | InProgressState::InProgress { done_event, .. } => { + let reader_desc = reader.map(|r| self.get_task_desc_fn(r)); + let listener = done_event.listen_with_note(move || { + if let Some(reader_desc) = reader_desc.as_ref() { + format!("try_read_task_output from {}", reader_desc()) + } else { + "try_read_task_output (untracked)".to_string() + } + }); + return Ok(Err(listener)); + } + } + } + + if matches!(consistency, ReadConsistency::Strong) { + // Ensure it's an root node + loop { + let aggregation_number = get_aggregation_number(&task); + if is_root_node(aggregation_number) { + break; + } + drop(task); + AggregationUpdateQueue::run( + AggregationUpdateJob::UpdateAggregationNumber { + task_id, + base_aggregation_number: u32::MAX, + distance: None, + }, + &ctx, + ); + task = ctx.task(task_id); + } + + // Check the dirty count of the root node + let dirty_tasks = get!(task, AggregatedDirtyContainerCount) + .copied() + .unwrap_or_default(); + let root = get!(task, AggregateRoot); + if dirty_tasks > 0 { + // When there are dirty task, subscribe to the all_clean_event + let root = if let Some(root) = root { + root + } else { + // If we don't have a root state, add one. This also makes sure all tasks stay + // active and this task won't stale. CachedActiveUntilClean + // is automatically removed when this task is clean. + task.add_new(CachedDataItem::AggregateRoot { + value: RootState::new(ActiveType::CachedActiveUntilClean), + }); + get!(task, AggregateRoot).unwrap() + }; + let listener = root.all_clean_event.listen_with_note(move || { + format!( + "try_read_task_output (strongly consistent) from {:?}", + reader + ) + }); + return Ok(Err(listener)); + } + } + + if let Some(output) = get!(task, Output) { + let result = match output { + OutputValue::Cell(cell) => Some(Ok(Ok(RawVc::TaskCell(cell.task, cell.cell)))), + OutputValue::Output(task) => Some(Ok(Ok(RawVc::TaskOutput(*task)))), + OutputValue::Error | OutputValue::Panic => { + get!(task, Error).map(|error| Err(error.clone().into())) + } + }; + if let Some(result) = result { + if let Some(reader) = reader { + let _ = task.add(CachedDataItem::OutputDependent { + task: reader, + value: (), + }); + drop(task); + + let mut reader_task = ctx.task(reader); + if reader_task + .remove(&CachedDataItemKey::OutdatedOutputDependency { target: task_id }) + .is_none() + { + let _ = reader_task.add(CachedDataItem::OutputDependency { + target: task_id, + value: (), + }); + } + } + + return result; + } + } + + let reader_desc = reader.map(|r| self.get_task_desc_fn(r)); + let note = move || { + if let Some(reader_desc) = reader_desc.as_ref() { + format!("try_read_task_output (recompute) from {}", reader_desc()) + } else { + "try_read_task_output (recompute, untracked)".to_string() + } + }; + + // Output doesn't exist. We need to schedule the task to compute it. + let (item, listener) = + CachedDataItem::new_scheduled_with_listener(self.get_task_desc_fn(task_id), note); + task.add_new(item); + turbo_tasks.schedule(task_id); + + Ok(Err(listener)) + } + + fn try_read_task_cell( + &self, + task_id: TaskId, + reader: Option, + cell: CellId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + let ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task_id); + if let Some(content) = get!(task, CellData { cell }) { + let content = content.clone(); + if let Some(reader) = reader { + let _ = task.add(CachedDataItem::CellDependent { + cell, + task: reader, + value: (), + }); + drop(task); + + let mut reader_task = ctx.task(reader); + let target = CellRef { + task: task_id, + cell, + }; + if reader_task + .remove(&CachedDataItemKey::OutdatedCellDependency { target }) + .is_none() + { + let _ = reader_task.add(CachedDataItem::CellDependency { target, value: () }); + } + } + return Ok(Ok(CellContent(Some(content)).into_typed(cell.type_id))); + } + + // Check cell index range (cell might not exist at all) + let Some(max_id) = get!( + task, + CellTypeMaxIndex { + cell_type: cell.type_id + } + ) else { + bail!( + "Cell {cell:?} no longer exists in task {task_id:?} (no cell of this type exists)" + ); + }; + if cell.index > *max_id { + bail!("Cell {cell:?} no longer exists in task {task_id:?} (index out of bounds)"); + } + + // Cell should exist, but data was dropped or is not serializable. We need to recompute the + // task the get the cell content. + + let reader_desc = reader.map(|r| self.get_task_desc_fn(r)); + let note = move || { + if let Some(reader_desc) = reader_desc.as_ref() { + format!("try_read_task_cell from {}", reader_desc()) + } else { + "try_read_task_cell (untracked)".to_string() + } + }; + + // Register event listener for cell computation + if let Some(in_progress) = get!(task, InProgressCell { cell }) { + // Someone else is already computing the cell + let listener = in_progress.event.listen_with_note(note); + return Ok(Err(listener)); + } + + // We create the event and potentially schedule the task + let in_progress = InProgressCellState::new(task_id, cell); + + let listener = in_progress.event.listen_with_note(note); + task.add_new(CachedDataItem::InProgressCell { + cell, + value: in_progress, + }); + + // Schedule the task, if not already scheduled + if task.add(CachedDataItem::new_scheduled( + self.get_task_desc_fn(task_id), + )) { + turbo_tasks.schedule(task_id); + } + + Ok(Err(listener)) + } + + fn lookup_task_type(&self, task_id: TaskId) -> Option> { + if let Some(task_type) = self.task_cache.lookup_reverse(&task_id) { + return Some(task_type); + } + None + } + + // TODO feature flag that for hanging detection only + fn get_task_desc_fn(&self, task_id: TaskId) -> impl Fn() -> String + Send + Sync + 'static { + let task_type = self.lookup_task_type(task_id); + move || { + task_type.as_ref().map_or_else( + || format!("{task_id:?} transient"), + |task_type| format!("{task_id:?} {task_type}"), + ) + } + } +} + +impl Backend for TurboTasksBackend { + fn get_or_create_persistent_task( + &self, + task_type: CachedTaskType, + parent_task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> TaskId { + if let Some(task_id) = self.task_cache.lookup_forward(&task_type) { + self.connect_child(parent_task, task_id, turbo_tasks); + return task_id; + } + + let task_type = Arc::new(task_type); + let task_id = self.persisted_task_id_factory.get(); + if let Err(existing_task_id) = self.task_cache.try_insert(task_type.clone(), task_id) { + // Safety: We just created the id and failed to insert it. + unsafe { + self.persisted_task_id_factory.reuse(task_id); + } + self.connect_child(parent_task, existing_task_id, turbo_tasks); + return existing_task_id; + } + self.persisted_task_cache_log + .lock() + .push((task_type, task_id)); + + self.connect_child(parent_task, task_id, turbo_tasks); + + task_id + } + + fn get_or_create_transient_task( + &self, + task_type: CachedTaskType, + parent_task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> TaskId { + if let Some(task_id) = self.task_cache.lookup_forward(&task_type) { + self.connect_child(parent_task, task_id, turbo_tasks); + return task_id; + } + + let task_type = Arc::new(task_type); + let task_id = self.transient_task_id_factory.get(); + if let Err(existing_task_id) = self.task_cache.try_insert(task_type, task_id) { + // Safety: We just created the id and failed to insert it. + unsafe { + self.transient_task_id_factory.reuse(task_id); + } + self.connect_child(parent_task, existing_task_id, turbo_tasks); + return existing_task_id; + } + + self.connect_child(parent_task, task_id, turbo_tasks); + + task_id + } + + fn invalidate_task(&self, task_id: TaskId, turbo_tasks: &dyn TurboTasksBackendApi) { + operation::InvalidateOperation::run(smallvec![task_id], self.execute_context(turbo_tasks)); + } + + fn invalidate_tasks(&self, tasks: &[TaskId], turbo_tasks: &dyn TurboTasksBackendApi) { + operation::InvalidateOperation::run( + tasks.iter().copied().collect(), + self.execute_context(turbo_tasks), + ); + } + + fn invalidate_tasks_set( + &self, + tasks: &AutoSet, 2>, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + operation::InvalidateOperation::run( + tasks.iter().copied().collect(), + self.execute_context(turbo_tasks), + ); + } + + fn get_task_description(&self, task: TaskId) -> std::string::String { + let task_type = self.lookup_task_type(task).expect("Task not found"); + task_type.to_string() + } + + fn try_get_function_id(&self, task_id: TaskId) -> Option { + self.lookup_task_type(task_id) + .and_then(|task_type| match &*task_type { + CachedTaskType::Native { fn_type, .. } => Some(*fn_type), + _ => None, + }) + } + + type TaskState = (); + fn new_task_state(&self, _task: TaskId) -> Self::TaskState {} + + fn try_start_task_execution( + &self, + task_id: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Option> { + enum TaskType { + Cached(Arc), + Transient(Arc), + } + let (task_type, once_task) = if let Some(task_type) = self.lookup_task_type(task_id) { + (TaskType::Cached(task_type), false) + } else if let Some(task_type) = self.transient_tasks.get(&task_id) { + ( + TaskType::Transient(task_type.clone()), + matches!(**task_type, TransientTask::Once(_)), + ) + } else { + return None; + }; + { + let ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task_id); + let in_progress = remove!(task, InProgress)?; + let InProgressState::Scheduled { done_event } = in_progress else { + task.add_new(CachedDataItem::InProgress { value: in_progress }); + return None; + }; + task.add_new(CachedDataItem::InProgress { + value: InProgressState::InProgress { + stale: false, + once_task, + done_event, + }, + }); + + // Make all current children outdated (remove left-over outdated children) + enum Child { + Current(TaskId), + Outdated(TaskId), + } + let children = task + .iter(CachedDataItemIndex::Children) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::Child { task } => Some(Child::Current(task)), + CachedDataItemKey::OutdatedChild { task } => Some(Child::Outdated(task)), + _ => None, + }) + .collect::>(); + for child in children { + match child { + Child::Current(child) => { + let _ = task.add(CachedDataItem::OutdatedChild { + task: child, + value: (), + }); + } + Child::Outdated(child) => { + if !task.has_key(&CachedDataItemKey::Child { task: child }) { + task.remove(&CachedDataItemKey::OutdatedChild { task: child }); + } + } + } + } + + // Make all dependencies outdated + enum Dep { + CurrentCell(CellRef), + CurrentOutput(TaskId), + OutdatedCell(CellRef), + OutdatedOutput(TaskId), + } + let dependencies = task + .iter(CachedDataItemIndex::Dependencies) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::CellDependency { target } => Some(Dep::CurrentCell(target)), + CachedDataItemKey::OutputDependency { target } => { + Some(Dep::CurrentOutput(target)) + } + CachedDataItemKey::OutdatedCellDependency { target } => { + Some(Dep::OutdatedCell(target)) + } + CachedDataItemKey::OutdatedOutputDependency { target } => { + Some(Dep::OutdatedOutput(target)) + } + _ => None, + }) + .collect::>(); + for dep in dependencies { + match dep { + Dep::CurrentCell(cell) => { + let _ = task.add(CachedDataItem::OutdatedCellDependency { + target: cell, + value: (), + }); + } + Dep::CurrentOutput(output) => { + let _ = task.add(CachedDataItem::OutdatedOutputDependency { + target: output, + value: (), + }); + } + Dep::OutdatedCell(cell) => { + if !task.has_key(&CachedDataItemKey::CellDependency { target: cell }) { + task.remove(&CachedDataItemKey::OutdatedCellDependency { + target: cell, + }); + } + } + Dep::OutdatedOutput(output) => { + if !task.has_key(&CachedDataItemKey::OutputDependency { target: output }) { + task.remove(&CachedDataItemKey::OutdatedOutputDependency { + target: output, + }); + } + } + } + } + + // TODO: Make all collectibles outdated + } + + let (span, future) = match task_type { + TaskType::Cached(task_type) => match &*task_type { + CachedTaskType::Native { fn_type, this, arg } => ( + registry::get_function(*fn_type).span(), + registry::get_function(*fn_type).execute(*this, &**arg), + ), + CachedTaskType::ResolveNative { fn_type, .. } => { + let span = registry::get_function(*fn_type).resolve_span(); + let turbo_tasks = turbo_tasks.pin(); + ( + span, + Box::pin(async move { + let CachedTaskType::ResolveNative { fn_type, this, arg } = &*task_type + else { + unreachable!() + }; + CachedTaskType::run_resolve_native( + *fn_type, + *this, + &**arg, + task_id.persistence(), + turbo_tasks, + ) + .await + }) as Pin + Send + '_>>, + ) + } + CachedTaskType::ResolveTrait { + trait_type, + method_name, + .. + } => { + let span = registry::get_trait(*trait_type).resolve_span(method_name); + let turbo_tasks = turbo_tasks.pin(); + ( + span, + Box::pin(async move { + let CachedTaskType::ResolveTrait { + trait_type, + method_name, + this, + arg, + } = &*task_type + else { + unreachable!() + }; + CachedTaskType::run_resolve_trait( + *trait_type, + method_name.clone(), + *this, + &**arg, + task_id.persistence(), + turbo_tasks, + ) + .await + }) as Pin + Send + '_>>, + ) + } + }, + TaskType::Transient(task_type) => { + let task_type = task_type.clone(); + let span = tracing::trace_span!("turbo_tasks::root_task"); + let future = match &*task_type { + TransientTask::Root(f) => f(), + TransientTask::Once(future_mutex) => take(&mut *future_mutex.lock())?, + }; + (span, future) + } + }; + Some(TaskExecutionSpec { future, span }) + } + + fn task_execution_result( + &self, + task_id: TaskId, + result: Result, Option>>, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + operation::UpdateOutputOperation::run(task_id, result, self.execute_context(turbo_tasks)); + } + + fn task_execution_completed( + &self, + task_id: TaskId, + _duration: Duration, + _memory_usage: usize, + cell_counters: &AutoMap, 8>, + stateful: bool, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> bool { + let ctx = self.execute_context(turbo_tasks); + let mut task = ctx.task(task_id); + let Some(CachedDataItemValue::InProgress { value: in_progress }) = + task.remove(&CachedDataItemKey::InProgress {}) + else { + panic!("Task execution completed, but task is not in progress: {task:#?}"); + }; + let InProgressState::InProgress { + done_event, + once_task: _, + stale, + } = in_progress + else { + panic!("Task execution completed, but task is not in progress: {task:#?}"); + }; + + // TODO handle stateful + let _ = stateful; + + if stale { + task.add_new(CachedDataItem::InProgress { + value: InProgressState::Scheduled { done_event }, + }); + drop(task); + drop(ctx); + } else { + // handle cell counters: update max index and remove cells that are no longer used + let mut removed_cells = HashMap::new(); + let mut old_counters: HashMap<_, _> = + get_many!(task, CellTypeMaxIndex { cell_type } max_index => (cell_type, max_index)); + for (&cell_type, &max_index) in cell_counters.iter() { + if let Some(old_max_index) = old_counters.remove(&cell_type) { + if old_max_index != max_index { + task.insert(CachedDataItem::CellTypeMaxIndex { + cell_type, + value: max_index, + }); + if old_max_index > max_index { + removed_cells.insert(cell_type, max_index + 1..=old_max_index); + } + } + } else { + task.add_new(CachedDataItem::CellTypeMaxIndex { + cell_type, + value: max_index, + }); + } + } + for (cell_type, old_max_index) in old_counters { + task.remove(&CachedDataItemKey::CellTypeMaxIndex { cell_type }); + removed_cells.insert(cell_type, 0..=old_max_index); + } + let mut removed_data = Vec::new(); + for (&cell_type, range) in removed_cells.iter() { + for index in range.clone() { + removed_data.extend( + task.remove(&CachedDataItemKey::CellData { + cell: CellId { + type_id: cell_type, + index, + }, + }) + .into_iter(), + ); + } + } + + // find all outdated data items (removed cells, outdated edges) + let old_edges = if task.is_indexed() { + task.iter(CachedDataItemIndex::Children) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::OutdatedChild { task } => { + Some(OutdatedEdge::Child(task)) + } + _ => None, + }) + .chain( + task.iter(CachedDataItemIndex::Dependencies) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::OutdatedCellDependency { target } => { + Some(OutdatedEdge::CellDependency(target)) + } + CachedDataItemKey::OutdatedOutputDependency { target } => { + Some(OutdatedEdge::OutputDependency(target)) + } + _ => None, + }), + ) + .chain( + task.iter(CachedDataItemIndex::CellDependent) + .filter_map(|(key, _)| match *key { + CachedDataItemKey::CellDependent { cell, task } + if removed_cells + .get(&cell.type_id) + .map_or(false, |range| range.contains(&cell.index)) => + { + Some(OutdatedEdge::RemovedCellDependent(task)) + } + _ => None, + }), + ) + .collect::>() + } else { + task.iter_all() + .filter_map(|(key, _)| match *key { + CachedDataItemKey::OutdatedChild { task } => { + Some(OutdatedEdge::Child(task)) + } + CachedDataItemKey::OutdatedCellDependency { target } => { + Some(OutdatedEdge::CellDependency(target)) + } + CachedDataItemKey::OutdatedOutputDependency { target } => { + Some(OutdatedEdge::OutputDependency(target)) + } + CachedDataItemKey::CellDependent { cell, task } + if removed_cells + .get(&cell.type_id) + .map_or(false, |range| range.contains(&cell.index)) => + { + Some(OutdatedEdge::RemovedCellDependent(task)) + } + _ => None, + }) + .collect::>() + }; + + let was_dirty = task.remove(&CachedDataItemKey::Dirty {}).is_some(); + let data_update = if was_dirty { + let dirty_containers = get!(task, AggregatedDirtyContainerCount) + .copied() + .unwrap_or_default(); + if dirty_containers == 0 { + if let Some(root_state) = get!(task, AggregateRoot) { + root_state.all_clean_event.notify(usize::MAX); + if matches!(root_state.ty, ActiveType::CachedActiveUntilClean) { + task.remove(&CachedDataItemKey::AggregateRoot {}); + } + } + AggregationUpdateJob::data_update( + &mut task, + AggregatedDataUpdate::no_longer_dirty_container(task_id), + ) + } else { + None + } + } else { + None + }; + + drop(task); + + done_event.notify(usize::MAX); + + CleanupOldEdgesOperation::run(task_id, old_edges, data_update, ctx); + + drop(removed_data) + } + + stale + } + + fn run_backend_job( + &self, + _: BackendJobId, + _: &dyn TurboTasksBackendApi, + ) -> Pin + Send + 'static)>> { + todo!() + } + + fn try_read_task_output( + &self, + task_id: TaskId, + reader: TaskId, + consistency: ReadConsistency, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + self.try_read_task_output(task_id, Some(reader), consistency, turbo_tasks) + } + + fn try_read_task_output_untracked( + &self, + task_id: TaskId, + consistency: ReadConsistency, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + self.try_read_task_output(task_id, None, consistency, turbo_tasks) + } + + fn try_read_task_cell( + &self, + task_id: TaskId, + cell: CellId, + reader: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + self.try_read_task_cell(task_id, Some(reader), cell, turbo_tasks) + } + + fn try_read_task_cell_untracked( + &self, + task_id: TaskId, + cell: CellId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result> { + self.try_read_task_cell(task_id, None, cell, turbo_tasks) + } + + fn try_read_own_task_cell_untracked( + &self, + task_id: TaskId, + cell: CellId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) -> Result { + let ctx = self.execute_context(turbo_tasks); + let task = ctx.task(task_id); + if let Some(content) = get!(task, CellData { cell }) { + Ok(CellContent(Some(content.clone())).into_typed(cell.type_id)) + } else { + Ok(CellContent(None).into_typed(cell.type_id)) + } + } + + fn read_task_collectibles( + &self, + _: TaskId, + _: TraitTypeId, + _: TaskId, + _: &dyn TurboTasksBackendApi, + ) -> AutoMap, 1> { + todo!() + } + + fn emit_collectible( + &self, + _: TraitTypeId, + _: RawVc, + _: TaskId, + _: &dyn TurboTasksBackendApi, + ) { + todo!() + } + + fn unemit_collectible( + &self, + _: TraitTypeId, + _: RawVc, + _: u32, + _: TaskId, + _: &dyn TurboTasksBackendApi, + ) { + todo!() + } + + fn update_task_cell( + &self, + task_id: TaskId, + cell: CellId, + content: CellContent, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + operation::UpdateCellOperation::run( + task_id, + cell, + content, + self.execute_context(turbo_tasks), + ); + } + + fn connect_task( + &self, + task: TaskId, + parent_task: TaskId, + turbo_tasks: &dyn TurboTasksBackendApi, + ) { + ConnectChildOperation::run(parent_task, task, self.execute_context(turbo_tasks)); + } + + fn create_transient_task( + &self, + task_type: TransientTaskType, + _turbo_tasks: &dyn TurboTasksBackendApi, + ) -> TaskId { + let task_id = self.transient_task_id_factory.get(); + let root_type = match task_type { + TransientTaskType::Root(_) => ActiveType::RootTask, + TransientTaskType::Once(_) => ActiveType::OnceTask, + }; + self.transient_tasks.insert( + task_id, + Arc::new(match task_type { + TransientTaskType::Root(f) => TransientTask::Root(f), + TransientTaskType::Once(f) => TransientTask::Once(Mutex::new(Some(f))), + }), + ); + { + let mut task = self.storage.access_mut(task_id); + task.add(CachedDataItem::AggregationNumber { + value: AggregationNumber { + base: u32::MAX, + distance: 0, + effective: u32::MAX, + }, + }); + task.add(CachedDataItem::AggregateRoot { + value: RootState::new(root_type), + }); + task.add(CachedDataItem::new_scheduled(move || match root_type { + ActiveType::RootTask => "Root Task".to_string(), + ActiveType::OnceTask => "Once Task".to_string(), + _ => unreachable!(), + })); + } + task_id + } + fn dispose_root_task(&self, _: TaskId, _: &dyn TurboTasksBackendApi) { + todo!() + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs new file mode 100644 index 0000000000000..b019caf3090e8 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/aggregation_update.rs @@ -0,0 +1,882 @@ +use std::{cmp::max, collections::VecDeque, num::NonZeroU32}; + +use serde::{Deserialize, Serialize}; +use turbo_tasks::TaskId; + +use crate::{ + backend::{ + operation::{ExecuteContext, Operation, TaskGuard}, + storage::{get, get_many, iter_many, remove, update, update_count}, + }, + data::{ActiveType, AggregationNumber, CachedDataItem, CachedDataItemKey, RootState}, +}; + +const LEAF_NUMBER: u32 = 16; + +pub fn is_aggregating_node(aggregation_number: u32) -> bool { + aggregation_number >= LEAF_NUMBER +} + +pub fn is_root_node(aggregation_number: u32) -> bool { + aggregation_number == u32::MAX +} + +fn get_followers_with_aggregation_number( + task: &TaskGuard<'_>, + aggregation_number: u32, +) -> Vec { + if is_aggregating_node(aggregation_number) { + get_many!(task, Follower { task } count if count > 0 => task) + } else { + get_many!(task, Child { task } => task) + } +} + +fn get_followers(task: &TaskGuard<'_>) -> Vec { + get_followers_with_aggregation_number(task, get_aggregation_number(task)) +} + +pub fn get_uppers(task: &TaskGuard<'_>) -> Vec { + get_many!(task, Upper { task } count if count > 0 => task) +} + +fn iter_uppers<'a>(task: &'a TaskGuard<'a>) -> impl Iterator + 'a { + iter_many!(task, Upper { task } count if count > 0 => task) +} + +pub fn get_aggregation_number(task: &TaskGuard<'_>) -> u32 { + get!(task, AggregationNumber) + .map(|a| a.effective) + .unwrap_or_default() +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub enum AggregationUpdateJob { + UpdateAggregationNumber { + task_id: TaskId, + base_aggregation_number: u32, + distance: Option, + }, + InnerOfUppersHasNewFollower { + upper_ids: Vec, + new_follower_id: TaskId, + }, + InnerOfUpperHasNewFollowers { + upper_id: TaskId, + new_follower_ids: Vec, + }, + InnerOfUppersHasNewFollowers { + upper_ids: Vec, + new_follower_ids: Vec, + }, + InnerLostFollower { + upper_ids: Vec, + lost_follower_id: TaskId, + }, + InnerLostFollowers { + upper_ids: Vec, + lost_follower_ids: Vec, + }, + AggregatedDataUpdate { + upper_ids: Vec, + update: AggregatedDataUpdate, + }, + FindAndScheduleDirty { + task_ids: Vec, + }, + BalanceEdge { + upper_id: TaskId, + task_id: TaskId, + }, +} + +impl AggregationUpdateJob { + pub fn data_update( + task: &mut TaskGuard<'_>, + update: AggregatedDataUpdate, + ) -> Option { + let upper_ids: Vec<_> = get_uppers(task); + if !upper_ids.is_empty() { + Some(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: update.clone(), + }) + } else { + None + } + } +} + +#[derive(Default, Serialize, Deserialize, Clone, Debug)] +pub struct AggregatedDataUpdate { + dirty_container_update: Option<(TaskId, i32)>, + // TODO collectibles +} + +impl AggregatedDataUpdate { + fn from_task(task: &mut TaskGuard<'_>) -> Self { + let aggregation = get_aggregation_number(task); + let mut dirty = get!(task, Dirty).is_some(); + if is_aggregating_node(aggregation) { + let dirty_container_count = get!(task, AggregatedDirtyContainerCount) + .copied() + .unwrap_or(0); + if dirty_container_count > 0 { + dirty = true; + } + } + if dirty { + Self::dirty_container(task.id()) + } else { + Self::default() + } + } + + fn invert(mut self) -> Self { + if let Some((_, value)) = self.dirty_container_update.as_mut() { + *value = -*value; + } + self + } + + fn apply( + &self, + task: &mut TaskGuard<'_>, + queue: &mut AggregationUpdateQueue, + ) -> AggregatedDataUpdate { + let Self { + dirty_container_update, + } = self; + let mut result = Self::default(); + if let Some((dirty_container_id, count)) = dirty_container_update { + let mut added = false; + let mut removed = false; + update!( + task, + AggregatedDirtyContainer { + task: *dirty_container_id + }, + |old: Option| { + let old = old.unwrap_or(0); + let new = old + *count; + if old <= 0 && new > 0 { + added = true; + } else if old > 0 && new <= 0 { + removed = true; + } + (new != 0).then_some(new) + } + ); + let mut count_update = 0; + if added { + if task.has_key(&CachedDataItemKey::AggregateRoot {}) { + queue.push(AggregationUpdateJob::FindAndScheduleDirty { + task_ids: vec![*dirty_container_id], + }) + } + count_update += 1; + } else if removed { + count_update -= 1; + } + let dirty = task.has_key(&CachedDataItemKey::Dirty {}); + let task_id = task.id(); + update!(task, AggregatedDirtyContainerCount, |old: Option| { + let old = old.unwrap_or(0); + let new = old + count_update; + if !dirty { + if old <= 0 && new > 0 { + result.dirty_container_update = Some((task_id, 1)); + } else if old > 0 && new <= 0 { + result.dirty_container_update = Some((task_id, -1)); + } + } + (new != 0).then_some(new) + }); + if let Some((_, count)) = result.dirty_container_update.as_ref() { + if let Some(root_state) = get!(task, AggregateRoot) { + if *count < 0 { + root_state.all_clean_event.notify(usize::MAX); + if matches!(root_state.ty, ActiveType::CachedActiveUntilClean) { + task.remove(&CachedDataItemKey::AggregateRoot {}); + } + } + } + } + } + result + } + + fn is_empty(&self) -> bool { + let Self { + dirty_container_update, + } = self; + dirty_container_update.is_none() + } + + pub fn dirty_container(task_id: TaskId) -> Self { + Self { + dirty_container_update: Some((task_id, 1)), + } + } + + pub fn no_longer_dirty_container(task_id: TaskId) -> Self { + Self { + dirty_container_update: Some((task_id, -1)), + } + } +} + +#[derive(Default, Serialize, Deserialize, Clone)] +pub struct AggregationUpdateQueue { + jobs: VecDeque, +} + +impl AggregationUpdateQueue { + pub fn new() -> Self { + Self { + jobs: VecDeque::with_capacity(8), + } + } + + pub fn is_empty(&self) -> bool { + self.jobs.is_empty() + } + + pub fn push(&mut self, job: AggregationUpdateJob) { + self.jobs.push_back(job); + } + + pub fn extend(&mut self, jobs: impl IntoIterator) { + self.jobs.extend(jobs); + } + + pub fn run(job: AggregationUpdateJob, ctx: &ExecuteContext<'_>) { + let mut queue = Self::new(); + queue.push(job); + queue.execute(ctx); + } + + pub fn process(&mut self, ctx: &ExecuteContext<'_>) -> bool { + if let Some(job) = self.jobs.pop_front() { + match job { + AggregationUpdateJob::UpdateAggregationNumber { + task_id, + base_aggregation_number, + distance: base_effective_distance, + } => { + self.update_aggregation_number( + ctx, + task_id, + base_effective_distance, + base_aggregation_number, + ); + } + AggregationUpdateJob::InnerOfUppersHasNewFollowers { + mut upper_ids, + mut new_follower_ids, + } => { + if upper_ids.len() > new_follower_ids.len() { + if let Some(new_follower_id) = new_follower_ids.pop() { + if new_follower_ids.is_empty() { + self.jobs.push_front( + AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids, + new_follower_id, + }, + ); + } else { + self.jobs.push_front( + AggregationUpdateJob::InnerOfUppersHasNewFollowers { + upper_ids: upper_ids.clone(), + new_follower_ids, + }, + ); + self.jobs.push_front( + AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids, + new_follower_id, + }, + ); + } + } + } else { + #[allow(clippy::collapsible_if, reason = "readablility")] + if let Some(upper_id) = upper_ids.pop() { + if upper_ids.is_empty() { + self.jobs.push_front( + AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids, + }, + ); + } else { + self.jobs.push_front( + AggregationUpdateJob::InnerOfUppersHasNewFollowers { + upper_ids, + new_follower_ids: new_follower_ids.clone(), + }, + ); + self.jobs.push_front( + AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids, + }, + ); + } + } + } + } + AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids, + new_follower_id, + } => { + self.inner_of_uppers_has_new_follower(ctx, new_follower_id, upper_ids); + } + AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids, + } => { + self.inner_of_upper_has_new_followers(ctx, new_follower_ids, upper_id); + } + AggregationUpdateJob::InnerLostFollowers { + upper_ids, + mut lost_follower_ids, + } => { + if let Some(lost_follower_id) = lost_follower_ids.pop() { + if lost_follower_ids.is_empty() { + self.jobs + .push_front(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id, + }); + } else { + self.jobs + .push_front(AggregationUpdateJob::InnerLostFollowers { + upper_ids: upper_ids.clone(), + lost_follower_ids, + }); + self.jobs + .push_front(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id, + }); + } + } + } + AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id, + } => { + self.inner_lost_follower(ctx, lost_follower_id, upper_ids); + } + AggregationUpdateJob::AggregatedDataUpdate { upper_ids, update } => { + self.aggregated_data_update(upper_ids, ctx, update); + } + AggregationUpdateJob::FindAndScheduleDirty { task_ids } => { + self.find_and_schedule_dirty(task_ids, ctx); + } + AggregationUpdateJob::BalanceEdge { upper_id, task_id } => { + self.balance_edge(ctx, upper_id, task_id); + } + } + } + + self.jobs.is_empty() + } + + fn balance_edge(&mut self, ctx: &ExecuteContext, upper_id: TaskId, task_id: TaskId) { + let (mut upper, mut task) = ctx.task_pair(upper_id, task_id); + let upper_aggregation_number = get_aggregation_number(&upper); + let task_aggregation_number = get_aggregation_number(&task); + + let should_be_inner = is_root_node(upper_aggregation_number) + || upper_aggregation_number > task_aggregation_number; + let should_be_follower = task_aggregation_number > upper_aggregation_number; + + if should_be_inner { + // remove all follower edges + let count = remove!(upper, Follower { task: task_id }).unwrap_or_default(); + match count.cmp(&0) { + std::cmp::Ordering::Less => upper.add_new(CachedDataItem::Follower { + task: task_id, + value: count, + }), + std::cmp::Ordering::Greater => { + let upper_ids = get_uppers(&upper); + + // Add the same amount of upper edges + if update_count!(task, Upper { task: upper_id }, count) { + // When this is a new inner node, update aggregated data and + // followers + let data = AggregatedDataUpdate::from_task(&mut task); + let followers = get_followers(&task); + let diff = data.apply(&mut upper, self); + + if !upper_ids.is_empty() && !diff.is_empty() { + // Notify uppers about changed aggregated data + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids: upper_ids.clone(), + update: diff, + }); + } + if !followers.is_empty() { + self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids: followers, + }); + } + } + + // notify uppers about lost follower + if !upper_ids.is_empty() { + self.push(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id: task_id, + }); + } + } + std::cmp::Ordering::Equal => {} + } + } else if should_be_follower { + // Remove the upper edge + let count = remove!(task, Upper { task: upper_id }).unwrap_or_default(); + if count > 0 { + let upper_ids: Vec<_> = get_uppers(&upper); + + // Add the same amount of follower edges + if update_count!(upper, Follower { task: task_id }, count) { + // notify uppers about new follower + if !upper_ids.is_empty() { + self.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids: upper_ids.clone(), + new_follower_id: task_id, + }); + } + } + + // Since this is no longer an inner node, update the aggregated data and + // followers + let data = AggregatedDataUpdate::from_task(&mut task).invert(); + let followers = get_followers(&task); + let diff = data.apply(&mut upper, self); + if !upper_ids.is_empty() && !diff.is_empty() { + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids: upper_ids.clone(), + update: diff, + }); + } + if !followers.is_empty() { + self.push(AggregationUpdateJob::InnerLostFollowers { + upper_ids: vec![upper_id], + lost_follower_ids: followers, + }); + } + } + } else { + // both nodes have the same aggregation number + // We need to change the aggregation number of the task + let current = get!(task, AggregationNumber).copied().unwrap_or_default(); + self.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id, + base_aggregation_number: current.base + 1, + distance: None, + }); + } + } + + fn find_and_schedule_dirty(&mut self, mut task_ids: Vec, ctx: &ExecuteContext) { + let popped = task_ids.pop(); + if !task_ids.is_empty() { + self.push(AggregationUpdateJob::FindAndScheduleDirty { task_ids }); + } + if let Some(task_id) = popped { + let mut task = ctx.task(task_id); + #[allow(clippy::collapsible_if, reason = "readablility")] + if task.has_key(&CachedDataItemKey::Dirty {}) { + let description = ctx.backend.get_task_desc_fn(task_id); + if task.add(CachedDataItem::new_scheduled(description)) { + ctx.turbo_tasks.schedule(task_id); + } + } + if is_aggregating_node(get_aggregation_number(&task)) { + if !task.has_key(&CachedDataItemKey::AggregateRoot {}) { + task.insert(CachedDataItem::AggregateRoot { + value: RootState::new(ActiveType::CachedActiveUntilClean), + }); + } + let dirty_containers: Vec<_> = + get_many!(task, AggregatedDirtyContainer { task } count if count > 0 => task); + if !dirty_containers.is_empty() { + self.push(AggregationUpdateJob::FindAndScheduleDirty { + task_ids: dirty_containers, + }); + } + } + } + } + + fn aggregated_data_update( + &mut self, + upper_ids: Vec, + ctx: &ExecuteContext, + update: AggregatedDataUpdate, + ) { + for upper_id in upper_ids { + let mut upper = ctx.task(upper_id); + let diff = update.apply(&mut upper, self); + if !diff.is_empty() { + let upper_ids = get_uppers(&upper); + if !upper_ids.is_empty() { + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: diff, + }); + } + } + } + } + + fn inner_lost_follower( + &mut self, + ctx: &ExecuteContext, + lost_follower_id: TaskId, + mut upper_ids: Vec, + ) { + let mut follower = ctx.task(lost_follower_id); + let mut follower_in_upper_ids = Vec::new(); + upper_ids.retain(|&upper_id| { + let mut keep_upper = false; + update!(follower, Upper { task: upper_id }, |old| { + let Some(old) = old else { + follower_in_upper_ids.push(upper_id); + return None; + }; + if old < 0 { + follower_in_upper_ids.push(upper_id); + return Some(old); + } + if old == 1 { + keep_upper = true; + return None; + } + Some(old - 1) + }); + keep_upper + }); + if !upper_ids.is_empty() { + let data = AggregatedDataUpdate::from_task(&mut follower).invert(); + let followers: Vec<_> = get_followers(&follower); + drop(follower); + + if !data.is_empty() { + for upper_id in upper_ids.iter() { + // remove data from upper + let mut upper = ctx.task(*upper_id); + let diff = data.apply(&mut upper, self); + if !diff.is_empty() { + let upper_ids = get_uppers(&upper); + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: diff, + }) + } + } + } + if !followers.is_empty() { + self.push(AggregationUpdateJob::InnerLostFollowers { + upper_ids: upper_ids.clone(), + lost_follower_ids: followers, + }); + } + } else { + drop(follower); + } + + for upper_id in follower_in_upper_ids { + let mut upper = ctx.task(upper_id); + if update_count!( + upper, + Follower { + task: lost_follower_id + }, + -1 + ) { + let upper_ids = get_uppers(&upper); + self.push(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id, + }) + } + } + } + + fn inner_of_uppers_has_new_follower( + &mut self, + ctx: &ExecuteContext, + new_follower_id: TaskId, + mut upper_ids: Vec, + ) { + let follower_aggregation_number = { + let follower = ctx.task(new_follower_id); + get_aggregation_number(&follower) + }; + let mut upper_ids_as_follower = Vec::new(); + upper_ids.retain(|&upper_id| { + let upper = ctx.task(upper_id); + // decide if it should be an inner or follower + let upper_aggregation_number = get_aggregation_number(&upper); + + if !is_root_node(upper_aggregation_number) + && upper_aggregation_number <= follower_aggregation_number + { + // It's a follower of the upper node + upper_ids_as_follower.push(upper_id); + false + } else { + // It's an inner node, continue with the list + true + } + }); + if !upper_ids.is_empty() { + let mut follower = ctx.task(new_follower_id); + upper_ids.retain(|&upper_id| { + if update_count!(follower, Upper { task: upper_id }, 1) { + // It's a new upper + true + } else { + // It's already an upper + false + } + }); + if !upper_ids.is_empty() { + let data = AggregatedDataUpdate::from_task(&mut follower); + let children: Vec<_> = get_followers(&follower); + drop(follower); + + if !data.is_empty() { + for upper_id in upper_ids.iter() { + // add data to upper + let mut upper = ctx.task(*upper_id); + let diff = data.apply(&mut upper, self); + if !diff.is_empty() { + let upper_ids = get_uppers(&upper); + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: diff, + }) + } + } + } + if !children.is_empty() { + self.push(AggregationUpdateJob::InnerOfUppersHasNewFollowers { + upper_ids: upper_ids.clone(), + new_follower_ids: children, + }); + } + } else { + drop(follower); + } + } + upper_ids_as_follower.retain(|&upper_id| { + let mut upper = ctx.task(upper_id); + update_count!( + upper, + Follower { + task: new_follower_id + }, + 1 + ) + }); + if !upper_ids_as_follower.is_empty() { + self.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids: upper_ids_as_follower, + new_follower_id, + }); + } + } + + fn inner_of_upper_has_new_followers( + &mut self, + ctx: &ExecuteContext, + new_follower_ids: Vec, + upper_id: TaskId, + ) { + let mut followers_with_aggregation_number = new_follower_ids + .into_iter() + .map(|new_follower_id| { + let follower = ctx.task(new_follower_id); + (new_follower_id, get_aggregation_number(&follower)) + }) + .collect::>(); + + let mut followers_of_upper = Vec::new(); + { + let upper = ctx.task(upper_id); + // decide if it should be an inner or follower + let upper_aggregation_number = get_aggregation_number(&upper); + + if !is_root_node(upper_aggregation_number) { + followers_with_aggregation_number.retain( + |(follower_id, follower_aggregation_number)| { + if upper_aggregation_number <= *follower_aggregation_number { + // It's a follower of the upper node + followers_of_upper.push(*follower_id); + false + } else { + // It's an inner node, continue with the list + true + } + }, + ); + } + } + + let mut upper_data_updates = Vec::new(); + let mut upper_new_followers = Vec::new(); + for (follower_id, _) in followers_with_aggregation_number { + let mut follower = ctx.task(follower_id); + if update_count!(follower, Upper { task: upper_id }, 1) { + // It's a new upper + let data = AggregatedDataUpdate::from_task(&mut follower); + let children: Vec<_> = get_followers(&follower); + drop(follower); + + if !data.is_empty() { + upper_data_updates.push(data); + } + upper_new_followers.extend(children); + } + } + if !upper_new_followers.is_empty() { + self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids: upper_new_followers, + }); + } + if !upper_data_updates.is_empty() { + // add data to upper + let mut upper = ctx.task(upper_id); + let diffs = upper_data_updates + .into_iter() + .filter_map(|data| { + let diff = data.apply(&mut upper, self); + (!diff.is_empty()).then_some(diff) + }) + .collect::>(); + let mut iter = diffs.into_iter(); + if let Some(mut diff) = iter.next() { + let upper_ids = get_uppers(&upper); + drop(upper); + // TODO merge AggregatedDataUpdate + for next_diff in iter { + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids: upper_ids.clone(), + update: diff, + }); + diff = next_diff; + } + self.push(AggregationUpdateJob::AggregatedDataUpdate { + upper_ids, + update: diff, + }); + } + } + if !followers_of_upper.is_empty() { + let mut upper = ctx.task(upper_id); + followers_of_upper + .retain(|follower_id| update_count!(upper, Follower { task: *follower_id }, 1)); + if !followers_of_upper.is_empty() { + self.push(AggregationUpdateJob::InnerOfUpperHasNewFollowers { + upper_id, + new_follower_ids: followers_of_upper, + }); + } + } + } + + fn update_aggregation_number( + &mut self, + ctx: &ExecuteContext, + task_id: TaskId, + base_effective_distance: Option>, + base_aggregation_number: u32, + ) { + let mut task = ctx.task(task_id); + let current = get!(task, AggregationNumber).copied().unwrap_or_default(); + // The wanted new distance is either the provided one or the old distance + let distance = base_effective_distance.map_or(current.distance, |d| d.get()); + // The base aggregation number can only increase + let base_aggregation_number = max(current.base, base_aggregation_number); + let old = current.effective; + // The new target effecive aggregation number is base + distance + let aggregation_number = base_aggregation_number.saturating_add(distance); + if old >= aggregation_number { + if base_aggregation_number != current.base && distance != current.distance { + task.insert(CachedDataItem::AggregationNumber { + value: AggregationNumber { + base: base_aggregation_number, + distance, + effective: old, + }, + }); + } + } else { + task.insert(CachedDataItem::AggregationNumber { + value: AggregationNumber { + base: base_aggregation_number, + distance, + effective: aggregation_number, + }, + }); + + if !is_aggregating_node(old) && is_aggregating_node(aggregation_number) { + // When converted from leaf to aggregating node, all children become + // followers + let children: Vec<_> = get_many!(task, Child { task } => task); + for child_id in children { + task.add_new(CachedDataItem::Follower { + task: child_id, + value: 1, + }); + } + } + + if is_aggregating_node(aggregation_number) { + // followers might become inner nodes when the aggregation number is + // increased + let followers = iter_many!(task, Follower { task } count if count > 0 => task); + for follower_id in followers { + self.push(AggregationUpdateJob::BalanceEdge { + upper_id: task_id, + task_id: follower_id, + }); + } + let uppers = iter_uppers(&task); + for upper_id in uppers { + self.push(AggregationUpdateJob::BalanceEdge { upper_id, task_id }); + } + } else { + let children = iter_many!(task, Child { task } => task); + for child_id in children { + self.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id: child_id, + base_aggregation_number: aggregation_number + 1, + distance: None, + }); + } + } + } + } +} + +impl Operation for AggregationUpdateQueue { + fn execute(mut self, ctx: &ExecuteContext<'_>) { + let _span = tracing::trace_span!("aggregation update queue").entered(); + loop { + ctx.operation_suspend_point(&self); + if self.process(ctx) { + return; + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs new file mode 100644 index 0000000000000..66a65ea95acb4 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/cleanup_old_edges.rs @@ -0,0 +1,143 @@ +use std::mem::take; + +use serde::{Deserialize, Serialize}; +use turbo_tasks::TaskId; + +use crate::{ + backend::operation::{ + aggregation_update::{ + get_aggregation_number, get_uppers, is_aggregating_node, AggregationUpdateJob, + AggregationUpdateQueue, + }, + invalidate::make_task_dirty, + ExecuteContext, Operation, + }, + data::{CachedDataItemKey, CellRef}, +}; + +#[derive(Serialize, Deserialize, Clone, Default)] +pub enum CleanupOldEdgesOperation { + RemoveEdges { + task_id: TaskId, + outdated: Vec, + queue: AggregationUpdateQueue, + }, + AggregationUpdate { + queue: AggregationUpdateQueue, + }, + #[default] + Done, + // TODO Add aggregated edge +} + +#[derive(Serialize, Deserialize, Clone)] +pub enum OutdatedEdge { + Child(TaskId), + CellDependency(CellRef), + OutputDependency(TaskId), + RemovedCellDependent(TaskId), +} + +impl CleanupOldEdgesOperation { + pub fn run( + task_id: TaskId, + outdated: Vec, + data_update: Option, + ctx: ExecuteContext<'_>, + ) { + let mut queue = AggregationUpdateQueue::new(); + queue.extend(data_update); + CleanupOldEdgesOperation::RemoveEdges { + task_id, + outdated, + queue, + } + .execute(&ctx); + } +} + +impl Operation for CleanupOldEdgesOperation { + fn execute(mut self, ctx: &ExecuteContext<'_>) { + loop { + ctx.operation_suspend_point(&self); + match self { + CleanupOldEdgesOperation::RemoveEdges { + task_id, + ref mut outdated, + ref mut queue, + } => { + if let Some(edge) = outdated.pop() { + match edge { + OutdatedEdge::Child(child_id) => { + let mut task = ctx.task(task_id); + task.remove(&CachedDataItemKey::Child { task: child_id }); + if is_aggregating_node(get_aggregation_number(&task)) { + queue.push(AggregationUpdateJob::InnerLostFollower { + upper_ids: vec![task_id], + lost_follower_id: child_id, + }); + } else { + let upper_ids = get_uppers(&task); + queue.push(AggregationUpdateJob::InnerLostFollower { + upper_ids, + lost_follower_id: child_id, + }); + } + } + OutdatedEdge::CellDependency(CellRef { + task: cell_task_id, + cell, + }) => { + { + let mut task = ctx.task(cell_task_id); + task.remove(&CachedDataItemKey::CellDependent { + cell, + task: task_id, + }); + } + { + let mut task = ctx.task(task_id); + task.remove(&CachedDataItemKey::CellDependency { + target: CellRef { + task: cell_task_id, + cell, + }, + }); + } + } + OutdatedEdge::OutputDependency(output_task_id) => { + { + let mut task = ctx.task(output_task_id); + task.remove(&CachedDataItemKey::OutputDependent { + task: task_id, + }); + } + { + let mut task = ctx.task(task_id); + task.remove(&CachedDataItemKey::OutputDependency { + target: output_task_id, + }); + } + } + OutdatedEdge::RemovedCellDependent(task_id) => { + make_task_dirty(task_id, queue, ctx); + } + } + } + + if outdated.is_empty() { + self = CleanupOldEdgesOperation::AggregationUpdate { queue: take(queue) }; + } + } + CleanupOldEdgesOperation::AggregationUpdate { ref mut queue } => { + if queue.process(ctx) { + self = CleanupOldEdgesOperation::Done; + } + } + CleanupOldEdgesOperation::Done => { + return; + } + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs new file mode 100644 index 0000000000000..98b07e9978cdf --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/connect_child.rs @@ -0,0 +1,149 @@ +use std::{cmp::max, num::NonZeroU32}; + +use serde::{Deserialize, Serialize}; +use turbo_tasks::TaskId; + +use crate::{ + backend::{ + operation::{ + aggregation_update::{ + get_uppers, is_aggregating_node, AggregationUpdateJob, AggregationUpdateQueue, + }, + is_root_node, ExecuteContext, Operation, + }, + storage::get, + }, + data::{CachedDataItem, CachedDataItemIndex, CachedDataItemKey}, +}; + +const AGGREGATION_NUMBER_BUFFER_SPACE: u32 = 2; + +#[derive(Serialize, Deserialize, Clone, Default)] +pub enum ConnectChildOperation { + UpdateAggregation { + aggregation_update: AggregationUpdateQueue, + }, + #[default] + Done, +} + +impl ConnectChildOperation { + pub fn run(parent_task_id: TaskId, child_task_id: TaskId, ctx: ExecuteContext<'_>) { + let mut parent_task = ctx.task(parent_task_id); + parent_task.remove(&CachedDataItemKey::OutdatedChild { + task: child_task_id, + }); + if parent_task.add(CachedDataItem::Child { + task: child_task_id, + value: (), + }) { + // When task is added to a AggregateRoot is need to be scheduled, + // indirect connections are handled by the aggregation update. + let mut should_schedule = false; + if parent_task.has_key(&CachedDataItemKey::AggregateRoot {}) { + should_schedule = true; + } + // Update the task aggregation + let mut queue = AggregationUpdateQueue::new(); + + // Compute new parent aggregation number based on the number of children + let current_parent_aggregation = get!(parent_task, AggregationNumber) + .copied() + .unwrap_or_default(); + let parent_aggregation = if is_root_node(current_parent_aggregation.base) { + u32::MAX + } else { + let children_count = parent_task + .iter(CachedDataItemIndex::Children) + .filter(|(k, _)| { + matches!( + *k, + CachedDataItemKey::Child { .. } + | CachedDataItemKey::OutdatedChild { .. } + ) + }) + .count(); + let target_distance = children_count.ilog2() * 2; + let parent_aggregation = current_parent_aggregation + .base + .saturating_add(target_distance); + if target_distance != current_parent_aggregation.distance { + queue.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id: parent_task_id, + base_aggregation_number: 0, + distance: NonZeroU32::new(target_distance), + }) + } + max(current_parent_aggregation.effective, parent_aggregation) + }; + + // Update child aggregation number based on parent aggregation number + let is_aggregating_node = is_aggregating_node(parent_aggregation); + if parent_task_id.is_transient() && !child_task_id.is_transient() { + queue.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id: child_task_id, + base_aggregation_number: u32::MAX, + distance: None, + }); + } else if !is_aggregating_node { + queue.push(AggregationUpdateJob::UpdateAggregationNumber { + task_id: child_task_id, + base_aggregation_number: parent_aggregation + .saturating_add(AGGREGATION_NUMBER_BUFFER_SPACE), + distance: None, + }); + } + if is_aggregating_node { + queue.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids: vec![parent_task_id], + new_follower_id: child_task_id, + }); + } else { + let upper_ids = get_uppers(&parent_task); + queue.push(AggregationUpdateJob::InnerOfUppersHasNewFollower { + upper_ids, + new_follower_id: child_task_id, + }); + } + drop(parent_task); + + { + let mut task = ctx.task(child_task_id); + should_schedule = should_schedule || !task.has_key(&CachedDataItemKey::Output {}); + if should_schedule { + let description = ctx.backend.get_task_desc_fn(child_task_id); + should_schedule = task.add(CachedDataItem::new_scheduled(description)); + } + } + if should_schedule { + ctx.schedule(child_task_id); + } + + ConnectChildOperation::UpdateAggregation { + aggregation_update: queue, + } + .execute(&ctx); + } + } +} + +impl Operation for ConnectChildOperation { + fn execute(mut self, ctx: &ExecuteContext<'_>) { + loop { + ctx.operation_suspend_point(&self); + match self { + ConnectChildOperation::UpdateAggregation { + ref mut aggregation_update, + } => { + if aggregation_update.process(ctx) { + self = ConnectChildOperation::Done + } + } + + ConnectChildOperation::Done => { + return; + } + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs new file mode 100644 index 0000000000000..71c58a97ec92d --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/invalidate.rs @@ -0,0 +1,93 @@ +use serde::{Deserialize, Serialize}; +use smallvec::SmallVec; +use turbo_tasks::TaskId; + +use crate::{ + backend::{ + operation::{ + aggregation_update::{ + AggregatedDataUpdate, AggregationUpdateJob, AggregationUpdateQueue, + }, + ExecuteContext, Operation, + }, + storage::get, + }, + data::{CachedDataItem, CachedDataItemKey}, +}; + +#[derive(Serialize, Deserialize, Clone, Default)] +pub enum InvalidateOperation { + // TODO DetermineActiveness + MakeDirty { + task_ids: SmallVec<[TaskId; 4]>, + }, + AggregationUpdate { + queue: AggregationUpdateQueue, + }, + // TODO Add to dirty tasks list + #[default] + Done, +} + +impl InvalidateOperation { + pub fn run(task_ids: SmallVec<[TaskId; 4]>, ctx: ExecuteContext<'_>) { + InvalidateOperation::MakeDirty { task_ids }.execute(&ctx) + } +} + +impl Operation for InvalidateOperation { + fn execute(mut self, ctx: &ExecuteContext<'_>) { + loop { + ctx.operation_suspend_point(&self); + match self { + InvalidateOperation::MakeDirty { task_ids } => { + let mut queue = AggregationUpdateQueue::new(); + for task_id in task_ids { + make_task_dirty(task_id, &mut queue, ctx); + } + if queue.is_empty() { + self = InvalidateOperation::Done + } else { + self = InvalidateOperation::AggregationUpdate { queue } + } + continue; + } + InvalidateOperation::AggregationUpdate { ref mut queue } => { + if queue.process(ctx) { + self = InvalidateOperation::Done + } + } + InvalidateOperation::Done => { + return; + } + } + } + } +} + +pub fn make_task_dirty(task_id: TaskId, queue: &mut AggregationUpdateQueue, ctx: &ExecuteContext) { + if ctx.is_once_task(task_id) { + return; + } + + let mut task = ctx.task(task_id); + + if task.add(CachedDataItem::Dirty { value: () }) { + let dirty_container = get!(task, AggregatedDirtyContainerCount) + .copied() + .unwrap_or_default(); + if dirty_container == 0 { + queue.extend(AggregationUpdateJob::data_update( + &mut task, + AggregatedDataUpdate::dirty_container(task_id), + )); + } + let root = task.has_key(&CachedDataItemKey::AggregateRoot {}); + if root { + let description = ctx.backend.get_task_desc_fn(task_id); + if task.add(CachedDataItem::new_scheduled(description)) { + ctx.schedule(task_id); + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs new file mode 100644 index 0000000000000..f1f0952861d8a --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/mod.rs @@ -0,0 +1,360 @@ +mod aggregation_update; +mod cleanup_old_edges; +mod connect_child; +mod invalidate; +mod update_cell; +mod update_output; + +use std::{ + fmt::{Debug, Formatter}, + mem::take, +}; + +use serde::{Deserialize, Serialize}; +use turbo_tasks::{KeyValuePair, TaskId, TurboTasksBackendApi}; + +use crate::{ + backend::{storage::StorageWriteGuard, OperationGuard, TransientTask, TurboTasksBackend}, + data::{ + CachedDataItem, CachedDataItemIndex, CachedDataItemKey, CachedDataItemValue, + CachedDataUpdate, + }, +}; + +pub trait Operation: + Serialize + + for<'de> Deserialize<'de> + + Default + + TryFrom + + Into +{ + fn execute(self, ctx: &ExecuteContext<'_>); +} + +pub struct ExecuteContext<'a> { + backend: &'a TurboTasksBackend, + turbo_tasks: &'a dyn TurboTasksBackendApi, + _operation_guard: Option>, + parent: Option<(&'a AnyOperation, &'a ExecuteContext<'a>)>, +} + +impl<'a> ExecuteContext<'a> { + pub fn new( + backend: &'a TurboTasksBackend, + turbo_tasks: &'a dyn TurboTasksBackendApi, + ) -> Self { + Self { + backend, + turbo_tasks, + _operation_guard: Some(backend.start_operation()), + parent: None, + } + } + + pub fn task(&self, task_id: TaskId) -> TaskGuard<'a> { + TaskGuard { + task: self.backend.storage.access_mut(task_id), + task_id, + backend: self.backend, + } + } + + pub fn is_once_task(&self, task_id: TaskId) -> bool { + if !task_id.is_transient() { + return false; + } + if let Some(ty) = self.backend.transient_tasks.get(&task_id) { + matches!(**ty, TransientTask::Once(_)) + } else { + false + } + } + + pub fn task_pair(&self, task_id1: TaskId, task_id2: TaskId) -> (TaskGuard<'a>, TaskGuard<'a>) { + let (task1, task2) = self.backend.storage.access_pair_mut(task_id1, task_id2); + ( + TaskGuard { + task: task1, + task_id: task_id1, + backend: self.backend, + }, + TaskGuard { + task: task2, + task_id: task_id2, + backend: self.backend, + }, + ) + } + + pub fn schedule(&self, task_id: TaskId) { + self.turbo_tasks.schedule(task_id); + } + + pub fn operation_suspend_point>(&self, op: &T) { + if self.parent.is_some() { + self.backend.operation_suspend_point(|| { + let mut nested = Vec::new(); + nested.push(op.clone().into()); + let mut cur = self; + while let Some((op, parent_ctx)) = cur.parent { + nested.push(op.clone()); + cur = parent_ctx; + } + AnyOperation::Nested(nested) + }); + } else { + self.backend.operation_suspend_point(|| op.clone().into()); + } + } + + pub fn suspending_requested(&self) -> bool { + self.backend.suspending_requested() + } + + pub fn run_operation( + &self, + parent_op_ref: &mut impl Operation, + run: impl FnOnce(ExecuteContext<'_>), + ) { + let parent_op = take(parent_op_ref); + let parent_op: AnyOperation = parent_op.into(); + let inner_ctx = ExecuteContext { + backend: self.backend, + turbo_tasks: self.turbo_tasks, + _operation_guard: None, + parent: Some((&parent_op, self)), + }; + run(inner_ctx); + *parent_op_ref = parent_op.try_into().unwrap(); + } +} + +pub struct TaskGuard<'a> { + task_id: TaskId, + task: StorageWriteGuard<'a, TaskId, CachedDataItem>, + backend: &'a TurboTasksBackend, +} + +impl<'a> Debug for TaskGuard<'a> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let mut d = f.debug_struct("TaskGuard"); + d.field("task_id", &self.task_id); + if let Some(task_type) = self.backend.task_cache.lookup_reverse(&self.task_id) { + d.field("task_type", &task_type); + }; + for (key, value) in self.task.iter_all() { + d.field(&format!("{:?}", key), &value); + } + d.finish() + } +} + +impl<'a> TaskGuard<'a> { + pub fn id(&self) -> TaskId { + self.task_id + } + + #[must_use] + pub fn add(&mut self, item: CachedDataItem) -> bool { + if !item.is_persistent() { + self.task.add(item) + } else if self.task.add(item.clone()) { + let (key, value) = item.into_key_and_value(); + // TODO task.persistance_state.add_persisting_item(); + self.backend + .persisted_storage_log + .lock() + .push(CachedDataUpdate { + key, + task: self.task_id, + value: Some(value), + }); + true + } else { + false + } + } + + pub fn add_new(&mut self, item: CachedDataItem) { + let added = self.add(item); + assert!(added, "Item already exists"); + } + + pub fn insert(&mut self, item: CachedDataItem) -> Option { + let (key, value) = item.into_key_and_value(); + if !key.is_persistent() { + self.task + .insert(CachedDataItem::from_key_and_value(key, value)) + } else if value.is_persistent() { + let old = self.task.insert(CachedDataItem::from_key_and_value( + key.clone(), + value.clone(), + )); + // TODO task.persistance_state.add_persisting_item(); + self.backend + .persisted_storage_log + .lock() + .push(CachedDataUpdate { + key, + task: self.task_id, + value: Some(value), + }); + old + } else { + let item = CachedDataItem::from_key_and_value(key.clone(), value); + if let Some(old) = self.task.insert(item) { + if old.is_persistent() { + // TODO task.persistance_state.add_persisting_item(); + self.backend + .persisted_storage_log + .lock() + .push(CachedDataUpdate { + key, + task: self.task_id, + value: None, + }); + } + Some(old) + } else { + None + } + } + } + + pub fn update( + &mut self, + key: &CachedDataItemKey, + update: impl FnOnce(Option) -> Option, + ) { + if !key.is_persistent() { + self.task.update(key, update); + return; + } + let Self { + task, + task_id, + backend, + } = self; + let mut add_persisting_item = false; + task.update(key, |old| { + let old_persistent = old.as_ref().map(|old| old.is_persistent()).unwrap_or(false); + let new = update(old); + let new_persistent = new.as_ref().map(|new| new.is_persistent()).unwrap_or(false); + + match (old_persistent, new_persistent) { + (false, false) => {} + (true, false) => { + add_persisting_item = true; + backend.persisted_storage_log.lock().push(CachedDataUpdate { + key: key.clone(), + task: *task_id, + value: None, + }); + } + (_, true) => { + add_persisting_item = true; + backend.persisted_storage_log.lock().push(CachedDataUpdate { + key: key.clone(), + task: *task_id, + value: new.clone(), + }); + } + } + + new + }); + if add_persisting_item { + // TODO task.persistance_state.add_persisting_item(); + } + } + + pub fn remove(&mut self, key: &CachedDataItemKey) -> Option { + let old_value = self.task.remove(key); + if let Some(value) = old_value { + if key.is_persistent() && value.is_persistent() { + let key = key.clone(); + // TODO task.persistance_state.add_persisting_item(); + self.backend + .persisted_storage_log + .lock() + .push(CachedDataUpdate { + key, + task: self.task_id, + value: None, + }); + } + Some(value) + } else { + None + } + } + + pub fn get(&self, key: &CachedDataItemKey) -> Option<&CachedDataItemValue> { + self.task.get(key) + } + + pub fn has_key(&self, key: &CachedDataItemKey) -> bool { + self.task.has_key(key) + } + + pub fn is_indexed(&self) -> bool { + self.task.is_indexed() + } + + pub fn iter( + &self, + index: CachedDataItemIndex, + ) -> impl Iterator { + self.task.iter(Some(index)) + } + + pub fn iter_all(&self) -> impl Iterator { + self.task.iter_all() + } +} + +macro_rules! impl_operation { + ($name:ident $type_path:path) => { + impl From<$type_path> for AnyOperation { + fn from(op: $type_path) -> Self { + AnyOperation::$name(op) + } + } + + impl TryFrom for $type_path { + type Error = (); + + fn try_from(op: AnyOperation) -> Result { + match op { + AnyOperation::$name(op) => Ok(op), + _ => Err(()), + } + } + } + + pub use $type_path; + }; +} + +#[derive(Serialize, Deserialize, Clone)] +pub enum AnyOperation { + ConnectChild(connect_child::ConnectChildOperation), + Invalidate(invalidate::InvalidateOperation), + CleanupOldEdges(cleanup_old_edges::CleanupOldEdgesOperation), + AggregationUpdate(aggregation_update::AggregationUpdateQueue), + Nested(Vec), +} + +impl_operation!(ConnectChild connect_child::ConnectChildOperation); +impl_operation!(Invalidate invalidate::InvalidateOperation); +impl_operation!(CleanupOldEdges cleanup_old_edges::CleanupOldEdgesOperation); +impl_operation!(AggregationUpdate aggregation_update::AggregationUpdateQueue); + +pub use self::{ + aggregation_update::{ + get_aggregation_number, is_root_node, AggregatedDataUpdate, AggregationUpdateJob, + }, + cleanup_old_edges::OutdatedEdge, + update_cell::UpdateCellOperation, + update_output::UpdateOutputOperation, +}; diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs new file mode 100644 index 0000000000000..b7b4e185839bc --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs @@ -0,0 +1,52 @@ +use turbo_tasks::{backend::CellContent, CellId, TaskId}; + +use crate::{ + backend::{ + operation::{ExecuteContext, InvalidateOperation}, + storage::{get_many, remove}, + }, + data::{CachedDataItem, CachedDataItemKey}, +}; + +pub struct UpdateCellOperation; + +impl UpdateCellOperation { + pub fn run(task: TaskId, cell: CellId, content: CellContent, ctx: ExecuteContext<'_>) { + let mut task = ctx.task(task); + let old_content = if let CellContent(Some(new_content)) = content { + task.insert(CachedDataItem::CellData { + cell, + value: new_content, + }) + } else { + task.remove(&CachedDataItemKey::CellData { cell }) + }; + + if let Some(in_progress) = remove!(task, InProgressCell { cell }) { + in_progress.event.notify(usize::MAX); + } + + let recomputed = old_content.is_none() && !task.has_key(&CachedDataItemKey::Dirty {}); + + if recomputed { + // Task wasn't invalidated, so we just recompute, so the content has not actually + // changed (At least we have to assume that tasks are deterministic and + // pure). + drop(task); + drop(old_content); + return; + } + + let dependent = get_many!( + task, + CellDependent { cell: dependent_cell, task } _value + if dependent_cell == cell + => task + ); + + drop(task); + drop(old_content); + + InvalidateOperation::run(dependent, ctx); + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_output.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_output.rs new file mode 100644 index 0000000000000..efcee8546d8f5 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_output.rs @@ -0,0 +1,86 @@ +use std::borrow::Cow; + +use anyhow::{anyhow, Result}; +use turbo_tasks::{util::SharedError, RawVc, TaskId}; + +use crate::{ + backend::{ + operation::{ExecuteContext, InvalidateOperation}, + storage::get_many, + }, + data::{CachedDataItem, CachedDataItemKey, CachedDataItemValue, CellRef, OutputValue}, +}; + +pub struct UpdateOutputOperation; + +impl UpdateOutputOperation { + pub fn run( + task_id: TaskId, + output: Result, Option>>, + ctx: ExecuteContext<'_>, + ) { + let mut task = ctx.task(task_id); + let old_error = task.remove(&CachedDataItemKey::Error {}); + let current_output = task.get(&CachedDataItemKey::Output {}); + let output_value = match output { + Ok(Ok(RawVc::TaskOutput(output_task_id))) => { + if let Some(CachedDataItemValue::Output { + value: OutputValue::Output(current_task_id), + }) = current_output + { + if *current_task_id == output_task_id { + return; + } + } + OutputValue::Output(output_task_id) + } + Ok(Ok(RawVc::TaskCell(output_task_id, cell))) => { + if let Some(CachedDataItemValue::Output { + value: + OutputValue::Cell(CellRef { + task: current_task_id, + cell: current_cell, + }), + }) = current_output + { + if *current_task_id == output_task_id && *current_cell == cell { + return; + } + } + OutputValue::Cell(CellRef { + task: output_task_id, + cell, + }) + } + Ok(Ok(RawVc::LocalCell(_, _))) => { + panic!("LocalCell must not be output of a task"); + } + Ok(Ok(RawVc::LocalOutput(_, _))) => { + panic!("LocalOutput must not be output of a task"); + } + Ok(Err(err)) => { + task.insert(CachedDataItem::Error { + value: SharedError::new(err), + }); + OutputValue::Error + } + Err(panic) => { + task.insert(CachedDataItem::Error { + value: SharedError::new(anyhow!("Panic: {:?}", panic)), + }); + OutputValue::Panic + } + }; + let old_content = task.insert(CachedDataItem::Output { + value: output_value, + }); + + let dependent = get_many!(task, OutputDependent { task } _value => task); + + drop(task); + drop(old_content); + drop(old_error); + + InvalidateOperation::run(dependent, ctx); + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs b/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs new file mode 100644 index 0000000000000..7a3006624c93c --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/backend/storage.rs @@ -0,0 +1,371 @@ +use std::{ + hash::{BuildHasherDefault, Hash}, + mem::take, + ops::{Deref, DerefMut}, + thread::available_parallelism, +}; + +use auto_hash_map::{map::Entry, AutoMap}; +use dashmap::DashMap; +use either::Either; +use rustc_hash::FxHasher; +use turbo_tasks::KeyValuePair; + +use crate::{ + backend::indexed::Indexed, + utils::dash_map_multi::{get_multiple_mut, RefMut}, +}; + +const INDEX_THRESHOLD: usize = 1024; + +type IndexedMap = AutoMap< + <::Key as Indexed>::Index, + AutoMap<::Key, ::Value>, +>; + +pub enum InnerStorage +where + T::Key: Indexed, +{ + Plain { map: AutoMap }, + Indexed { map: IndexedMap }, +} + +impl InnerStorage +where + T::Key: Indexed, +{ + fn new() -> Self { + Self::Plain { + map: AutoMap::new(), + } + } + + fn check_threshold(&mut self) { + let InnerStorage::Plain { map: plain_map } = self else { + return; + }; + if plain_map.len() >= INDEX_THRESHOLD { + let mut map: IndexedMap = AutoMap::new(); + for (key, value) in take(plain_map).into_iter() { + let index = key.index(); + map.entry(index).or_default().insert(key, value); + } + *self = InnerStorage::Indexed { map }; + } + } + + fn get_map_mut(&mut self, key: &T::Key) -> &mut AutoMap { + self.check_threshold(); + match self { + InnerStorage::Plain { map, .. } => map, + InnerStorage::Indexed { map, .. } => map.entry(key.index()).or_default(), + } + } + + fn get_map(&self, key: &T::Key) -> Option<&AutoMap> { + match self { + InnerStorage::Plain { map, .. } => Some(map), + InnerStorage::Indexed { map, .. } => map.get(&key.index()), + } + } + + fn index_map(&self, index: ::Index) -> Option<&AutoMap> { + match self { + InnerStorage::Plain { map, .. } => Some(map), + InnerStorage::Indexed { map, .. } => map.get(&index), + } + } + + pub fn add(&mut self, item: T) -> bool { + let (key, value) = item.into_key_and_value(); + match self.get_map_mut(&key).entry(key) { + Entry::Occupied(_) => false, + Entry::Vacant(e) => { + e.insert(value); + true + } + } + } + + pub fn insert(&mut self, item: T) -> Option { + let (key, value) = item.into_key_and_value(); + self.get_map_mut(&key).insert(key, value) + } + + pub fn remove(&mut self, key: &T::Key) -> Option { + self.get_map_mut(key).remove(key) + } + + pub fn get(&self, key: &T::Key) -> Option<&T::Value> { + self.get_map(key).and_then(|m| m.get(key)) + } + + pub fn has_key(&self, key: &T::Key) -> bool { + self.get_map(key) + .map(|m| m.contains_key(key)) + .unwrap_or_default() + } + + pub fn is_indexed(&self) -> bool { + matches!(self, InnerStorage::Indexed { .. }) + } + + pub fn iter( + &self, + index: ::Index, + ) -> impl Iterator { + self.index_map(index) + .map(|m| m.iter()) + .into_iter() + .flatten() + } + + pub fn iter_all(&self) -> impl Iterator { + match self { + InnerStorage::Plain { map, .. } => Either::Left(map.iter()), + InnerStorage::Indexed { map, .. } => { + Either::Right(map.iter().flat_map(|(_, m)| m.iter())) + } + } + } +} + +impl InnerStorage +where + T::Key: Indexed, + T::Value: Default, + T::Key: Clone, +{ + pub fn update( + &mut self, + key: &T::Key, + update: impl FnOnce(Option) -> Option, + ) { + let map = self.get_map_mut(key); + if let Some(value) = map.get_mut(key) { + let v = take(value); + if let Some(v) = update(Some(v)) { + *value = v; + } else { + map.remove(key); + } + } else if let Some(v) = update(None) { + map.insert(key.clone(), v); + } + } +} + +impl InnerStorage +where + T::Key: Indexed, + T::Value: PartialEq, +{ + pub fn has(&self, item: &mut T) -> bool { + let (key, value) = take(item).into_key_and_value(); + let result = if let Some(stored_value) = self.get(&key) { + *stored_value == value + } else { + false + }; + *item = T::from_key_and_value(key, value); + result + } +} + +pub struct Storage +where + T::Key: Indexed, +{ + map: DashMap, BuildHasherDefault>, +} + +impl Storage +where + T: KeyValuePair, + T::Key: Indexed, + K: Eq + std::hash::Hash + Clone, +{ + pub fn new() -> Self { + let shard_amount = + (available_parallelism().map_or(4, |v| v.get()) * 64).next_power_of_two(); + Self { + map: DashMap::with_capacity_and_hasher_and_shard_amount( + 1024 * 1024, + Default::default(), + shard_amount, + ), + } + } + + pub fn access_mut(&self, key: K) -> StorageWriteGuard<'_, K, T> { + let inner = match self.map.entry(key) { + dashmap::mapref::entry::Entry::Occupied(e) => e.into_ref(), + dashmap::mapref::entry::Entry::Vacant(e) => e.insert(InnerStorage::new()), + }; + StorageWriteGuard { + inner: inner.into(), + } + } + + pub fn access_pair_mut( + &self, + key1: K, + key2: K, + ) -> (StorageWriteGuard<'_, K, T>, StorageWriteGuard<'_, K, T>) { + let (a, b) = get_multiple_mut(&self.map, key1, key2, || InnerStorage::new()); + ( + StorageWriteGuard { inner: a }, + StorageWriteGuard { inner: b }, + ) + } +} + +pub struct StorageWriteGuard<'a, K, T> +where + T: KeyValuePair, + T::Key: Indexed, +{ + inner: RefMut<'a, K, InnerStorage, BuildHasherDefault>, +} + +impl<'a, K, T> Deref for StorageWriteGuard<'a, K, T> +where + T: KeyValuePair, + T::Key: Indexed, + K: Eq + Hash, +{ + type Target = InnerStorage; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl<'a, K, T> DerefMut for StorageWriteGuard<'a, K, T> +where + T: KeyValuePair, + T::Key: Indexed, + K: Eq + Hash, +{ + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +macro_rules! get { + ($task:ident, $key:ident $input:tt) => { + if let Some($crate::data::CachedDataItemValue::$key { value }) = $task.get(&$crate::data::CachedDataItemKey::$key $input).as_ref() { + Some(value) + } else { + None + } + }; + ($task:ident, $key:ident) => { + $crate::backend::storage::get!($task, $key {}) + }; +} + +macro_rules! iter_many { + ($task:ident, $key:ident $input:tt => $value:ident) => { + $task + .iter($crate::data::indicies::$key) + .filter_map(|(key, _)| match *key { + $crate::data::CachedDataItemKey::$key $input => Some($value), + _ => None, + }) + }; + ($task:ident, $key:ident $input:tt $value_ident:ident => $value:expr) => { + $task + .iter($crate::data::indicies::$key) + .filter_map(|(key, value)| match (key, value) { + (&$crate::data::CachedDataItemKey::$key $input, &$crate::data::CachedDataItemValue::$key { value: $value_ident }) => Some($value), + _ => None, + }) + }; + ($task:ident, $key:ident $input:tt $value_ident:ident if $cond:expr => $value:expr) => { + $task + .iter($crate::data::indicies::$key) + .filter_map(|(key, value)| match (key, value) { + (&$crate::data::CachedDataItemKey::$key $input, &$crate::data::CachedDataItemValue::$key { value: $value_ident }) if $cond => Some($value), + _ => None, + }) + }; +} + +macro_rules! get_many { + ($task:ident, $key:ident $input:tt => $value:ident) => { + $crate::backend::storage::iter_many!($task, $key $input => $value).collect() + }; + ($task:ident, $key:ident $input:tt $value_ident:ident => $value:expr) => { + $crate::backend::storage::iter_many!($task, $key $input $value_ident => $value).collect() + }; + ($task:ident, $key:ident $input:tt $value_ident:ident if $cond:expr => $value:expr) => { + $crate::backend::storage::iter_many!($task, $key $input $value_ident if $cond => $value).collect() + }; +} + +macro_rules! update { + ($task:ident, $key:ident $input:tt, $update:expr) => { + #[allow(unused_mut)] + match $update { + mut update => $task.update(&$crate::data::CachedDataItemKey::$key $input, |old| { + update(old.and_then(|old| { + if let $crate::data::CachedDataItemValue::$key { value } = old { + Some(value) + } else { + None + } + })) + .map(|new| $crate::data::CachedDataItemValue::$key { value: new }) + }) + } + }; + ($task:ident, $key:ident, $update:expr) => { + $crate::backend::storage::update!($task, $key {}, $update) + }; +} + +macro_rules! update_count { + ($task:ident, $key:ident $input:tt, $update:expr) => { + match $update { + update => { + let mut state_change = false; + $crate::backend::storage::update!($task, $key $input, |old: Option| { + if let Some(old) = old { + let new = old + update; + state_change = old <= 0 && new > 0 || old > 0 && new <= 0; + (new != 0).then_some(new) + } else { + state_change = update > 0; + (update != 0).then_some(update) + } + }); + state_change + } + } + }; + ($task:ident, $key:ident, $update:expr) => { + $crate::backend::storage::update_count!($task, $key {}, $update) + }; +} + +macro_rules! remove { + ($task:ident, $key:ident $input:tt) => { + if let Some($crate::data::CachedDataItemValue::$key { value }) = $task.remove(&$crate::data::CachedDataItemKey::$key $input) { + Some(value) + } else { + None + } + }; + ($task:ident, $key:ident) => { + $crate::backend::storage::remove!($task, $key {}) + }; +} + +pub(crate) use get; +pub(crate) use get_many; +pub(crate) use iter_many; +pub(crate) use remove; +pub(crate) use update; +pub(crate) use update_count; diff --git a/turbopack/crates/turbo-tasks-backend/src/data.rs b/turbopack/crates/turbo-tasks-backend/src/data.rs new file mode 100644 index 0000000000000..390ac1c093d16 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/data.rs @@ -0,0 +1,421 @@ +use serde::{Deserialize, Serialize}; +use turbo_tasks::{ + event::{Event, EventListener}, + util::SharedError, + CellId, KeyValuePair, SharedReference, TaskId, ValueTypeId, +}; + +use crate::backend::indexed::Indexed; + +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Serialize, Deserialize)] +pub struct CellRef { + pub task: TaskId, + pub cell: CellId, +} + +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Serialize, Deserialize)] +pub struct CollectiblesRef { + pub task: TaskId, + pub collectible_type: ValueTypeId, +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum OutputValue { + Cell(CellRef), + Output(TaskId), + Error, + Panic, +} +impl OutputValue { + fn is_transient(&self) -> bool { + match self { + OutputValue::Cell(cell) => cell.task.is_transient(), + OutputValue::Output(task) => task.is_transient(), + OutputValue::Error => false, + OutputValue::Panic => false, + } + } +} + +#[derive(Debug)] +pub struct RootState { + pub ty: ActiveType, + pub all_clean_event: Event, +} + +impl RootState { + pub fn new(ty: ActiveType) -> Self { + Self { + ty, + all_clean_event: Event::new(|| "RootState::all_clean_event".to_string()), + } + } +} + +#[derive(Debug, Clone, Copy)] +pub enum ActiveType { + RootTask, + OnceTask, + /// The aggregated task graph was scheduled because it has reached an AggregatedRoot while + /// propagating the dirty container or is read strongly consistent. This state is reset when + /// all this sub graph becomes clean again. + CachedActiveUntilClean, +} + +impl Clone for RootState { + fn clone(&self) -> Self { + panic!("RootState cannot be cloned"); + } +} + +#[derive(Debug)] +pub enum InProgressState { + Scheduled { + done_event: Event, + }, + InProgress { + stale: bool, + #[allow(dead_code)] + once_task: bool, + done_event: Event, + }, +} + +impl Clone for InProgressState { + fn clone(&self) -> Self { + panic!("InProgressState cannot be cloned"); + } +} + +#[derive(Debug)] +pub struct InProgressCellState { + pub event: Event, +} + +impl Clone for InProgressCellState { + fn clone(&self) -> Self { + panic!("InProgressCell cannot be cloned"); + } +} + +impl InProgressCellState { + pub fn new(task_id: TaskId, cell: CellId) -> Self { + InProgressCellState { + event: Event::new(move || { + format!("InProgressCellState::event ({} {:?})", task_id, cell) + }), + } + } +} + +#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)] +pub struct AggregationNumber { + pub base: u32, + pub distance: u32, + pub effective: u32, +} + +#[derive(Debug, Clone, KeyValuePair)] +pub enum CachedDataItem { + // Output + Output { + value: OutputValue, + }, + Collectible { + collectible: CellRef, + value: (), + }, + + // State + Dirty { + value: (), + }, + DirtyWhenPersisted { + value: (), + }, + + // Children + Child { + task: TaskId, + value: (), + }, + + // Cells + CellData { + cell: CellId, + value: SharedReference, + }, + CellTypeMaxIndex { + cell_type: ValueTypeId, + value: u32, + }, + + // Dependencies + OutputDependency { + target: TaskId, + value: (), + }, + CellDependency { + target: CellRef, + value: (), + }, + CollectiblesDependency { + target: CollectiblesRef, + value: (), + }, + + // Dependent + OutputDependent { + task: TaskId, + value: (), + }, + CellDependent { + cell: CellId, + task: TaskId, + value: (), + }, + CollectiblesDependent { + collectibles_type: ValueTypeId, + task: TaskId, + value: (), + }, + + // Aggregation Graph + AggregationNumber { + value: AggregationNumber, + }, + Follower { + task: TaskId, + value: i32, + }, + Upper { + task: TaskId, + value: i32, + }, + + // Aggregated Data + AggregatedDirtyContainer { + task: TaskId, + value: i32, + }, + AggregatedCollectible { + collectible: CellRef, + value: i32, + }, + AggregatedDirtyContainerCount { + value: i32, + }, + + // Transient Root Type + AggregateRoot { + value: RootState, + }, + + // Transient In Progress state + InProgress { + value: InProgressState, + }, + InProgressCell { + cell: CellId, + value: InProgressCellState, + }, + OutdatedCollectible { + collectible: CellRef, + value: (), + }, + OutdatedOutputDependency { + target: TaskId, + value: (), + }, + OutdatedCellDependency { + target: CellRef, + value: (), + }, + OutdatedChild { + task: TaskId, + value: (), + }, + + // Transient Error State + Error { + value: SharedError, + }, +} + +impl CachedDataItem { + pub fn is_persistent(&self) -> bool { + match self { + CachedDataItem::Output { value } => value.is_transient(), + CachedDataItem::Collectible { collectible, .. } => !collectible.task.is_transient(), + CachedDataItem::Dirty { .. } => true, + CachedDataItem::DirtyWhenPersisted { .. } => true, + CachedDataItem::Child { task, .. } => !task.is_transient(), + CachedDataItem::CellData { .. } => true, + CachedDataItem::CellTypeMaxIndex { .. } => true, + CachedDataItem::OutputDependency { target, .. } => !target.is_transient(), + CachedDataItem::CellDependency { target, .. } => !target.task.is_transient(), + CachedDataItem::CollectiblesDependency { target, .. } => !target.task.is_transient(), + CachedDataItem::OutputDependent { task, .. } => !task.is_transient(), + CachedDataItem::CellDependent { task, .. } => !task.is_transient(), + CachedDataItem::CollectiblesDependent { task, .. } => !task.is_transient(), + CachedDataItem::AggregationNumber { .. } => true, + CachedDataItem::Follower { task, .. } => !task.is_transient(), + CachedDataItem::Upper { task, .. } => !task.is_transient(), + CachedDataItem::AggregatedDirtyContainer { task, .. } => !task.is_transient(), + CachedDataItem::AggregatedCollectible { collectible, .. } => { + !collectible.task.is_transient() + } + CachedDataItem::AggregatedDirtyContainerCount { .. } => true, + CachedDataItem::AggregateRoot { .. } => false, + CachedDataItem::InProgress { .. } => false, + CachedDataItem::InProgressCell { .. } => false, + CachedDataItem::OutdatedCollectible { .. } => false, + CachedDataItem::OutdatedOutputDependency { .. } => false, + CachedDataItem::OutdatedCellDependency { .. } => false, + CachedDataItem::OutdatedChild { .. } => false, + CachedDataItem::Error { .. } => false, + } + } + + pub fn new_scheduled(description: impl Fn() -> String + Sync + Send + 'static) -> Self { + CachedDataItem::InProgress { + value: InProgressState::Scheduled { + done_event: Event::new(move || format!("{} done_event", description())), + }, + } + } + + pub fn new_scheduled_with_listener( + description: impl Fn() -> String + Sync + Send + 'static, + note: impl Fn() -> String + Sync + Send + 'static, + ) -> (Self, EventListener) { + let done_event = Event::new(move || format!("{} done_event", description())); + let listener = done_event.listen_with_note(note); + ( + CachedDataItem::InProgress { + value: InProgressState::Scheduled { done_event }, + }, + listener, + ) + } +} + +impl CachedDataItemKey { + pub fn is_persistent(&self) -> bool { + match self { + CachedDataItemKey::Output { .. } => true, + CachedDataItemKey::Collectible { collectible, .. } => !collectible.task.is_transient(), + CachedDataItemKey::Dirty { .. } => true, + CachedDataItemKey::DirtyWhenPersisted { .. } => true, + CachedDataItemKey::Child { task, .. } => !task.is_transient(), + CachedDataItemKey::CellData { .. } => true, + CachedDataItemKey::CellTypeMaxIndex { .. } => true, + CachedDataItemKey::OutputDependency { target, .. } => !target.is_transient(), + CachedDataItemKey::CellDependency { target, .. } => !target.task.is_transient(), + CachedDataItemKey::CollectiblesDependency { target, .. } => !target.task.is_transient(), + CachedDataItemKey::OutputDependent { task, .. } => !task.is_transient(), + CachedDataItemKey::CellDependent { task, .. } => !task.is_transient(), + CachedDataItemKey::CollectiblesDependent { task, .. } => !task.is_transient(), + CachedDataItemKey::AggregationNumber { .. } => true, + CachedDataItemKey::Follower { task, .. } => !task.is_transient(), + CachedDataItemKey::Upper { task, .. } => !task.is_transient(), + CachedDataItemKey::AggregatedDirtyContainer { task, .. } => !task.is_transient(), + CachedDataItemKey::AggregatedCollectible { collectible, .. } => { + !collectible.task.is_transient() + } + CachedDataItemKey::AggregatedDirtyContainerCount { .. } => true, + CachedDataItemKey::AggregateRoot { .. } => false, + CachedDataItemKey::InProgress { .. } => false, + CachedDataItemKey::InProgressCell { .. } => false, + CachedDataItemKey::OutdatedCollectible { .. } => false, + CachedDataItemKey::OutdatedOutputDependency { .. } => false, + CachedDataItemKey::OutdatedCellDependency { .. } => false, + CachedDataItemKey::OutdatedChild { .. } => false, + CachedDataItemKey::Error { .. } => false, + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub enum CachedDataItemIndex { + Children, + Follower, + Upper, + AggregatedDirtyContainer, + CellData, + CellTypeMaxIndex, + CellDependent, + OutputDependent, + Dependencies, +} + +#[allow(non_upper_case_globals, dead_code)] +pub mod indicies { + use super::CachedDataItemIndex; + + pub const Child: CachedDataItemIndex = CachedDataItemIndex::Children; + pub const OutdatedChild: CachedDataItemIndex = CachedDataItemIndex::Children; + pub const Follower: CachedDataItemIndex = CachedDataItemIndex::Follower; + pub const Upper: CachedDataItemIndex = CachedDataItemIndex::Upper; + pub const AggregatedDirtyContainer: CachedDataItemIndex = + CachedDataItemIndex::AggregatedDirtyContainer; + pub const CellData: CachedDataItemIndex = CachedDataItemIndex::CellData; + pub const CellTypeMaxIndex: CachedDataItemIndex = CachedDataItemIndex::CellTypeMaxIndex; + pub const CellDependent: CachedDataItemIndex = CachedDataItemIndex::CellDependent; + pub const OutputDependent: CachedDataItemIndex = CachedDataItemIndex::OutputDependent; + pub const OutputDependency: CachedDataItemIndex = CachedDataItemIndex::Dependencies; + pub const CellDependency: CachedDataItemIndex = CachedDataItemIndex::Dependencies; + pub const OutdatedOutputDependency: CachedDataItemIndex = CachedDataItemIndex::Dependencies; + pub const OutdatedCellDependency: CachedDataItemIndex = CachedDataItemIndex::Dependencies; +} + +impl Indexed for CachedDataItemKey { + type Index = Option; + + fn index(&self) -> Option { + match self { + CachedDataItemKey::Child { .. } => Some(CachedDataItemIndex::Children), + CachedDataItemKey::OutdatedChild { .. } => Some(CachedDataItemIndex::Children), + CachedDataItemKey::Follower { .. } => Some(CachedDataItemIndex::Follower), + CachedDataItemKey::Upper { .. } => Some(CachedDataItemIndex::Upper), + CachedDataItemKey::AggregatedDirtyContainer { .. } => { + Some(CachedDataItemIndex::AggregatedDirtyContainer) + } + CachedDataItemKey::CellData { .. } => Some(CachedDataItemIndex::CellData), + CachedDataItemKey::CellTypeMaxIndex { .. } => { + Some(CachedDataItemIndex::CellTypeMaxIndex) + } + CachedDataItemKey::CellDependent { .. } => Some(CachedDataItemIndex::CellDependent), + CachedDataItemKey::OutputDependent { .. } => Some(CachedDataItemIndex::OutputDependent), + CachedDataItemKey::OutputDependency { .. } => Some(CachedDataItemIndex::Dependencies), + CachedDataItemKey::CellDependency { .. } => Some(CachedDataItemIndex::Dependencies), + CachedDataItemKey::OutdatedOutputDependency { .. } => { + Some(CachedDataItemIndex::Dependencies) + } + CachedDataItemKey::OutdatedCellDependency { .. } => { + Some(CachedDataItemIndex::Dependencies) + } + _ => None, + } + } +} + +impl CachedDataItemValue { + pub fn is_persistent(&self) -> bool { + match self { + CachedDataItemValue::Output { value } => !value.is_transient(), + _ => true, + } + } +} + +#[derive(Debug)] +pub struct CachedDataUpdate { + // TODO persistence + #[allow(dead_code)] + pub task: TaskId, + #[allow(dead_code)] + pub key: CachedDataItemKey, + #[allow(dead_code)] + pub value: Option, +} diff --git a/turbopack/crates/turbo-tasks-backend/src/lib.rs b/turbopack/crates/turbo-tasks-backend/src/lib.rs new file mode 100644 index 0000000000000..c7b5fe1832ad1 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/lib.rs @@ -0,0 +1,5 @@ +mod backend; +mod data; +mod utils; + +pub use self::backend::TurboTasksBackend; diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/bi_map.rs b/turbopack/crates/turbo-tasks-backend/src/utils/bi_map.rs new file mode 100644 index 0000000000000..a55757d85d4b4 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/bi_map.rs @@ -0,0 +1,54 @@ +use std::{borrow::Borrow, hash::Hash}; + +use dashmap::{mapref::entry::Entry, DashMap}; + +/// A bidirectional [`DashMap`] that allows lookup by key or value. +/// +/// As keys and values are stored twice, they should be small types, such as +/// [`Arc`][`std::sync::Arc`]. +pub struct BiMap { + forward: DashMap, + reverse: DashMap, +} + +impl BiMap +where + K: Eq + Hash + Clone, + V: Eq + Hash + Clone, +{ + pub fn new() -> Self { + Self { + forward: DashMap::new(), + reverse: DashMap::new(), + } + } + + pub fn lookup_forward(&self, key: &Q) -> Option + where + K: Borrow, + Q: Hash + Eq, + { + self.forward.get(key).map(|v| v.value().clone()) + } + + pub fn lookup_reverse(&self, key: &Q) -> Option + where + V: Borrow, + Q: Hash + Eq, + { + self.reverse.get(key).map(|v| v.value().clone()) + } + + pub fn try_insert(&self, key: K, value: V) -> Result<(), V> { + match self.forward.entry(key) { + Entry::Occupied(e) => Err(e.get().clone()), + Entry::Vacant(e) => { + let e = e.insert_entry(value.clone()); + let key = e.key().clone(); + self.reverse.insert(value, key); + drop(e); + Ok(()) + } + } + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/chunked_vec.rs b/turbopack/crates/turbo-tasks-backend/src/utils/chunked_vec.rs new file mode 100644 index 0000000000000..46292f79e5e72 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/chunked_vec.rs @@ -0,0 +1,76 @@ +pub struct ChunkedVec { + chunks: Vec>, +} + +impl ChunkedVec { + pub fn new() -> Self { + Self { chunks: Vec::new() } + } + + pub fn len(&self) -> usize { + if let Some(last) = self.chunks.last() { + let free = last.capacity() - self.len(); + cummulative_chunk_size(self.chunks.len() - 1) - free + } else { + 0 + } + } + + pub fn push(&mut self, item: T) { + if let Some(chunk) = self.chunks.last_mut() { + if chunk.len() < chunk.capacity() { + chunk.push(item); + return; + } + } + let mut chunk = Vec::with_capacity(chunk_size(self.chunks.len())); + chunk.push(item); + self.chunks.push(chunk); + } + + pub fn into_iter(self) -> impl Iterator { + let len = self.len(); + ExactSizeIter { + iter: self.chunks.into_iter().flat_map(|chunk| chunk.into_iter()), + len, + } + } + + pub fn iter(&self) -> impl Iterator { + ExactSizeIter { + iter: self.chunks.iter().flat_map(|chunk| chunk.iter()), + len: self.len(), + } + } +} + +fn chunk_size(chunk_index: usize) -> usize { + 8 << chunk_index +} + +fn cummulative_chunk_size(chunk_index: usize) -> usize { + (8 << (chunk_index + 1)) - 8 +} + +struct ExactSizeIter { + iter: I, + len: usize, +} + +impl Iterator for ExactSizeIter { + type Item = I::Item; + + fn next(&mut self) -> Option { + self.iter.next().inspect(|_| self.len -= 1) + } + + fn size_hint(&self) -> (usize, Option) { + (self.len, Some(self.len)) + } +} + +impl ExactSizeIterator for ExactSizeIter { + fn len(&self) -> usize { + self.len + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/dash_map_multi.rs b/turbopack/crates/turbo-tasks-backend/src/utils/dash_map_multi.rs new file mode 100644 index 0000000000000..65d630499fcdf --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/dash_map_multi.rs @@ -0,0 +1,220 @@ +use std::{ + hash::{BuildHasher, Hash}, + ops::{Deref, DerefMut}, + sync::Arc, +}; + +use dashmap::{DashMap, RwLockWriteGuard, SharedValue}; +use hashbrown::{hash_map, HashMap}; + +pub enum RefMut<'a, K, V, S> +where + S: BuildHasher, +{ + Base(dashmap::mapref::one::RefMut<'a, K, V, S>), + Simple { + _guard: RwLockWriteGuard<'a, HashMap, S>>, + key: *const K, + value: *mut V, + }, + Shared { + _guard: Arc, S>>>, + key: *const K, + value: *mut V, + }, +} + +unsafe impl<'a, K: Eq + Hash + Sync, V: Sync, S: BuildHasher> Send for RefMut<'a, K, V, S> {} +unsafe impl<'a, K: Eq + Hash + Sync, V: Sync, S: BuildHasher> Sync for RefMut<'a, K, V, S> {} + +impl<'a, K: Eq + Hash, V, S: BuildHasher> RefMut<'a, K, V, S> { + pub fn key(&self) -> &K { + self.pair().0 + } + + pub fn value(&self) -> &V { + self.pair().1 + } + + pub fn value_mut(&mut self) -> &mut V { + self.pair_mut().1 + } + + pub fn pair(&self) -> (&K, &V) { + match self { + RefMut::Base(r) => r.pair(), + &RefMut::Simple { key, value, .. } => unsafe { (&*key, &*value) }, + &RefMut::Shared { key, value, .. } => unsafe { (&*key, &*value) }, + } + } + + pub fn pair_mut(&mut self) -> (&K, &mut V) { + match self { + RefMut::Base(r) => r.pair_mut(), + &mut RefMut::Simple { key, value, .. } => unsafe { (&*key, &mut *value) }, + &mut RefMut::Shared { key, value, .. } => unsafe { (&*key, &mut *value) }, + } + } +} + +impl<'a, K: Eq + Hash, V, S: BuildHasher> Deref for RefMut<'a, K, V, S> { + type Target = V; + + fn deref(&self) -> &V { + self.value() + } +} + +impl<'a, K: Eq + Hash, V, S: BuildHasher> DerefMut for RefMut<'a, K, V, S> { + fn deref_mut(&mut self) -> &mut V { + self.value_mut() + } +} + +impl<'a, K, V, S> From> for RefMut<'a, K, V, S> +where + K: Hash + Eq, + S: BuildHasher, +{ + fn from(r: dashmap::mapref::one::RefMut<'a, K, V, S>) -> Self { + RefMut::Base(r) + } +} + +pub fn get_multiple_mut( + map: &DashMap, + key1: K, + key2: K, + insert_with: impl Fn() -> V, +) -> (RefMut<'_, K, V, S>, RefMut<'_, K, V, S>) +where + K: Hash + Eq + Clone, + S: BuildHasher + Clone, +{ + let s1 = map.determine_map(&key1); + let s2 = map.determine_map(&key2); + let shards = map.shards(); + if s1 == s2 { + let mut guard = shards[s1].write(); + let e1 = guard + .raw_entry_mut() + .from_key(&key1) + .or_insert_with(|| (key1.clone(), SharedValue::new(insert_with()))); + let mut key1_ptr = e1.0 as *const K; + let mut value1_ptr = e1.1.get_mut() as *mut V; + let key2_ptr; + let value2_ptr; + match guard.raw_entry_mut().from_key(&key2) { + hash_map::RawEntryMut::Occupied(e) => { + let e2 = e.into_key_value(); + key2_ptr = e2.0 as *const K; + value2_ptr = e2.1.get_mut() as *mut V; + } + hash_map::RawEntryMut::Vacant(e) => { + let e2 = e.insert(key2.clone(), SharedValue::new(insert_with())); + key2_ptr = e2.0 as *const K; + value2_ptr = e2.1.get_mut() as *mut V; + // inserting a new entry might invalidate the pointers of the first entry + let e1 = guard.get_key_value_mut(&key1).unwrap(); + key1_ptr = e1.0 as *const K; + value1_ptr = e1.1.get_mut() as *mut V; + } + } + let guard = Arc::new(guard); + ( + RefMut::Shared { + _guard: guard.clone(), + key: key1_ptr, + value: value1_ptr, + }, + RefMut::Shared { + _guard: guard, + key: key2_ptr, + value: value2_ptr, + }, + ) + } else { + let (mut guard1, mut guard2) = loop { + { + let g1 = shards[s1].write(); + if let Some(g2) = shards[s2].try_write() { + break (g1, g2); + } + } + { + let g2 = shards[s2].write(); + if let Some(g1) = shards[s1].try_write() { + break (g1, g2); + } + } + }; + let e1 = guard1 + .raw_entry_mut() + .from_key(&key1) + .or_insert_with(|| (key1, SharedValue::new(insert_with()))); + let key1 = e1.0 as *const K; + let value1 = e1.1.get_mut() as *mut V; + let e2 = guard2 + .raw_entry_mut() + .from_key(&key2) + .or_insert_with(|| (key2, SharedValue::new(insert_with()))); + let key2 = e2.0 as *const K; + let value2 = e2.1.get_mut() as *mut V; + ( + RefMut::Simple { + _guard: guard1, + key: key1, + value: value1, + }, + RefMut::Simple { + _guard: guard2, + key: key2, + value: value2, + }, + ) + } +} + +#[cfg(test)] +mod tests { + use std::thread::scope; + + use rand::prelude::SliceRandom; + + use super::*; + + #[test] + fn stress_deadlock() { + const N: usize = 100000; + const THREADS: usize = 20; + + let map = DashMap::with_shard_amount(4); + let indicies = (0..THREADS) + .map(|_| { + let mut vec = (0..N).collect::>(); + vec.shuffle(&mut rand::thread_rng()); + vec + }) + .collect::>(); + let map = ↦ + scope(|s| { + for indicies in indicies { + s.spawn(|| { + for i in indicies { + let (mut a, mut b) = get_multiple_mut(map, i, i + 1, || 0); + *a += 1; + *b += 1; + } + }); + } + }); + let value = *map.get(&0).unwrap(); + assert_eq!(value, THREADS); + for i in 1..N { + let value = *map.get(&i).unwrap(); + assert_eq!(value, THREADS * 2); + } + let value = *map.get(&N).unwrap(); + assert_eq!(value, THREADS); + } +} diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/mod.rs b/turbopack/crates/turbo-tasks-backend/src/utils/mod.rs new file mode 100644 index 0000000000000..676e3b809b388 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/mod.rs @@ -0,0 +1,4 @@ +pub mod bi_map; +pub mod chunked_vec; +pub mod dash_map_multi; +pub mod ptr_eq_arc; diff --git a/turbopack/crates/turbo-tasks-backend/src/utils/ptr_eq_arc.rs b/turbopack/crates/turbo-tasks-backend/src/utils/ptr_eq_arc.rs new file mode 100644 index 0000000000000..7889de80e05ee --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/src/utils/ptr_eq_arc.rs @@ -0,0 +1,47 @@ +use std::{ + hash::{Hash, Hasher}, + ops::Deref, + sync::Arc, +}; + +pub struct PtrEqArc(Arc); + +impl PtrEqArc { + pub fn new(value: T) -> Self { + Self(Arc::new(value)) + } +} + +impl From> for PtrEqArc { + fn from(value: Arc) -> Self { + Self(value) + } +} + +impl Deref for PtrEqArc { + type Target = Arc; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl Clone for PtrEqArc { + fn clone(&self) -> Self { + Self(self.0.clone()) + } +} + +impl PartialEq for PtrEqArc { + fn eq(&self, other: &Self) -> bool { + Arc::ptr_eq(&self.0, &other.0) + } +} + +impl Eq for PtrEqArc {} + +impl Hash for PtrEqArc { + fn hash(&self, state: &mut H) { + Arc::as_ptr(&self.0).hash(state) + } +} diff --git a/turbopack/crates/turbo-tasks-backend/tests/all_in_one.rs b/turbopack/crates/turbo-tasks-backend/tests/all_in_one.rs new file mode 120000 index 0000000000000..391ab595a93e2 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/all_in_one.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/all_in_one.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/basic.rs b/turbopack/crates/turbo-tasks-backend/tests/basic.rs new file mode 120000 index 0000000000000..d2c98272f0102 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/basic.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/basic.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/call_types.rs b/turbopack/crates/turbo-tasks-backend/tests/call_types.rs new file mode 120000 index 0000000000000..b20501cd53c79 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/call_types.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/call_types.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/debug.rs b/turbopack/crates/turbo-tasks-backend/tests/debug.rs new file mode 120000 index 0000000000000..ee7aea7eab52f --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/debug.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/debug.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/detached.rs b/turbopack/crates/turbo-tasks-backend/tests/detached.rs new file mode 120000 index 0000000000000..e726e54a7881e --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/detached.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/detached.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/emptied_cells.rs b/turbopack/crates/turbo-tasks-backend/tests/emptied_cells.rs new file mode 120000 index 0000000000000..9070c4d0b4dcc --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/emptied_cells.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/emptied_cells.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/generics.rs b/turbopack/crates/turbo-tasks-backend/tests/generics.rs new file mode 120000 index 0000000000000..526d71f58d8ba --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/generics.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/generics.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/local_cell.rs b/turbopack/crates/turbo-tasks-backend/tests/local_cell.rs new file mode 120000 index 0000000000000..9249e3399052e --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/local_cell.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/local_cell.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/performance.rs b/turbopack/crates/turbo-tasks-backend/tests/performance.rs new file mode 120000 index 0000000000000..23ff275bf1de5 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/performance.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/performance.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/read_ref_cell.rs b/turbopack/crates/turbo-tasks-backend/tests/read_ref_cell.rs new file mode 120000 index 0000000000000..4e1719dfefec2 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/read_ref_cell.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/read_ref_cell.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/recompute.rs b/turbopack/crates/turbo-tasks-backend/tests/recompute.rs new file mode 120000 index 0000000000000..5c35fb81af4e3 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/recompute.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/recompute.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/resolved_vc.rs b/turbopack/crates/turbo-tasks-backend/tests/resolved_vc.rs new file mode 120000 index 0000000000000..601c7f0fc0008 --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/resolved_vc.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/resolved_vc.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-backend/tests/test_config.trs b/turbopack/crates/turbo-tasks-backend/tests/test_config.trs new file mode 100644 index 0000000000000..7387c44aaf3dd --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/test_config.trs @@ -0,0 +1,3 @@ +|_name, _initial| { + turbo_tasks::TurboTasks::new(turbo_tasks_backend::TurboTasksBackend::new()) +} diff --git a/turbopack/crates/turbo-tasks-backend/tests/trait_ref_cell.rs b/turbopack/crates/turbo-tasks-backend/tests/trait_ref_cell.rs new file mode 120000 index 0000000000000..026eed7f3b50f --- /dev/null +++ b/turbopack/crates/turbo-tasks-backend/tests/trait_ref_cell.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/trait_ref_cell.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs b/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs new file mode 100644 index 0000000000000..a3a0d192ec9a2 --- /dev/null +++ b/turbopack/crates/turbo-tasks-macros/src/derive/key_value_pair_macro.rs @@ -0,0 +1,186 @@ +use proc_macro::TokenStream; +use quote::quote; +use syn::{parse_macro_input, Ident, ItemEnum}; + +pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as ItemEnum); + + let ident = &input.ident; + let vis = &input.vis; + let key_name = Ident::new(&format!("{}Key", input.ident), input.ident.span()); + let value_name = Ident::new(&format!("{}Value", input.ident), input.ident.span()); + + let variant_names = input + .variants + .iter() + .map(|variant| &variant.ident) + .collect::>(); + + let key_fields = input + .variants + .iter() + .map(|variant| { + variant + .fields + .iter() + .filter(|field| { + let Some(ident) = &field.ident else { + return false; + }; + ident != "value" + }) + .collect::>() + }) + .collect::>(); + + let value_fields = input + .variants + .iter() + .map(|variant| { + variant + .fields + .iter() + .filter(|field| { + let Some(ident) = &field.ident else { + return false; + }; + ident == "value" + }) + .collect::>() + }) + .collect::>(); + + let key_decl = field_declarations(&key_fields); + let key_pat = patterns(&key_fields); + let key_clone_fields = clone_fields(&key_fields); + + let value_decl = field_declarations(&value_fields); + let value_pat = patterns(&value_fields); + let value_clone_fields = clone_fields(&value_fields); + + quote! { + impl turbo_tasks::KeyValuePair for #ident { + type Key = #key_name; + type Value = #value_name; + + fn key(&self) -> #key_name { + match self { + #( + #ident::#variant_names { #key_pat .. } => #key_name::#variant_names { #key_clone_fields }, + )* + } + } + + fn value(&self) -> #value_name { + match self { + #( + #ident::#variant_names { #value_pat .. } => #value_name::#variant_names { #value_clone_fields }, + )* + } + } + + fn from_key_and_value(key: #key_name, value: #value_name) -> Self { + match (key, value) { + #( + (#key_name::#variant_names { #key_pat }, #value_name::#variant_names { #value_pat }) => #ident::#variant_names { #key_pat #value_pat }, + )* + _ => panic!("Invalid key and value combination"), + } + } + + fn into_key_and_value(self) -> (#key_name, #value_name) { + match self { + #( + #ident::#variant_names { #key_pat #value_pat } => (#key_name::#variant_names { #key_pat }, #value_name::#variant_names { #value_pat }), + )* + } + } + } + + #[derive(Debug, Clone, PartialEq, Eq, Hash)] + #vis enum #key_name { + #( + #variant_names { + #key_decl + }, + )* + } + + #[derive(Debug, Clone, Default)] + #vis enum #value_name { + #( + #variant_names { + #value_decl + }, + )* + #[default] + Reserved, + } + } + .into() +} + +fn patterns(fields: &[Vec<&syn::Field>]) -> Vec { + let variant_pat = fields + .iter() + .map(|fields| { + let pat = fields + .iter() + .map(|field| { + let ident = field.ident.as_ref().unwrap(); + quote! { + #ident + } + }) + .collect::>(); + quote! { + #(#pat,)* + } + }) + .collect::>(); + variant_pat +} + +fn clone_fields(fields: &[Vec<&syn::Field>]) -> Vec { + let variant_pat = fields + .iter() + .map(|fields| { + let pat = fields + .iter() + .map(|field| { + let ident = field.ident.as_ref().unwrap(); + quote! { + #ident: #ident.clone() + } + }) + .collect::>(); + quote! { + #(#pat,)* + } + }) + .collect::>(); + variant_pat +} + +fn field_declarations(fields: &[Vec<&syn::Field>]) -> Vec { + fields + .iter() + .map(|fields| { + let fields = fields + .iter() + .map(|field| { + let ty = &field.ty; + let ident = field.ident.as_ref().unwrap(); + let attrs = &field.attrs; + quote! { + #(#attrs)* + #ident: #ty + } + }) + .collect::>(); + quote! { + #(#fields),* + } + }) + .collect::>() +} diff --git a/turbopack/crates/turbo-tasks-macros/src/derive/mod.rs b/turbopack/crates/turbo-tasks-macros/src/derive/mod.rs index d48323309096e..d8c507574ab3b 100644 --- a/turbopack/crates/turbo-tasks-macros/src/derive/mod.rs +++ b/turbopack/crates/turbo-tasks-macros/src/derive/mod.rs @@ -1,4 +1,5 @@ mod deterministic_hash_macro; +mod key_value_pair_macro; mod resolved_value_macro; mod task_input_macro; mod trace_raw_vcs_macro; @@ -6,6 +7,7 @@ mod value_debug_format_macro; mod value_debug_macro; pub use deterministic_hash_macro::derive_deterministic_hash; +pub use key_value_pair_macro::derive_key_value_pair; pub use resolved_value_macro::derive_resolved_value; use syn::{spanned::Spanned, Attribute, Meta, MetaList, NestedMeta}; pub use task_input_macro::derive_task_input; diff --git a/turbopack/crates/turbo-tasks-macros/src/lib.rs b/turbopack/crates/turbo-tasks-macros/src/lib.rs index 8e6358c47ed40..613b2da8ff789 100644 --- a/turbopack/crates/turbo-tasks-macros/src/lib.rs +++ b/turbopack/crates/turbo-tasks-macros/src/lib.rs @@ -47,6 +47,16 @@ pub fn derive_task_input(input: TokenStream) -> TokenStream { derive::derive_task_input(input) } +/// Derives the `turbo_tasks::KeyValuePair` trait for a enum. Each variant need to have a `value` +/// field which becomes part of the value enum and all remaining fields become part of the key. +/// Assuming the enum is called `Abc` it exposes `AbcKey` and `AbcValue` types for it too. The key +/// enum will have `Debug, Clone, PartialEq, Eq, Hash` derived and the value enum will have `Debug, +/// Clone` derived. It's expected that all fields implement these traits. +#[proc_macro_derive(KeyValuePair)] +pub fn derive_key_value_pair(input: TokenStream) -> TokenStream { + derive::derive_key_value_pair(input) +} + #[allow_internal_unstable(min_specialization, into_future, trivial_bounds)] #[proc_macro_error] #[proc_macro_attribute] diff --git a/turbopack/crates/turbo-tasks-memory/tests/basic.rs b/turbopack/crates/turbo-tasks-memory/tests/basic.rs new file mode 120000 index 0000000000000..d2c98272f0102 --- /dev/null +++ b/turbopack/crates/turbo-tasks-memory/tests/basic.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/basic.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-memory/tests/performance.rs b/turbopack/crates/turbo-tasks-memory/tests/performance.rs new file mode 120000 index 0000000000000..23ff275bf1de5 --- /dev/null +++ b/turbopack/crates/turbo-tasks-memory/tests/performance.rs @@ -0,0 +1 @@ +../../turbo-tasks-testing/tests/performance.rs \ No newline at end of file diff --git a/turbopack/crates/turbo-tasks-testing/src/lib.rs b/turbopack/crates/turbo-tasks-testing/src/lib.rs index 5ba43c8e3fb88..370194d94d151 100644 --- a/turbopack/crates/turbo-tasks-testing/src/lib.rs +++ b/turbopack/crates/turbo-tasks-testing/src/lib.rs @@ -24,7 +24,7 @@ use turbo_tasks::{ TaskPersistence, TraitTypeId, TurboTasksApi, TurboTasksCallApi, }; -pub use crate::run::{run, run_without_cache_check, Registration}; +pub use crate::run::{run, run_with_tt, run_without_cache_check, Registration}; enum Task { Spawned(Event), diff --git a/turbopack/crates/turbo-tasks-testing/src/run.rs b/turbopack/crates/turbo-tasks-testing/src/run.rs index cf7f8e8e785e8..5b2681421a196 100644 --- a/turbopack/crates/turbo-tasks-testing/src/run.rs +++ b/turbopack/crates/turbo-tasks-testing/src/run.rs @@ -86,6 +86,17 @@ pub async fn run( registration: &Registration, fut: impl Fn() -> F + Send + 'static, ) -> Result<()> +where + F: Future> + Send + 'static, + T: Debug + PartialEq + Eq + TraceRawVcs + Send + 'static, +{ + run_with_tt(registration, move |tt| run_once(tt, fut())).await +} + +pub async fn run_with_tt( + registration: &Registration, + fut: impl Fn(Arc) -> F + Send + 'static, +) -> Result<()> where F: Future> + Send + 'static, T: Debug + PartialEq + Eq + TraceRawVcs + Send + 'static, @@ -95,15 +106,25 @@ where let name = closure_to_name(&fut); let tt = registration.create_turbo_tasks(&name, true); println!("Run #1 (without cache)"); - let first = run_once(tt.clone(), fut()).await?; + let start = std::time::Instant::now(); + let first = fut(tt.clone()).await?; + println!("Run #1 took {:?}", start.elapsed()); println!("Run #2 (with memory cache, same TurboTasks instance)"); - let second = run_once(tt.clone(), fut()).await?; + let start = std::time::Instant::now(); + let second = fut(tt.clone()).await?; + println!("Run #2 took {:?}", start.elapsed()); assert_eq!(first, second); + let start = std::time::Instant::now(); tt.stop_and_wait().await; + println!("Stopping TurboTasks took {:?}", start.elapsed()); let tt = registration.create_turbo_tasks(&name, false); println!("Run #3 (with persistent cache if available, new TurboTasks instance)"); - let third = run_once(tt.clone(), fut()).await?; + let start = std::time::Instant::now(); + let third = fut(tt.clone()).await?; + println!("Run #3 took {:?}", start.elapsed()); + let start = std::time::Instant::now(); tt.stop_and_wait().await; + println!("Stopping TurboTasks took {:?}", start.elapsed()); assert_eq!(first, third); Ok(()) } diff --git a/turbopack/crates/turbo-tasks-testing/tests/basic.rs b/turbopack/crates/turbo-tasks-testing/tests/basic.rs new file mode 100644 index 0000000000000..84a56237e3193 --- /dev/null +++ b/turbopack/crates/turbo-tasks-testing/tests/basic.rs @@ -0,0 +1,40 @@ +#![feature(arbitrary_self_types)] + +use anyhow::Result; +use turbo_tasks::Vc; +use turbo_tasks_testing::{register, run, Registration}; + +static REGISTRATION: Registration = register!(); + +#[tokio::test] +async fn basic() { + run(®ISTRATION, || async { + let output1 = func_without_args(); + assert_eq!(output1.await?.value, 123); + + let input = Value { value: 42 }.cell(); + let output2 = func(input); + assert_eq!(output2.await?.value, 42); + + anyhow::Ok(()) + }) + .await + .unwrap() +} + +#[turbo_tasks::value] +struct Value { + value: u32, +} + +#[turbo_tasks::function] +async fn func(input: Vc) -> Result> { + let value = input.await?.value; + Ok(Value { value }.cell()) +} + +#[turbo_tasks::function] +async fn func_without_args() -> Result> { + let value = 123; + Ok(Value { value }.cell()) +} diff --git a/turbopack/crates/turbo-tasks-testing/tests/performance.rs b/turbopack/crates/turbo-tasks-testing/tests/performance.rs new file mode 100644 index 0000000000000..5dbd561bb285d --- /dev/null +++ b/turbopack/crates/turbo-tasks-testing/tests/performance.rs @@ -0,0 +1,100 @@ +#![feature(arbitrary_self_types)] + +use std::time::Duration; + +use turbo_tasks::Vc; +use turbo_tasks_testing::{register, run, Registration}; + +static REGISTRATION: Registration = register!(); + +const COUNT1: u32 = 100; +const COUNT2: u32 = 2000; + +#[tokio::test] +async fn many_calls_to_many_children() { + run(®ISTRATION, || async { + // The first call will actually execute many_children and its children. + let start = std::time::Instant::now(); + calls_many_children(0).strongly_consistent().await?; + println!("Initial call took {:?}", start.elapsed()); + + // The second call will connect to the cached many_children, but it would be ok if that's + // not yet optimized. + let start = std::time::Instant::now(); + calls_many_children(1).strongly_consistent().await?; + println!("Second call took {:?}", start.elapsed()); + + // Susbsequent calls should be very fast. + let start = std::time::Instant::now(); + for i in 2..COUNT1 { + calls_many_children(i).strongly_consistent().await?; + } + let subsequent = start.elapsed(); + println!( + "First {} subsequent calls took {:?}", + COUNT1 - 2, + subsequent + ); + + let start = std::time::Instant::now(); + for i in COUNT1..COUNT1 * 2 - 2 { + calls_many_children(i).strongly_consistent().await?; + } + let subsequent2 = start.elapsed(); + println!( + "Another {} subsequent calls took {:?}", + COUNT1 - 2, + subsequent2 + ); + + let start = std::time::Instant::now(); + calls_many_children(COUNT1 - 1) + .strongly_consistent() + .await?; + let final_call = start.elapsed(); + println!("Final call took {:?}", final_call); + + assert!( + subsequent2 * 2 < subsequent * 3, + "Performance should not regress with more calls" + ); + + assert!( + subsequent < Duration::from_micros(100) * (COUNT1 - 2), + "Each call should be less than 100µs" + ); + + assert!( + subsequent2 < Duration::from_micros(100) * (COUNT1 - 2), + "Each call should be less than 100µs" + ); + + anyhow::Ok(()) + }) + .await + .unwrap() +} + +#[turbo_tasks::value] +struct Value { + value: u32, +} + +#[turbo_tasks::function] +async fn calls_many_children(_i: u32) -> Vc<()> { + let _ = many_children(); + Vc::cell(()) +} + +#[turbo_tasks::function] +fn many_children() -> Vc<()> { + for i in 0..COUNT2 { + let _ = many_children_inner(i); + } + Vc::cell(()) +} + +#[turbo_tasks::function] +fn many_children_inner(_i: u32) -> Vc<()> { + Vc::cell(()) +} diff --git a/turbopack/crates/turbo-tasks-testing/tests/scope_stress.rs b/turbopack/crates/turbo-tasks-testing/tests/scope_stress.rs index c1b50136400ad..7c59f372b460f 100644 --- a/turbopack/crates/turbo-tasks-testing/tests/scope_stress.rs +++ b/turbopack/crates/turbo-tasks-testing/tests/scope_stress.rs @@ -2,22 +2,16 @@ use anyhow::Result; use turbo_tasks::{run_once, Completion, TryJoinIterExt, Vc}; -use turbo_tasks_testing::{register, Registration}; +use turbo_tasks_testing::{register, run_with_tt, Registration}; static REGISTRATION: Registration = register!(); -#[test] -fn rectangle_stress() { - REGISTRATION.ensure_registered(); - let rt = tokio::runtime::Builder::new_multi_thread() - .enable_all() - .build() - .unwrap(); - rt.block_on(async { - let tt = REGISTRATION.create_turbo_tasks("scope_stress_rectangle_stress", true); - let size = std::env::var("TURBOPACK_TEST_RECTANGLE_STRESS_SIZE") - .map(|size| size.parse().unwrap()) - .unwrap_or(50); +#[tokio::test(flavor = "multi_thread")] +async fn rectangle_stress() -> Result<()> { + let size = std::env::var("TURBOPACK_TEST_RECTANGLE_STRESS_SIZE") + .map(|size| size.parse().unwrap()) + .unwrap_or(50); + run_with_tt(®ISTRATION, move |tt| async move { (0..size) .map(|a| (a, size - 1)) .chain((0..size - 1).map(|b| (size - 1, b))) @@ -32,9 +26,10 @@ fn rectangle_stress() { } }) .try_join() - .await - .unwrap(); + .await?; + Ok(()) }) + .await } /// This fills a rectagle from (0, 0) to (a, b) by diff --git a/turbopack/crates/turbo-tasks/src/backend.rs b/turbopack/crates/turbo-tasks/src/backend.rs index d87ebe638048a..b77c606270f82 100644 --- a/turbopack/crates/turbo-tasks/src/backend.rs +++ b/turbopack/crates/turbo-tasks/src/backend.rs @@ -27,22 +27,25 @@ use crate::{ TraitTypeId, ValueTypeId, VcRead, VcValueTrait, VcValueType, }; -type TransientTaskRoot = +pub type TransientTaskRoot = Box Pin> + Send>> + Send + Sync>; pub enum TransientTaskType { /// A root task that will track dependencies and re-execute when /// dependencies change. Task will eventually settle to the correct /// execution. + /// /// Always active. Automatically scheduled. Root(TransientTaskRoot), // TODO implement these strongly consistency /// A single root task execution. It won't track dependencies. + /// /// Task will definitely include all invalidations that happened before the /// start of the task. It may or may not include invalidations that /// happened after that. It may see these invalidations partially /// applied. + /// /// Active until done. Automatically scheduled. Once(Pin> + Send + 'static>>), } @@ -92,13 +95,93 @@ impl Display for CachedTaskType { } mod ser { + use std::any::Any; + use serde::{ + de::{self}, ser::{SerializeSeq, SerializeTuple}, Deserialize, Deserializer, Serialize, Serializer, }; use super::*; + impl Serialize for TypedCellContent { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + let value_type = registry::get_value_type(self.0); + let serializable = if let Some(value) = &self.1 .0 { + value_type.any_as_serializable(&value.0) + } else { + None + }; + let mut state = serializer.serialize_tuple(3)?; + state.serialize_element(registry::get_value_type_global_name(self.0))?; + if let Some(serializable) = serializable { + state.serialize_element(&true)?; + state.serialize_element(serializable)?; + } else { + state.serialize_element(&false)?; + state.serialize_element(&())?; + } + state.end() + } + } + + impl<'de> Deserialize<'de> for TypedCellContent { + fn deserialize(deserializer: D) -> std::result::Result + where + D: Deserializer<'de>, + { + struct Visitor; + + impl<'de> serde::de::Visitor<'de> for Visitor { + type Value = TypedCellContent; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + write!(formatter, "a valid TypedCellContent") + } + + fn visit_seq(self, mut seq: A) -> std::result::Result + where + A: de::SeqAccess<'de>, + { + let value_type = seq + .next_element()? + .ok_or_else(|| de::Error::invalid_length(0, &self))?; + let value_type = registry::get_value_type_id_by_global_name(value_type) + .ok_or_else(|| de::Error::custom("Unknown value type"))?; + let has_value: bool = seq + .next_element()? + .ok_or_else(|| de::Error::invalid_length(1, &self))?; + if has_value { + let seed = registry::get_value_type(value_type) + .get_any_deserialize_seed() + .ok_or_else(|| { + de::Error::custom("Value type doesn't support deserialization") + })?; + let value = seq + .next_element_seed(seed)? + .ok_or_else(|| de::Error::invalid_length(2, &self))?; + let arc = triomphe::Arc::::from(value); + Ok(TypedCellContent( + value_type, + CellContent(Some(SharedReference(arc))), + )) + } else { + let () = seq + .next_element()? + .ok_or_else(|| de::Error::invalid_length(2, &self))?; + Ok(TypedCellContent(value_type, CellContent(None))) + } + } + } + + deserializer.deserialize_tuple(2, Visitor) + } + } + enum FunctionAndArg<'a> { Owned { fn_type: FunctionId, diff --git a/turbopack/crates/turbo-tasks/src/key_value_pair.rs b/turbopack/crates/turbo-tasks/src/key_value_pair.rs new file mode 100644 index 0000000000000..6aceaea04d4f7 --- /dev/null +++ b/turbopack/crates/turbo-tasks/src/key_value_pair.rs @@ -0,0 +1,8 @@ +pub trait KeyValuePair { + type Key: PartialEq + Eq + std::hash::Hash; + type Value; + fn key(&self) -> Self::Key; + fn value(&self) -> Self::Value; + fn from_key_and_value(key: Self::Key, value: Self::Value) -> Self; + fn into_key_and_value(self) -> (Self::Key, Self::Value); +} diff --git a/turbopack/crates/turbo-tasks/src/lib.rs b/turbopack/crates/turbo-tasks/src/lib.rs index b65a3ae423a27..558f37cf35d8f 100644 --- a/turbopack/crates/turbo-tasks/src/lib.rs +++ b/turbopack/crates/turbo-tasks/src/lib.rs @@ -49,6 +49,7 @@ mod id; mod id_factory; mod invalidation; mod join_iter_ext; +mod key_value_pair; #[doc(hidden)] pub mod macro_helpers; mod magic_any; @@ -91,6 +92,7 @@ pub use invalidation::{ InvalidationReasonSet, Invalidator, }; pub use join_iter_ext::{JoinIterExt, TryFlatJoinIterExt, TryJoinIterExt}; +pub use key_value_pair::KeyValuePair; pub use magic_any::MagicAny; pub use manager::{ dynamic_call, dynamic_this_call, emit, mark_dirty_when_persisted, mark_finished, mark_stateful, @@ -107,7 +109,7 @@ pub use serialization_invalidation::SerializationInvalidator; pub use state::{State, TransientState}; pub use task::{task_input::TaskInput, SharedReference}; pub use trait_ref::{IntoTraitRef, TraitRef}; -pub use turbo_tasks_macros::{function, value_impl, value_trait, TaskInput}; +pub use turbo_tasks_macros::{function, value_impl, value_trait, KeyValuePair, TaskInput}; pub use value::{TransientInstance, TransientValue, Value}; pub use value_type::{TraitMethod, TraitType, ValueType}; pub use vc::{ From 0a450c9f8f06d65754bbf0b253c502ac643be1b4 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Fri, 4 Oct 2024 11:37:54 +0200 Subject: [PATCH 09/19] Fix client reference access causing metadata missing (#70732) --- .../next/src/lib/metadata/resolve-metadata.ts | 9 ----- .../app/layout.tsx | 12 ++++++ .../app/no-override/page-content.tsx | 5 +++ .../app/no-override/page.tsx | 3 ++ .../app/override/page-content.tsx | 5 +++ .../app/override/page.tsx | 8 ++++ ...reexport-client-component-metadata.test.ts | 39 +++++++++++++++++++ 7 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 test/e2e/app-dir/reexport-client-component-metadata/app/layout.tsx create mode 100644 test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page-content.tsx create mode 100644 test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page.tsx create mode 100644 test/e2e/app-dir/reexport-client-component-metadata/app/override/page-content.tsx create mode 100644 test/e2e/app-dir/reexport-client-component-metadata/app/override/page.tsx create mode 100644 test/e2e/app-dir/reexport-client-component-metadata/reexport-client-component-metadata.test.ts diff --git a/packages/next/src/lib/metadata/resolve-metadata.ts b/packages/next/src/lib/metadata/resolve-metadata.ts index cddf197813380..2d9af13106b9b 100644 --- a/packages/next/src/lib/metadata/resolve-metadata.ts +++ b/packages/next/src/lib/metadata/resolve-metadata.ts @@ -32,7 +32,6 @@ import { import { resolveOpenGraph, resolveTwitter } from './resolvers/resolve-opengraph' import { resolveTitle } from './resolvers/resolve-title' import { resolveAsArrayOrUndefined } from './generate/utils' -import { isClientReference } from '../client-reference' import { getComponentTypeModule, getLayoutOrPageModule, @@ -331,9 +330,6 @@ async function getDefinedViewport( props: any, tracingProps: { route: string } ): Promise { - if (isClientReference(mod)) { - return null - } if (typeof mod.generateViewport === 'function') { const { route } = tracingProps return (parent: ResolvingViewport) => @@ -356,11 +352,6 @@ async function getDefinedMetadata( props: any, tracingProps: { route: string } ): Promise { - // Layer is a client component, we just skip it. It can't have metadata exported. - // Return early to avoid accessing properties error for client references. - if (isClientReference(mod)) { - return null - } if (typeof mod.generateMetadata === 'function') { const { route } = tracingProps return (parent: ResolvingMetadata) => diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/layout.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/layout.tsx new file mode 100644 index 0000000000000..624edf9c7c09a --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/layout.tsx @@ -0,0 +1,12 @@ +export default function Layout({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ) +} + +export const metadata = { + title: 'Root Layout', + description: 'Root Description', +} diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page-content.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page-content.tsx new file mode 100644 index 0000000000000..2914d0dd0518e --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page-content.tsx @@ -0,0 +1,5 @@ +'use client' + +export default function PageContent() { + return

Page 2 Content

+} diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page.tsx new file mode 100644 index 0000000000000..daf1494d98c48 --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/no-override/page.tsx @@ -0,0 +1,3 @@ +import PageContent from './page-content' + +export default PageContent diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/override/page-content.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/override/page-content.tsx new file mode 100644 index 0000000000000..6bd93409da909 --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/override/page-content.tsx @@ -0,0 +1,5 @@ +'use client' + +export default function PageContent() { + return

Page 1 Content

+} diff --git a/test/e2e/app-dir/reexport-client-component-metadata/app/override/page.tsx b/test/e2e/app-dir/reexport-client-component-metadata/app/override/page.tsx new file mode 100644 index 0000000000000..ead6009eae1a6 --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/app/override/page.tsx @@ -0,0 +1,8 @@ +import PageContent from './page-content' + +export const metadata = { + title: 'Page 1', + description: 'Page 1 Description', +} + +export default PageContent diff --git a/test/e2e/app-dir/reexport-client-component-metadata/reexport-client-component-metadata.test.ts b/test/e2e/app-dir/reexport-client-component-metadata/reexport-client-component-metadata.test.ts new file mode 100644 index 0000000000000..f80c170677da5 --- /dev/null +++ b/test/e2e/app-dir/reexport-client-component-metadata/reexport-client-component-metadata.test.ts @@ -0,0 +1,39 @@ +import { nextTestSetup } from 'e2e-utils' + +describe('app-dir - reexport-client-component-metadata', () => { + const { next } = nextTestSetup({ + files: __dirname, + }) + + it('should render the page metadata if override', async () => { + const $ = await next.render$('/override') + expect($('title').text()).toBe('Page 1') + expect($('meta[name="description"]').attr('content')).toBe( + 'Page 1 Description' + ) + + const browser = await next.browser('/override') + expect(await browser.elementByCss('title').text()).toBe('Page 1') + expect( + await browser + .elementByCss('meta[name="description"]') + .getAttribute('content') + ).toBe('Page 1 Description') + }) + + it('should render the layout metadata if not override', async () => { + const $ = await next.render$('/no-override') + expect($('title').text()).toBe('Root Layout') + expect($('meta[name="description"]').attr('content')).toBe( + 'Root Description' + ) + + const browser = await next.browser('/no-override') + expect(await browser.elementByCss('title').text()).toBe('Root Layout') + expect( + await browser + .elementByCss('meta[name="description"]') + .getAttribute('content') + ).toBe('Root Description') + }) +}) From d5fd4c1b657d92e4a5940c99469f93a6c5099ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Markb=C3=A5ge?= Date: Fri, 4 Oct 2024 07:00:40 -0400 Subject: [PATCH 10/19] Move reactLoadableManifest/assetPrefix to workStore (#70768) --- .../components/request-async-storage.external.ts | 5 ----- .../components/work-async-storage.external.ts | 6 ++++++ .../next/src/server/after/after-context.test.ts | 2 -- packages/next/src/server/after/after-context.ts | 2 -- .../src/server/async-storage/with-request-store.ts | 12 +----------- .../src/server/async-storage/with-work-store.ts | 14 +++++++++----- .../src/shared/lib/lazy-dynamic/preload-chunks.tsx | 14 +++++++++----- 7 files changed, 25 insertions(+), 30 deletions(-) diff --git a/packages/next/src/client/components/request-async-storage.external.ts b/packages/next/src/client/components/request-async-storage.external.ts index c84d87eb142bd..81b61ed621429 100644 --- a/packages/next/src/client/components/request-async-storage.external.ts +++ b/packages/next/src/client/components/request-async-storage.external.ts @@ -6,7 +6,6 @@ import type { ReadonlyRequestCookies } from '../../server/web/spec-extension/ada // Share the instance module in the next-shared layer import { requestAsyncStorage } from './request-async-storage-instance' with { 'turbopack-transition': 'next-shared' } -import type { DeepReadonly } from '../../shared/lib/deep-readonly' import type { AfterContext } from '../../server/after/after-context' import type { ServerComponentsHmrCache } from '../../server/response-cache' @@ -34,10 +33,6 @@ export interface RequestStore { readonly cookies: ReadonlyRequestCookies readonly mutableCookies: ResponseCookies readonly draftMode: DraftModeProvider - readonly reactLoadableManifest: DeepReadonly< - Record - > - readonly assetPrefix: string readonly afterContext: AfterContext | undefined readonly isHmrRefresh?: boolean readonly serverComponentsHmrCache?: ServerComponentsHmrCache diff --git a/packages/next/src/client/components/work-async-storage.external.ts b/packages/next/src/client/components/work-async-storage.external.ts index c35b683abd5f7..1cef37bf04f7f 100644 --- a/packages/next/src/client/components/work-async-storage.external.ts +++ b/packages/next/src/client/components/work-async-storage.external.ts @@ -4,6 +4,7 @@ import type { DynamicServerError } from './hooks-server-context' import type { FetchMetrics } from '../../server/base-http' import type { Revalidate } from '../../server/lib/revalidate' import type { FallbackRouteParams } from '../../server/request/fallback-params' +import type { DeepReadonly } from '../../shared/lib/deep-readonly' // Share the instance module in the next-shared layer import { workAsyncStorage } from './work-async-storage-instance' with { 'turbopack-transition': 'next-shared' } @@ -62,6 +63,11 @@ export interface WorkStore { requestEndedState?: { ended?: boolean } buildId: string + + readonly reactLoadableManifest?: DeepReadonly< + Record + > + readonly assetPrefix?: string } export type WorkAsyncStorage = AsyncLocalStorage diff --git a/packages/next/src/server/after/after-context.test.ts b/packages/next/src/server/after/after-context.test.ts index c2d93e992440f..df4508f9307e2 100644 --- a/packages/next/src/server/after/after-context.test.ts +++ b/packages/next/src/server/after/after-context.test.ts @@ -498,8 +498,6 @@ const createMockRequestStore = (afterContext: AfterContext): RequestStore => { const partialStore: Partial = { url: { pathname: '/', search: '' }, afterContext: afterContext, - assetPrefix: '', - reactLoadableManifest: {}, draftMode: undefined, isHmrRefresh: false, serverComponentsHmrCache: undefined, diff --git a/packages/next/src/server/after/after-context.ts b/packages/next/src/server/after/after-context.ts index 300423aa3344a..d2816b03c5053 100644 --- a/packages/next/src/server/after/after-context.ts +++ b/packages/next/src/server/after/after-context.ts @@ -141,8 +141,6 @@ function wrapRequestStoreForAfterCallbacks( }, // TODO(after): calling a `cookies.set()` in an after() that's in an action doesn't currently error. mutableCookies: new ResponseCookies(new Headers()), - assetPrefix: requestStore.assetPrefix, - reactLoadableManifest: requestStore.reactLoadableManifest, afterContext: requestStore.afterContext, isHmrRefresh: requestStore.isHmrRefresh, serverComponentsHmrCache: requestStore.serverComponentsHmrCache, diff --git a/packages/next/src/server/async-storage/with-request-store.ts b/packages/next/src/server/async-storage/with-request-store.ts index e8f52205e4310..0dd70bad2eba1 100644 --- a/packages/next/src/server/async-storage/with-request-store.ts +++ b/packages/next/src/server/async-storage/with-request-store.ts @@ -42,15 +42,7 @@ function getMutableCookies( } export type WrapperRenderOpts = RequestLifecycleOpts & - Partial< - Pick< - RenderOpts, - | 'ComponentMod' - | 'onUpdateCookies' - | 'assetPrefix' - | 'reactLoadableManifest' - > - > & { + Partial> & { experimental: Pick previewProps?: __ApiPreviewProps } @@ -196,8 +188,6 @@ export const withRequestStore: WithStore = < return cache.draftMode }, - reactLoadableManifest: renderOpts?.reactLoadableManifest || {}, - assetPrefix: renderOpts?.assetPrefix || '', afterContext: createAfterContext(renderOpts), isHmrRefresh, serverComponentsHmrCache: diff --git a/packages/next/src/server/async-storage/with-work-store.ts b/packages/next/src/server/async-storage/with-work-store.ts index 80376a7b77b1a..bdf44074a8dde 100644 --- a/packages/next/src/server/async-storage/with-work-store.ts +++ b/packages/next/src/server/async-storage/with-work-store.ts @@ -2,7 +2,7 @@ import type { WithStore } from './with-store' import type { WorkStore } from '../../client/components/work-async-storage.external' import type { AsyncLocalStorage } from 'async_hooks' import type { IncrementalCache } from '../lib/incremental-cache' -import type { RenderOptsPartial } from '../app-render/types' +import type { RenderOpts } from '../app-render/types' import type { FetchMetric } from '../base-http' import type { RequestLifecycleOpts } from '../base-server' import type { FallbackRouteParams } from '../request/fallback-params' @@ -30,7 +30,7 @@ export type WorkStoreContext = { isServerAction?: boolean pendingWaitUntil?: Promise experimental: Pick< - RenderOptsPartial['experimental'], + RenderOpts['experimental'], 'isRoutePPREnabled' | 'after' | 'dynamicIO' > @@ -49,9 +49,10 @@ export type WorkStoreContext = { // TODO: remove this when we resolve accessing the store outside the execution context store?: WorkStore } & Pick< - // Pull some properties from RenderOptsPartial so that the docs are also + // Pull some properties from RenderOpts so that the docs are also // mirrored. - RenderOptsPartial, + RenderOpts, + | 'assetPrefix' | 'supportsDynamicResponse' | 'isRevalidate' | 'nextExport' @@ -59,7 +60,8 @@ export type WorkStoreContext = { | 'isDebugDynamicAccesses' | 'buildId' > & - Partial + Partial & + Partial> } export const withWorkStore: WithStore = ( @@ -114,6 +116,8 @@ export const withWorkStore: WithStore = ( requestEndedState, isPrefetchRequest, buildId: renderOpts.buildId, + reactLoadableManifest: renderOpts?.reactLoadableManifest || {}, + assetPrefix: renderOpts?.assetPrefix || '', } // TODO: remove this when we resolve accessing the store outside the execution context diff --git a/packages/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx b/packages/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx index 32eea7fb1c65e..5c6dd47e21359 100644 --- a/packages/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx +++ b/packages/next/src/shared/lib/lazy-dynamic/preload-chunks.tsx @@ -2,7 +2,7 @@ import { preload } from 'react-dom' -import { getExpectedRequestStore } from '../../../client/components/request-async-storage.external' +import { workAsyncStorage } from '../../../client/components/work-async-storage.external' import { encodeURIPath } from '../encode-uri-path' export function PreloadChunks({ @@ -15,13 +15,17 @@ export function PreloadChunks({ return null } - const requestStore = getExpectedRequestStore('next/dynamic preload') + const workStore = workAsyncStorage.getStore() + if (workStore === undefined) { + return null + } + const allFiles = [] // Search the current dynamic call unique key id in react loadable manifest, // and find the corresponding CSS files to preload - if (requestStore.reactLoadableManifest && moduleIds) { - const manifest = requestStore.reactLoadableManifest + if (workStore.reactLoadableManifest && moduleIds) { + const manifest = workStore.reactLoadableManifest for (const key of moduleIds) { if (!manifest[key]) continue const chunks = manifest[key].files @@ -36,7 +40,7 @@ export function PreloadChunks({ return ( <> {allFiles.map((chunk) => { - const href = `${requestStore.assetPrefix}/_next/${encodeURIPath(chunk)}` + const href = `${workStore.assetPrefix}/_next/${encodeURIPath(chunk)}` const isCss = chunk.endsWith('.css') // If it's stylesheet we use `precedence` o help hoist with React Float. // For stylesheets we actually need to render the CSS because nothing else is going to do it so it needs to be part of the component tree. From 5975ae0e5df8cc59f9bb1ee974ea3eee318631de Mon Sep 17 00:00:00 2001 From: Hendrik Liebau Date: Fri, 4 Oct 2024 13:09:03 +0200 Subject: [PATCH 11/19] Unwrap `registerServerReference` function (#70563) In the same vein as #69190, where we already unwrapped `createServerReference`, we now also unwrap `registerServerReference`, which is required for React to select the right call stack frame when generating source locations for server actions (see facebook/react#30741). Whereas unwrapping of `createServerReference` was required for server actions that are imported into client components, unwrapping `registerServerReference` is needed for server actions that are passed from server components to client components. This does not fully enable the source mapping just yet. For this to work end-to-end, the next step is to generate proper spans in the SWC transform, which will be done in the next PR. --- .../src/transforms/server_actions.rs | 12 ++++++------ .../errors/server-actions/client-graph/1/output.js | 2 +- .../errors/server-actions/server-graph/1/output.js | 2 +- .../errors/server-actions/server-graph/2/output.js | 2 +- .../errors/server-actions/server-graph/3/output.js | 2 +- .../errors/server-actions/server-graph/6/output.js | 2 +- .../errors/server-actions/server-graph/7/output.js | 2 +- .../errors/server-actions/server-graph/8/output.js | 2 +- .../tests/fixture/server-actions/server/1/output.js | 4 ++-- .../tests/fixture/server-actions/server/10/output.js | 2 +- .../tests/fixture/server-actions/server/11/output.js | 2 +- .../tests/fixture/server-actions/server/12/output.js | 2 +- .../tests/fixture/server-actions/server/13/output.js | 4 ++-- .../tests/fixture/server-actions/server/14/output.js | 2 +- .../tests/fixture/server-actions/server/15/output.js | 4 ++-- .../tests/fixture/server-actions/server/16/output.js | 6 +++--- .../tests/fixture/server-actions/server/17/output.js | 6 +++--- .../tests/fixture/server-actions/server/18/output.js | 4 ++-- .../tests/fixture/server-actions/server/19/output.js | 2 +- .../tests/fixture/server-actions/server/2/output.js | 4 ++-- .../tests/fixture/server-actions/server/20/output.js | 2 +- .../tests/fixture/server-actions/server/21/output.js | 6 +++--- .../tests/fixture/server-actions/server/22/output.js | 8 ++++---- .../tests/fixture/server-actions/server/23/output.js | 4 ++-- .../tests/fixture/server-actions/server/24/output.js | 2 +- .../tests/fixture/server-actions/server/25/output.js | 4 ++-- .../tests/fixture/server-actions/server/26/output.js | 2 +- .../tests/fixture/server-actions/server/27/output.js | 10 +++++----- .../tests/fixture/server-actions/server/28/output.js | 6 +++--- .../tests/fixture/server-actions/server/29/output.js | 6 +++--- .../tests/fixture/server-actions/server/3/output.js | 2 +- .../tests/fixture/server-actions/server/30/output.js | 8 ++++---- .../tests/fixture/server-actions/server/31/output.js | 4 ++-- .../tests/fixture/server-actions/server/32/output.js | 2 +- .../tests/fixture/server-actions/server/33/output.js | 2 +- .../tests/fixture/server-actions/server/34/output.js | 2 +- .../tests/fixture/server-actions/server/35/output.js | 2 +- .../tests/fixture/server-actions/server/36/output.js | 4 ++-- .../tests/fixture/server-actions/server/37/output.js | 2 +- .../tests/fixture/server-actions/server/38/output.js | 2 +- .../tests/fixture/server-actions/server/4/output.js | 8 ++++---- .../tests/fixture/server-actions/server/5/output.js | 2 +- .../tests/fixture/server-actions/server/6/output.js | 2 +- .../tests/fixture/server-actions/server/7/output.js | 8 ++++---- .../tests/fixture/server-actions/server/8/output.js | 2 +- .../tests/fixture/server-actions/server/9/output.js | 6 +++--- .../loaders/next-flight-loader/server-reference.ts | 6 +----- 47 files changed, 89 insertions(+), 93 deletions(-) diff --git a/crates/next-custom-transforms/src/transforms/server_actions.rs b/crates/next-custom-transforms/src/transforms/server_actions.rs index a4346b165070a..bf6d385fe068d 100644 --- a/crates/next-custom-transforms/src/transforms/server_actions.rs +++ b/crates/next-custom-transforms/src/transforms/server_actions.rs @@ -1626,7 +1626,6 @@ impl VisitMut for ServerActions { if (self.has_action || self.has_cache) && self.config.is_react_server_layer { // Inlined actions are only allowed on the server layer. // import { registerServerReference } from 'private-next-rsc-server-reference' - // registerServerReference("action_id") new.push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { span: DUMMY_SP, specifiers: vec![ImportSpecifier::Named(ImportNamedSpecifier { @@ -1825,21 +1824,22 @@ fn annotate_ident_as_server_reference( bound: Vec>, action_id: String, ) -> Expr { - // Add the proxy wrapper call `registerServerReference($$id, $$bound, myAction, - // maybe_orig_action)`. - + // registerServerReference(reference, id, null) let proxy_expr = Expr::Call(CallExpr { span: DUMMY_SP, callee: quote_ident!("registerServerReference").as_callee(), args: vec![ - // $$id + ExprOrSpread { + spread: None, + expr: Box::new(Expr::Ident(ident)), + }, ExprOrSpread { spread: None, expr: Box::new(action_id.clone().into()), }, ExprOrSpread { spread: None, - expr: Box::new(Expr::Ident(ident)), + expr: Box::new(Expr::Lit(Lit::Null(Null { span: DUMMY_SP }))), }, ], ..Default::default() diff --git a/crates/next-custom-transforms/tests/errors/server-actions/client-graph/1/output.js b/crates/next-custom-transforms/tests/errors/server-actions/client-graph/1/output.js index e5d9d5a247959..0ad22420ae493 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/client-graph/1/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/client-graph/1/output.js @@ -1,5 +1,5 @@ /* __next_internal_client_entry_do_not_use__ default auto */ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ export default function App() { - var fn = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); + var fn = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); return
App
; } export async function $$RSC_SERVER_ACTION_0() {} diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/1/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/1/output.js index ecba6f9f39448..01b76c30cb1b6 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/1/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/1/output.js @@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo); +registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null); diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js index 1dd3034f34616..31450221dc7b6 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/2/output.js @@ -6,4 +6,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ bar ]); -registerServerReference("ac840dcaf5e8197cb02b7f3a43c119b7a770b272", bar); +registerServerReference(bar, "ac840dcaf5e8197cb02b7f3a43c119b7a770b272", null); diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/3/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/3/output.js index 29d945f830519..720e5a317895c 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/3/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/3/output.js @@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ x ]); -registerServerReference("b78c261f135a7a852508c2920bd7228020ff4bd7", x); +registerServerReference(x, "b78c261f135a7a852508c2920bd7228020ff4bd7", null); diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/6/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/6/output.js index 62c809ec82aff..99dc4369c7857 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/6/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/6/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -export default registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +export default registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() {} import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([]); diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/7/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/7/output.js index d923f3a1e0e57..12e411109bf19 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/7/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/7/output.js @@ -1,4 +1,4 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -const foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +const foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() {} diff --git a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js index d1378eab0bda2..c4b2b45a6996e 100644 --- a/crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js +++ b/crates/next-custom-transforms/tests/errors/server-actions/server-graph/8/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -const foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +const foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() { 'use strict'; } diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/1/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/1/output.js index 0f40d8d97fdae..db3182526d9ef 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/1/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/1/output.js @@ -2,7 +2,7 @@ import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; import deleteFromDb from 'db'; export function Item({ id1, id2 }) { - var deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ id1, id2 ])); @@ -18,7 +18,7 @@ export default function Home() { name: 'John', test: 'test' }; - const action = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + const action = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ info.name, info.test ])); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js index 871fdbb306f18..9f6837fc25e39 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/10/output.js @@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo); +registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/11/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/11/output.js index 17f89f7ec80df..8136f99f6e750 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/11/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/11/output.js @@ -5,4 +5,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ $$RSC_SERVER_ACTION_0 ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", $$RSC_SERVER_ACTION_0); +registerServerReference($$RSC_SERVER_ACTION_0, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/12/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/12/output.js index 9e5ece55cb20a..e26854b05431a 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/12/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/12/output.js @@ -6,4 +6,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo); +registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/13/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/13/output.js index c958051367890..062de8df3b921 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/13/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/13/output.js @@ -9,5 +9,5 @@ ensureServerEntryExports([ foo, bar ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo); -registerServerReference("ac840dcaf5e8197cb02b7f3a43c119b7a770b272", bar); +registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); +registerServerReference(bar, "ac840dcaf5e8197cb02b7f3a43c119b7a770b272", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/14/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/14/output.js index fa283adc6262e..d0e615e2a5f00 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/14/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/14/output.js @@ -7,4 +7,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo); +registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/15/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/15/output.js index fe58be462a819..805de1fbcea41 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/15/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/15/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"90b5db271335765a4b0eab01f044b381b5ebd5cd":"$$RSC_SERVER_ACTION_1","c18c215a6b7cdc64bf709f3a714ffdef1bf9651d":"default"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -export default $$RSC_SERVER_ACTION_0 = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1); +export default $$RSC_SERVER_ACTION_0 = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null); var $$RSC_SERVER_ACTION_0; export async function $$RSC_SERVER_ACTION_1(a, b) { console.log(a, b); @@ -9,4 +9,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ $$RSC_SERVER_ACTION_0 ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", $$RSC_SERVER_ACTION_0); +registerServerReference($$RSC_SERVER_ACTION_0, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/16/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/16/output.js index 2120d3e3a01f5..7a4b446a6b6c7 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/16/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/16/output.js @@ -4,7 +4,7 @@ import deleteFromDb from 'db'; const v1 = 'v1'; export function Item({ id1, id2 }) { const v2 = id2; - const deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + const deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ id1, v2 ])); @@ -17,7 +17,7 @@ export async function $$RSC_SERVER_ACTION_0($$ACTION_CLOSURE_BOUND) { await deleteFromDb($$ACTION_ARG_1); } const f = (x)=>{ - var g = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + var g = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ x ])); }; @@ -26,7 +26,7 @@ export async function $$RSC_SERVER_ACTION_1($$ACTION_CLOSURE_BOUND, y, ...z) { return $$ACTION_ARG_0 + y + z[0]; } const g = (x)=>{ - f = registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ + f = registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ x ])); }; diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/17/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/17/output.js index 4a51123215120..dd77088277017 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/17/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/17/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","ab21efdafbe611287bc25c0462b1e0510d13e48b":"foo","ac840dcaf5e8197cb02b7f3a43c119b7a770b272":"bar"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -export const foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +export const foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() {} const bar = async ()=>{}; export { bar }; @@ -9,5 +9,5 @@ ensureServerEntryExports([ foo, bar ]); -registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo); -registerServerReference("ac840dcaf5e8197cb02b7f3a43c119b7a770b272", bar); +registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null); +registerServerReference(bar, "ac840dcaf5e8197cb02b7f3a43c119b7a770b272", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/18/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/18/output.js index 5bed1099b5052..b3083ea4e8eb1 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/18/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/18/output.js @@ -5,13 +5,13 @@ const v1 = 'v1'; export function Item({ id1, id2 }) { const v2 = id2; return <> - - ; } -export const action = withValidate(registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1)); +export const action = withValidate(registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null)); export async function $$RSC_SERVER_ACTION_1() {} diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/20/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/20/output.js index c12b50b3bd560..7d761f618f36c 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/20/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/20/output.js @@ -8,4 +8,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ foo ]); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", foo); +registerServerReference(foo, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/21/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/21/output.js index b62e7541fba26..9f53ba95b064f 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/21/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/21/output.js @@ -4,7 +4,7 @@ import { validator, another } from 'auth'; const x = 1; export default function Page() { const y = 1; - return ; } @@ -12,7 +12,7 @@ export async function $$RSC_SERVER_ACTION_1($$ACTION_CLOSURE_BOUND, z) { var [$$ACTION_ARG_0] = await decryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$ACTION_CLOSURE_BOUND); return x + $$ACTION_ARG_0 + z; } -validator(registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2)); +validator(registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null)); export async function $$RSC_SERVER_ACTION_2() {} -another(validator(registerServerReference("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", $$RSC_SERVER_ACTION_3))); +another(validator(registerServerReference($$RSC_SERVER_ACTION_3, "9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", null))); export async function $$RSC_SERVER_ACTION_3() {} diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/22/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/22/output.js index 93f4eab209ffc..55c9df4878f4e 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/22/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/22/output.js @@ -1,9 +1,9 @@ /* __next_internal_action_entry_do_not_use__ {"1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91":"$$RSC_SERVER_ACTION_2","6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","c18c215a6b7cdc64bf709f3a714ffdef1bf9651d":"default","f14702b5a021dd117f7ec7a3c838f397c2046d3b":"action"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; import { validator } from 'auth'; -export const action = validator(registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0)); +export const action = validator(registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null)); export async function $$RSC_SERVER_ACTION_0() {} -export default $$RSC_SERVER_ACTION_1 = validator(registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2)); +export default $$RSC_SERVER_ACTION_1 = validator(registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null)); var $$RSC_SERVER_ACTION_1; export async function $$RSC_SERVER_ACTION_2() {} import { ensureServerEntryExports } from "private-next-rsc-action-validate"; @@ -11,5 +11,5 @@ ensureServerEntryExports([ action, $$RSC_SERVER_ACTION_1 ]); -registerServerReference("f14702b5a021dd117f7ec7a3c838f397c2046d3b", action); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", $$RSC_SERVER_ACTION_1); +registerServerReference(action, "f14702b5a021dd117f7ec7a3c838f397c2046d3b", null); +registerServerReference($$RSC_SERVER_ACTION_1, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/23/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/23/output.js index f73a284625cf8..41a6df665af0c 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/23/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/23/output.js @@ -1,11 +1,11 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","90b5db271335765a4b0eab01f044b381b5ebd5cd":"$$RSC_SERVER_ACTION_1"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; export default function Page({ foo, x, y }) { - var action = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ x ])); action.bind(null, foo[0], foo[1], foo.x, foo[y]); - const action2 = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + const action2 = registerServerReference($$RSC_SERVER_ACTION_1,"90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ x ])); action2.bind(null, foo[0], foo[1], foo.x, foo[y]); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/24/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/24/output.js index 90bfd42b0bd06..4f9cc41dc2e07 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/24/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/24/output.js @@ -1,7 +1,7 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; export default function Page({ foo, x, y }) { - var action = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ foo ])); } diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/25/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/25/output.js index ce89937de185a..9573b61ddf9c3 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/25/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/25/output.js @@ -7,7 +7,7 @@ export function Item({ id1, id2 }) { id1++; return ; })(); - var deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ id1, id2 ])); @@ -26,7 +26,7 @@ export function Item2({ id1, id2 }) { id1++; temp.push(); return temp; - var deleteItem = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + var deleteItem = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ id1, id2 ])); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/26/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/26/output.js index f49071af4a4ef..93fb9da457e42 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/26/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/26/output.js @@ -1,7 +1,7 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; const noop = (action)=>action; -export const log = noop(registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0)); +export const log = noop(registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null)); export async function $$RSC_SERVER_ACTION_0(data) { console.log(data); } diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/27/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/27/output.js index af4b630208586..d60eb618c1027 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/27/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/27/output.js @@ -3,24 +3,24 @@ // 2. Actual action functions should be renamed to `$$ACTION_...` and got exported. /* __next_internal_action_entry_do_not_use__ {"1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91":"$$RSC_SERVER_ACTION_2","6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","90b5db271335765a4b0eab01f044b381b5ebd5cd":"$$RSC_SERVER_ACTION_1","9ed0cc47abc4e1c64320cf42b74ae60b58c40f00":"$$RSC_SERVER_ACTION_3","a9b2939c1f39073a6bed227fd20233064c8b7869":"$$RSC_SERVER_ACTION_4"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -var foo = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +var foo = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0() { console.log(1); } export { foo }; -export var bar = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1); +export var bar = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null); export async function $$RSC_SERVER_ACTION_1() { console.log(2); } -export default registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2); +export default registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null); export async function $$RSC_SERVER_ACTION_2() { console.log(3); } -export const qux = registerServerReference("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", $$RSC_SERVER_ACTION_3); +export const qux = registerServerReference($$RSC_SERVER_ACTION_3, "9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", null); export async function $$RSC_SERVER_ACTION_3() { console.log(4); } -export const quux = registerServerReference("a9b2939c1f39073a6bed227fd20233064c8b7869", $$RSC_SERVER_ACTION_4); +export const quux = registerServerReference($$RSC_SERVER_ACTION_4, "a9b2939c1f39073a6bed227fd20233064c8b7869", null); export async function $$RSC_SERVER_ACTION_4() { console.log(5); } diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/28/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/28/output.js index ddc41f54db012..f2ef81a4cecf0 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/28/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/28/output.js @@ -2,7 +2,7 @@ import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; let a, f; function Comp(b, c, ...g) { - return registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ + return registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ b, c, g @@ -24,7 +24,7 @@ export async function $$RSC_SERVER_ACTION_2($$ACTION_CLOSURE_BOUND, d) { window }); console.log(a, $$ACTION_ARG_0, action2); - var action2 = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action2 = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ $$ACTION_ARG_1, d, f, @@ -32,7 +32,7 @@ export async function $$RSC_SERVER_ACTION_2($$ACTION_CLOSURE_BOUND, d) { ])); return [ action2, - registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ action2, $$ACTION_ARG_1, d diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/29/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/29/output.js index 64600d3ab41c6..29265f8485ba7 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/29/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/29/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"28baf972d345b86b747ad0df73d75a0088a42214":"dec","6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0","c18c215a6b7cdc64bf709f3a714ffdef1bf9651d":"default"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -export const dec = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +export const dec = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0(value) { return value - 1; } @@ -11,5 +11,5 @@ ensureServerEntryExports([ dec, dec ]); -registerServerReference("28baf972d345b86b747ad0df73d75a0088a42214", dec); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", dec); +registerServerReference(dec, "28baf972d345b86b747ad0df73d75a0088a42214", null); +registerServerReference(dec, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/3/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/3/output.js index 6062a67476b01..443d04812d7e1 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/3/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/3/output.js @@ -8,4 +8,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ myAction ]); -registerServerReference("e10665baac148856374b2789aceb970f66fec33e", myAction); +registerServerReference(myAction, "e10665baac148856374b2789aceb970f66fec33e", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/30/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/30/output.js index 165126a4beca4..ffc86c3419dd8 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/30/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/30/output.js @@ -2,7 +2,7 @@ import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; let a, f; export async function action0(b, c, ...g) { - return registerServerReference("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", $$RSC_SERVER_ACTION_2).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ + return registerServerReference($$RSC_SERVER_ACTION_2, "1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", null).bind(null, encryptActionBoundArgs("1c36b06e398c97abe5d5d7ae8c672bfddf4e1b91", [ b, c, g @@ -24,7 +24,7 @@ export async function $$RSC_SERVER_ACTION_2($$ACTION_CLOSURE_BOUND, d) { window }); console.log(a, $$ACTION_ARG_0, action2); - var action2 = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action2 = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ $$ACTION_ARG_1, d, f, @@ -32,7 +32,7 @@ export async function $$RSC_SERVER_ACTION_2($$ACTION_CLOSURE_BOUND, d) { ])); return [ action2, - registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ action2, $$ACTION_ARG_1, d @@ -43,4 +43,4 @@ import { ensureServerEntryExports } from "private-next-rsc-action-validate"; ensureServerEntryExports([ action0 ]); -registerServerReference("0090eaf4e1f08a2d94f6be401e54a2ded399b87c", action0); +registerServerReference(action0, "0090eaf4e1f08a2d94f6be401e54a2ded399b87c", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/31/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/31/output.js index 80696045aad85..e4c3902986354 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/31/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/31/output.js @@ -21,5 +21,5 @@ ensureServerEntryExports([ action, action2 ]); -registerServerReference("f14702b5a021dd117f7ec7a3c838f397c2046d3b", action); -registerServerReference("abf760c735ba66c4c26a2913864dd7e28fb88a91", action2); \ No newline at end of file +registerServerReference(action, "f14702b5a021dd117f7ec7a3c838f397c2046d3b", null); +registerServerReference(action2, "abf760c735ba66c4c26a2913864dd7e28fb88a91", null); \ No newline at end of file diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/32/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/32/output.js index c52017e565570..3d03a4fcc3855 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/32/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/32/output.js @@ -16,7 +16,7 @@ export function Component() { current: 1 } }; - var action = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ data, baz.value, foo diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/33/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/33/output.js index 746ab409954c7..d946877ad2236 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/33/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/33/output.js @@ -5,7 +5,7 @@ const v = 'world'; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function fn() { return 'hello, ' + v; }); -var fn = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +var fn = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); export async function Component() { const data = await fn(); return
{data}
; diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/34/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/34/output.js index f3b72b54f2074..dd2c15cd89a78 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/34/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/34/output.js @@ -4,4 +4,4 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function foo() { return 'data'; }); -export var foo = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +export var foo = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/35/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/35/output.js index 19215b7828c63..c8abbfed26710 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/35/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/35/output.js @@ -4,4 +4,4 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function() { return 'data'; }); -export const my_fn = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +export const my_fn = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/36/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/36/output.js index 3bef6468a5e06..46263566f62ed 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/36/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/36/output.js @@ -4,8 +4,8 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function foo() { return 'data A'; }); -export var foo = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +export var foo = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); export var $$RSC_SERVER_CACHE_1 = $$cache__("default", "951c375b4a6a6e89d67b743ec5808127cfde405d", async function bar() { return 'data B'; }); -export var bar = registerServerReference("951c375b4a6a6e89d67b743ec5808127cfde405d", $$RSC_SERVER_CACHE_1); +export var bar = registerServerReference($$RSC_SERVER_CACHE_1, "951c375b4a6a6e89d67b743ec5808127cfde405d", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/37/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/37/output.js index 2dc9d2c4832c0..cd308c806a2bc 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/37/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/37/output.js @@ -4,7 +4,7 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("default", "3128060c414d59f8552e4788b846c0d2b7f74743", async function fn() { return 'foo'; }); -var fn = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +var fn = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); async function Component() { const data = await fn(); return
{data}
; diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/38/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/38/output.js index 9f5015d001045..b0b725ebaa0b0 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/38/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/38/output.js @@ -4,4 +4,4 @@ import { cache as $$cache__ } from "private-next-rsc-cache-wrapper"; export var $$RSC_SERVER_CACHE_0 = $$cache__("x", "3128060c414d59f8552e4788b846c0d2b7f74743", async function foo() { return 'data'; }); -export var foo = registerServerReference("3128060c414d59f8552e4788b846c0d2b7f74743", $$RSC_SERVER_CACHE_0); +export var foo = registerServerReference($$RSC_SERVER_CACHE_0, "3128060c414d59f8552e4788b846c0d2b7f74743", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/4/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/4/output.js index 5090febe8d7f5..1ca03b07bec91 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/4/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/4/output.js @@ -5,7 +5,7 @@ export async function b() {} export async function c() {} function d() {} function Foo() { - var e = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); + var e = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); } export async function $$RSC_SERVER_ACTION_0() {} import { ensureServerEntryExports } from "private-next-rsc-action-validate"; @@ -14,6 +14,6 @@ ensureServerEntryExports([ b, c ]); -registerServerReference("6e7bc104e4d6e7fda190c4a51be969cfd0be6d6d", a); -registerServerReference("d1f7eb64271d7c601dfef7d4d7053de1c2ca4338", b); -registerServerReference("1ab723c80dcca470e0410b4b2a2fc2bf21f41476", c); +registerServerReference(a, "6e7bc104e4d6e7fda190c4a51be969cfd0be6d6d", null); +registerServerReference(b, "d1f7eb64271d7c601dfef7d4d7053de1c2ca4338", null); +registerServerReference(c, "1ab723c80dcca470e0410b4b2a2fc2bf21f41476", null); diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/5/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/5/output.js index 490d75c78c75f..df3c005f70cc3 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/5/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/5/output.js @@ -4,7 +4,7 @@ import deleteFromDb from 'db'; const v1 = 'v1'; export function Item({ id1, id2, id3, id4 }) { const v2 = id2; - var deleteItem = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var deleteItem = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ id1, v2, id3, diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/6/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/6/output.js index b9e4ca71cad96..d25de0bface7c 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/6/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/6/output.js @@ -19,7 +19,7 @@ export function y(p, [p1, { p2 }], ...p3) { if (true) { const f8 = 1; } - var action = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + var action = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ f2, f11, p, diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/7/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/7/output.js index 50556a98092c0..754dacb16650a 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/7/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/7/output.js @@ -2,7 +2,7 @@ import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; import deleteFromDb from 'db'; export function Item1(product, foo, bar) { - const a = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ + const a = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null).bind(null, encryptActionBoundArgs("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", [ product, foo, bar @@ -14,7 +14,7 @@ export async function $$RSC_SERVER_ACTION_0($$ACTION_CLOSURE_BOUND) { await deleteFromDb($$ACTION_ARG_0.id, $$ACTION_ARG_0?.foo, $$ACTION_ARG_0.bar.baz, $$ACTION_ARG_0[$$ACTION_ARG_1, $$ACTION_ARG_2]); } export function Item2(product, foo, bar) { - var deleteItem2 = registerServerReference("90b5db271335765a4b0eab01f044b381b5ebd5cd", $$RSC_SERVER_ACTION_1).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ + var deleteItem2 = registerServerReference($$RSC_SERVER_ACTION_1, "90b5db271335765a4b0eab01f044b381b5ebd5cd", null).bind(null, encryptActionBoundArgs("90b5db271335765a4b0eab01f044b381b5ebd5cd", [ product, foo, bar @@ -26,7 +26,7 @@ export async function $$RSC_SERVER_ACTION_1($$ACTION_CLOSURE_BOUND) { await deleteFromDb($$ACTION_ARG_0.id, $$ACTION_ARG_0?.foo, $$ACTION_ARG_0.bar.baz, $$ACTION_ARG_0[$$ACTION_ARG_1, $$ACTION_ARG_2]); } export function Item3(product, foo, bar) { - const deleteItem3 = registerServerReference("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", $$RSC_SERVER_ACTION_3).bind(null, encryptActionBoundArgs("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", [ + const deleteItem3 = registerServerReference($$RSC_SERVER_ACTION_3, "9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", null).bind(null, encryptActionBoundArgs("9ed0cc47abc4e1c64320cf42b74ae60b58c40f00", [ product, foo, bar @@ -38,7 +38,7 @@ export async function $$RSC_SERVER_ACTION_3($$ACTION_CLOSURE_BOUND) { await deleteFromDb($$ACTION_ARG_0.id, $$ACTION_ARG_0?.foo, $$ACTION_ARG_0.bar.baz, $$ACTION_ARG_0[$$ACTION_ARG_1, $$ACTION_ARG_2]); } export function Item4(product, foo, bar) { - const deleteItem4 = registerServerReference("a9b2939c1f39073a6bed227fd20233064c8b7869", $$RSC_SERVER_ACTION_4).bind(null, encryptActionBoundArgs("a9b2939c1f39073a6bed227fd20233064c8b7869", [ + const deleteItem4 = registerServerReference($$RSC_SERVER_ACTION_4, "a9b2939c1f39073a6bed227fd20233064c8b7869", null).bind(null, encryptActionBoundArgs("a9b2939c1f39073a6bed227fd20233064c8b7869", [ product, foo, bar diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/8/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/8/output.js index b3875434a874c..4a80bff6cc40e 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/8/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/8/output.js @@ -1,6 +1,6 @@ /* __next_internal_action_entry_do_not_use__ {"6a88810ecce4a4e8b59d53b8327d7e98bbf251d7":"$$RSC_SERVER_ACTION_0"} */ import { registerServerReference } from "private-next-rsc-server-reference"; import { encryptActionBoundArgs, decryptActionBoundArgs } from "private-next-rsc-action-encryption"; -var myAction = registerServerReference("6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", $$RSC_SERVER_ACTION_0); +var myAction = registerServerReference($$RSC_SERVER_ACTION_0, "6a88810ecce4a4e8b59d53b8327d7e98bbf251d7", null); export async function $$RSC_SERVER_ACTION_0(a, b, c) { // comment 'use strict'; diff --git a/crates/next-custom-transforms/tests/fixture/server-actions/server/9/output.js b/crates/next-custom-transforms/tests/fixture/server-actions/server/9/output.js index f9bf82a68ed6f..b64224de832ca 100644 --- a/crates/next-custom-transforms/tests/fixture/server-actions/server/9/output.js +++ b/crates/next-custom-transforms/tests/fixture/server-actions/server/9/output.js @@ -13,6 +13,6 @@ ensureServerEntryExports([ bar, qux ]); -registerServerReference("ab21efdafbe611287bc25c0462b1e0510d13e48b", foo); -registerServerReference("050e3854b72b19e3c7e3966a67535543a90bf7e0", bar); -registerServerReference("c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", qux); +registerServerReference(foo, "ab21efdafbe611287bc25c0462b1e0510d13e48b", null); +registerServerReference(bar, "050e3854b72b19e3c7e3966a67535543a90bf7e0", null); +registerServerReference(qux, "c18c215a6b7cdc64bf709f3a714ffdef1bf9651d", null); diff --git a/packages/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts b/packages/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts index 642d0293568bd..e8140f2ffac04 100644 --- a/packages/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts +++ b/packages/next/src/build/webpack/loaders/next-flight-loader/server-reference.ts @@ -1,6 +1,2 @@ /* eslint-disable import/no-extraneous-dependencies */ -import { registerServerReference as flightRegisterServerReference } from 'react-server-dom-webpack/server.edge' - -export function registerServerReference(id: string, action: any) { - return flightRegisterServerReference(action, id, null) -} +export { registerServerReference } from 'react-server-dom-webpack/server.edge' From 03911756411e8aec02b3e70d31f83b866a8a052b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 4 Oct 2024 20:39:31 +0900 Subject: [PATCH 12/19] fix(turbopack): Remove wrong check for `__turbopack_refresh__` (#70696) ### What? Remove a wrong check for turbopack tree shaking ### Why? It's not necessary anymore ### How? --- test/integration/telemetry/pages/warning.skip | 4 ++-- .../app-dir/actions-tree-shaking/reexport/reexport.test.ts | 3 ++- .../crates/turbopack-ecmascript/src/tree_shake/util.rs | 7 ------- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/test/integration/telemetry/pages/warning.skip b/test/integration/telemetry/pages/warning.skip index 1d3d67cd64707..a6555bee4a49c 100644 --- a/test/integration/telemetry/pages/warning.skip +++ b/test/integration/telemetry/pages/warning.skip @@ -1,8 +1,8 @@ function a(v) { return v } -;['index.js'].forEach(f => { - require(a('./dynamic-file-imports/' + f)) +;['index.js'].forEach(async f => { + await import(a('./dynamic-file-imports/' + f)) }) export default () => 'Warn' diff --git a/test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts b/test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts index b7bbaf4e082dc..2fa21f66008e1 100644 --- a/test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts +++ b/test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts @@ -36,7 +36,8 @@ import { retry } from 'next-test-utils' rsc: process.env.TURBOPACK ? 1 : 3, }, 'app/named-reexport/client/page': { - 'action-browser': 3, + // Turbopack supports tree-shaking these re-exports + 'action-browser': process.env.TURBOPACK ? 1 : 3, }, }) }) diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/util.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/util.rs index 23b08f10a1d0e..ba5ab4e77af64 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/util.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/util.rs @@ -519,13 +519,6 @@ impl Visit for ShouldSkip { return; } - // This is needed to pass some tests even if we enable tree shaking only for production - // builds. - if n.is_ident_ref_to("__turbopack_refresh__") { - self.skip = true; - return; - } - n.visit_children_with(self); } From 0eb87da22c8ccd47da50ee10ab2b371fc6b28050 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 4 Oct 2024 21:18:26 +0900 Subject: [PATCH 13/19] fix(turbopack): Split ModulePart into eval vs non-eval (#70782) ### What? Treat `baz` in the code below as a re-export. ```js import { baz } from '../actions' // Ensure side effects won't affect tree shaking and DCE console.log(1) export { baz } ``` ### Why? It's required to fix tree shaking for client bundles. x-ref: https://vercel.slack.com/archives/C07GX6S95UG/p1727270139934499 ### How? Co-authored-by: Tobias Koppers --- .../crates/turbopack-core/src/resolve/mod.rs | 2 +- .../src/analyzer/imports.rs | 5 +- .../src/references/mod.rs | 5 +- .../src/tree_shake/asset.rs | 57 +- .../src/tree_shake/graph.rs | 72 +- .../src/tree_shake/merge.rs | 2 +- .../tests/tree-shaker/analyzer/1/output.md | 220 ++--- .../tests/tree-shaker/analyzer/2/output.md | 220 ++--- .../tests/tree-shaker/analyzer/3/output.md | 116 +-- .../analyzer/amphtml-document/output.md | 104 +-- .../tree-shaker/analyzer/app-route/output.md | 144 +--- .../analyzer/assign-before-decl-fn/output.md | 28 +- .../analyzer/assign-before-decl-var/output.md | 20 +- .../analyzer/combined-export/output.md | 20 +- .../tree-shaker/analyzer/complex/output.md | 240 ++---- .../tests/tree-shaker/analyzer/dce/input.js | 5 + .../tests/tree-shaker/analyzer/dce/output.md | 218 +++++ .../analyzer/export-named/output.md | 10 +- .../tree-shaker/analyzer/failed-1/output.md | 80 +- .../tree-shaker/analyzer/failed-2/output.md | 241 ++---- .../tree-shaker/analyzer/failed-3/output.md | 336 +++----- .../tree-shaker/analyzer/grouping/output.md | 180 ++--- .../analyzer/ipc-evaluate/output.md | 48 +- .../tree-shaker/analyzer/ipc-index/output.md | 336 +++----- .../tree-shaker/analyzer/let-bug-1/output.md | 80 +- .../tree-shaker/analyzer/logger/output.md | 80 +- .../tree-shaker/analyzer/mui-sys/output.md | 752 +++++------------- .../analyzer/multi-export/output.md | 20 +- .../tree-shaker/analyzer/nanoid/output.md | 216 ++--- .../analyzer/next-response/output.md | 100 +-- .../analyzer/nextjs-tracer/output.md | 264 ++---- .../tree-shaker/analyzer/node-fetch/output.md | 38 +- .../tree-shaker/analyzer/otel-core/output.md | 70 +- .../analyzer/route-handler/output.md | 30 +- .../tree-shaker/analyzer/route-kind/output.md | 28 +- .../tree-shaker/analyzer/shared-2/output.md | 126 +-- .../shared-and-side-effects/output.md | 94 +-- .../analyzer/shared-regression/output.md | 126 +-- .../analyzer/simple-vars-1/output.md | 20 +- .../tree-shaker/analyzer/simple/output.md | 50 +- .../analyzer/template-pages/output.md | 498 +++--------- .../analyzer/test-config-1/output.md | 232 ++---- .../tree-shaker/analyzer/tla-1/output.md | 32 +- .../tree-shaker/analyzer/typeof-1/output.md | 40 +- .../analyzer/write-order/output.md | 102 +-- ...e-shake_dynamic-import_input_lib_e521f1.js | 26 +- ...ake_dynamic-import_input_lib_e521f1.js.map | 76 +- ...-tree-shake_export-named_input_1823b4._.js | 15 +- ...e-shake_export-named_input_1823b4._.js.map | 72 +- ...e-shake_export-namespace_input_6b9ee3._.js | 30 +- ...ake_export-namespace_input_6b9ee3._.js.map | 108 +-- ...e-shake_import-named-all_input_84a6ca._.js | 14 +- ...ake_import-named-all_input_84a6ca._.js.map | 56 +- ...-tree-shake_import-named_input_4f48a0._.js | 14 +- ...e-shake_import-named_input_4f48a0._.js.map | 56 +- ...e-shake_import-namespace_input_519014._.js | 29 +- ...ake_import-namespace_input_519014._.js.map | 92 +-- ...shake_import-side-effect_input_55cb06._.js | 10 +- ...e_import-side-effect_input_55cb06._.js.map | 40 +- ...hake_require-side-effect_input_c7b81e._.js | 26 +- ..._require-side-effect_input_c7b81e._.js.map | 80 +- ...ke_tree-shake-test-1_input_index_950e23.js | 26 +- ...ree-shake-test-1_input_index_950e23.js.map | 76 +- .../snapshot/tree-shaking/dce/input/index.js | 5 + .../snapshot/tree-shaking/dce/input/module.js | 7 + .../snapshot/tree-shaking/dce/options.json | 3 + ...hot_tree-shaking_dce_input_index_04960d.js | 6 + ...tree-shaking_dce_input_index_04960d.js.map | 5 + ...napshot_tree-shaking_dce_input_757209._.js | 59 ++ ...hot_tree-shaking_dce_input_757209._.js.map | 15 + 70 files changed, 2178 insertions(+), 4475 deletions(-) create mode 100644 turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/input.js create mode 100644 turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/output.md create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/options.json create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js.map create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js create mode 100644 turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map diff --git a/turbopack/crates/turbopack-core/src/resolve/mod.rs b/turbopack/crates/turbopack-core/src/resolve/mod.rs index fc1c7d8d5f12b..7a3aa635a8b42 100644 --- a/turbopack/crates/turbopack-core/src/resolve/mod.rs +++ b/turbopack/crates/turbopack-core/src/resolve/mod.rs @@ -2940,7 +2940,7 @@ impl ValueToString for ModulePart { ModulePart::RenamedNamespace { export } => { format!("export * as {}", export.await?).into() } - ModulePart::Internal(id) => format!("internal part {}", id).into(), + ModulePart::Internal(id) => format!("internal part {}", id,).into(), ModulePart::Locals => "locals".into(), ModulePart::Exports => "exports".into(), ModulePart::Facade => "facade".into(), diff --git a/turbopack/crates/turbopack-ecmascript/src/analyzer/imports.rs b/turbopack/crates/turbopack-ecmascript/src/analyzer/imports.rs index e45fc60c4ca93..fcbe51ca99d10 100644 --- a/turbopack/crates/turbopack-ecmascript/src/analyzer/imports.rs +++ b/turbopack/crates/turbopack-ecmascript/src/analyzer/imports.rs @@ -201,6 +201,7 @@ pub(crate) enum ImportedSymbol { Symbol(JsWord), Exports, Part(u32), + PartEvaluation(u32), } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -373,7 +374,6 @@ impl Visit for Analyzer<'_> { self.data.imports.insert(local, (i, orig_sym)); } - if import.specifiers.is_empty() { if let Some(internal_symbol) = internal_symbol { self.ensure_reference( @@ -587,7 +587,8 @@ pub(crate) fn orig_name(n: &ModuleExportName) -> JsWord { fn parse_with(with: Option<&ObjectLit>) -> Option { find_turbopack_part_id_in_asserts(with?).map(|v| match v { - PartId::Internal(index) => ImportedSymbol::Part(index), + PartId::Internal(index, true) => ImportedSymbol::PartEvaluation(index), + PartId::Internal(index, false) => ImportedSymbol::Part(index), PartId::ModuleEvaluation => ImportedSymbol::ModuleEvaluation, PartId::Export(e) => ImportedSymbol::Symbol(e.as_str().into()), PartId::Exports => ImportedSymbol::Exports, diff --git a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs index 42eda038af973..7d227b8c32a49 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs @@ -599,10 +599,11 @@ pub(crate) async fn analyse_ecmascript_module_internal( Some(ModulePart::evaluation()) } ImportedSymbol::Symbol(name) => Some(ModulePart::export((&**name).into())), - ImportedSymbol::Part(part_id) => { + ImportedSymbol::PartEvaluation(part_id) => { evaluation_references.push(i); Some(ModulePart::internal(*part_id)) } + ImportedSymbol::Part(part_id) => Some(ModulePart::internal(*part_id)), ImportedSymbol::Exports => Some(ModulePart::exports()), }, Some(TreeShakingMode::ReexportsOnly) => match &r.imported_symbol { @@ -611,7 +612,7 @@ pub(crate) async fn analyse_ecmascript_module_internal( Some(ModulePart::evaluation()) } ImportedSymbol::Symbol(name) => Some(ModulePart::export((&**name).into())), - ImportedSymbol::Part(_) => { + ImportedSymbol::PartEvaluation(_) | ImportedSymbol::Part(_) => { bail!("Internal imports doesn't exist in reexports only mode") } ImportedSymbol::Exports => None, diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs index 2773d61d6c3c4..59e1cd9f661b0 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs @@ -5,7 +5,7 @@ use turbopack_core::{ chunk::{AsyncModuleInfo, ChunkableModule, ChunkingContext, EvaluatableAsset}, ident::AssetIdent, module::Module, - reference::{ModuleReferences, SingleModuleReference}, + reference::{ModuleReference, ModuleReferences, SingleModuleReference}, resolve::ModulePart, }; @@ -143,9 +143,20 @@ impl Module for EcmascriptModulePartAsset { SplitResult::Failed { .. } => return Ok(analyze.references), }; + let part_dep = |part: Vc| -> Vc> { + Vc::upcast(SingleModuleReference::new( + Vc::upcast(EcmascriptModulePartAsset::new(self.full_module, part)), + Vc::cell("ecmascript module part".into()), + )) + }; + + let mut references = analyze.references.await?.to_vec(); + // Facade depends on evaluation and re-exports - if matches!(&*self.part.await?, ModulePart::Facade | ModulePart::Exports) { - return Ok(analyze.references); + if matches!(&*self.part.await?, ModulePart::Facade) { + references.push(part_dep(ModulePart::evaluation())); + references.push(part_dep(ModulePart::exports())); + return Ok(Vc::cell(references)); } let deps = { @@ -159,28 +170,24 @@ impl Module for EcmascriptModulePartAsset { } }; - let mut assets = deps - .iter() - .map(|part_id| { - Ok(Vc::upcast(SingleModuleReference::new( - Vc::upcast(EcmascriptModulePartAsset::new( - self.full_module, - match part_id { - PartId::Internal(part_id) => ModulePart::internal(*part_id), - PartId::Export(name) => ModulePart::export(name.clone()), - _ => unreachable!( - "PartId other than Internal and Export should not be used here" - ), - }, - )), - Vc::cell("ecmascript module part".into()), - ))) - }) - .collect::>>()?; - - assets.extend(analyze.references.await?.iter().cloned()); - - Ok(Vc::cell(assets)) + references.extend( + deps.iter() + .filter_map(|part_id| { + Some(part_dep(match part_id { + // This is an internal part that is not for evaluation, so we don't need to + // force-add it. + PartId::Internal(.., false) => return None, + PartId::Internal(part_id, true) => ModulePart::internal(*part_id), + PartId::Export(name) => ModulePart::export(name.clone()), + _ => unreachable!( + "PartId other than Internal and Export should not be used here" + ), + })) + }) + .collect::>(), + ); + + Ok(Vc::cell(references)) } } diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/graph.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/graph.rs index 3470d62597c9a..9c50b4f10a6b4 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/graph.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/graph.rs @@ -301,6 +301,7 @@ impl DepGraph { body: directives.to_vec(), shebang: None, }; + let mut part_deps_done = FxHashSet::default(); let mut required_vars = group .iter() @@ -369,25 +370,6 @@ impl DepGraph { } } - // Depend on direct dependencies so that they are executed before this module. - for dep in groups - .idx_graph - .neighbors_directed(ix as u32, petgraph::Direction::Outgoing) - { - chunk - .body - .push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { - span: DUMMY_SP, - specifiers: vec![], - src: Box::new(TURBOPACK_PART_IMPORT_SOURCE.into()), - type_only: false, - with: Some(Box::new(create_turbopack_part_id_assert(PartId::Internal( - dep, - )))), - phase: Default::default(), - }))); - } - // Workaround for implcit export issue of server actions. // // Inline server actions require the generated `$$RSC_SERVER_0` to be **exported**. @@ -473,10 +455,12 @@ impl DepGraph { is_type_only: false, })]; + part_deps_done.insert(dep); + part_deps .entry(ix as u32) .or_default() - .push(PartId::Internal(dep)); + .push(PartId::Internal(dep, false)); chunk .body @@ -486,7 +470,35 @@ impl DepGraph { src: Box::new(TURBOPACK_PART_IMPORT_SOURCE.into()), type_only: false, with: Some(Box::new(create_turbopack_part_id_assert(PartId::Internal( - dep, + dep, false, + )))), + phase: Default::default(), + }))); + } + + // Depend on direct dependencies so that they are executed before this module. + for dep in groups + .idx_graph + .neighbors_directed(ix as u32, petgraph::Direction::Outgoing) + { + if !part_deps_done.insert(dep) { + continue; + } + + part_deps + .entry(ix as u32) + .or_default() + .push(PartId::Internal(dep, true)); + + chunk + .body + .push(ModuleItem::ModuleDecl(ModuleDecl::Import(ImportDecl { + span: DUMMY_SP, + specifiers: vec![], + src: Box::new(TURBOPACK_PART_IMPORT_SOURCE.into()), + type_only: false, + with: Some(Box::new(create_turbopack_part_id_assert(PartId::Internal( + dep, true, )))), phase: Default::default(), }))); @@ -1290,7 +1302,8 @@ pub(crate) enum PartId { ModuleEvaluation, Exports, Export(RcStr), - Internal(u32), + /// `(part_id, is_for_eval)` + Internal(u32, bool), } pub(crate) fn create_turbopack_part_id_assert(dep: PartId) -> ObjectLit { @@ -1303,7 +1316,15 @@ pub(crate) fn create_turbopack_part_id_assert(dep: PartId) -> ObjectLit { PartId::ModuleEvaluation => "module evaluation".into(), PartId::Exports => "exports".into(), PartId::Export(e) => format!("export {e}").into(), - PartId::Internal(dep) => (dep as f64).into(), + PartId::Internal(dep, is_for_eval) => { + let v = dep as f64; + if is_for_eval { + v + } else { + -v + } + } + .into(), }, })))], } @@ -1314,7 +1335,10 @@ pub(crate) fn find_turbopack_part_id_in_asserts(asserts: &ObjectLit) -> Option

Some(PartId::Internal(chunk_id.value as u32)), + })) if &*key.sym == ASSERT_CHUNK_KEY => Some(PartId::Internal( + chunk_id.value.abs() as u32, + chunk_id.value.is_sign_positive(), + )), PropOrSpread::Prop(box Prop::KeyValue(KeyValueProp { key: PropName::Ident(key), diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/merge.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/merge.rs index 282b1bb3fab3e..c6372e57e8e7f 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/merge.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/merge.rs @@ -53,7 +53,7 @@ where .as_deref() .and_then(find_turbopack_part_id_in_asserts); - if let Some(PartId::Internal(part_id)) = part_id { + if let Some(PartId::Internal(part_id, _)) = part_id { if self.done.insert((import.src.value.clone(), part_id)) { if let Some(dep) = self.loader.load(&import.src.value, part_id)? { let mut dep = self.merge_recursively(dep)?; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/1/output.md index e42d590969647..778369f184f5e 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/1/output.md @@ -456,11 +456,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const foo = foobar; export { foo as d } from "__TURBOPACK_VAR__" assert { @@ -470,45 +467,33 @@ export { foo as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { foo }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { b as bar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; -import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; foobar += bar; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; let foobarCopy = foobar; export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { @@ -518,11 +503,11 @@ export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 @@ -530,28 +515,19 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; foobar += "foo"; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; function internal() { return upper(foobar); @@ -563,20 +539,14 @@ export { internal as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { f as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; function external1() { return internal() + foobar; @@ -588,31 +558,28 @@ export { external1 as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { g as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { external1 }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 8 }; export { foobar }; ``` ## Part 13 ```js +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; @@ -622,12 +589,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; function external2() { foobar += "."; } @@ -638,19 +599,16 @@ export { external2 as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { h as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { external2 }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -667,9 +625,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; console.log(foobarCopy); ``` @@ -686,15 +641,12 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; foobarCopy += "Unused"; ``` @@ -779,11 +731,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; function external2() { foobar += "."; @@ -795,76 +744,55 @@ export { external2 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { external2 }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; foobar += bar; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; foobar += "foo"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 7 }; export { foobar }; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 7 }; function internal() { return upper(foobar); @@ -876,21 +804,15 @@ export { internal as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { e as internal } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { e as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; function external1() { return internal() + foobar; } @@ -901,25 +823,19 @@ export { external1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { external1 }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; let foobarCopy = foobar; export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { @@ -929,26 +845,20 @@ export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; foobarCopy += "Unused"; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { g as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -12 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; console.log(foobarCopy); ``` @@ -965,11 +875,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const foo = foobar; export { foo as h } from "__TURBOPACK_VAR__" assert { @@ -979,11 +886,8 @@ export { foo as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { h as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { foo }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/2/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/2/output.md index bdeea790736d9..95429e25bc1b6 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/2/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/2/output.md @@ -477,11 +477,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; const foo = foobar; export { foo as d } from "__TURBOPACK_VAR__" assert { @@ -491,45 +488,33 @@ export { foo as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { foo }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as bar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; foobar += bar; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 5 }; let foobarCopy = foobar; export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { @@ -539,11 +524,11 @@ export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 5 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 @@ -551,28 +536,19 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; foobar += "foo"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 7 }; function internal() { return upper(foobar); @@ -584,20 +560,14 @@ export { internal as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { f as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 7 }; function external1() { return internal() + foobar; @@ -609,31 +579,28 @@ export { external1 as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { g as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; export { external1 }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 7 }; export { foobar }; ``` ## Part 12 ```js +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; @@ -643,12 +610,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; function external2() { foobar += "."; } @@ -659,11 +620,8 @@ export { external2 as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { h as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { external2 }; @@ -683,8 +641,8 @@ import "other"; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 @@ -704,9 +662,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; console.log(foobarCopy); ``` @@ -726,15 +681,12 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; foobarCopy += "Unused"; ``` @@ -817,11 +769,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function external2() { foobar += "."; @@ -833,76 +782,55 @@ export { external2 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { external2 }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; foobar += bar; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 5 }; foobar += "foo"; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 6 }; export { foobar }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 6 }; function internal() { return upper(foobar); @@ -914,21 +842,15 @@ export { internal as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { e as internal } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { e as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; function external1() { return internal() + foobar; } @@ -939,25 +861,19 @@ export { external1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { f as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; export { external1 }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: 5 }; let foobarCopy = foobar; export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { @@ -967,22 +883,16 @@ export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; foobarCopy += "Unused"; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; const foo = foobar; export { foo as h } from "__TURBOPACK_VAR__" assert { @@ -992,11 +902,8 @@ export { foo as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { h as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { foo }; @@ -1016,8 +923,8 @@ import "other"; ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 @@ -1025,9 +932,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; console.log(foobarCopy); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md index dadc79595d517..6248cbf5f85e1 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/3/output.md @@ -383,14 +383,11 @@ export { d3 as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as d3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as d3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; function c2_1() { return c2_2(d3); @@ -414,11 +411,8 @@ export { c2_3 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { c as c2_2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; export { c2_2 }; @@ -441,20 +435,14 @@ export { d1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { e as d2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { f as d1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 5 }; function c1_1() { return c1_2(); @@ -478,30 +466,24 @@ export { c1_3 as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { g as c1_1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { c1_1 }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { i as c1_3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { c1_3 }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { i as c1_3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 @@ -515,16 +497,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { i as c1_3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; c1_3(); ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { c as c2_2 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 @@ -541,9 +520,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { c as c2_2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; c2_2(); ``` @@ -612,15 +588,12 @@ export { d3 as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as d3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { a as d3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; function c2_1() { return c2_2(d3); } @@ -643,11 +616,8 @@ export { c2_3 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { c as c2_2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; export { c2_2 }; @@ -670,20 +640,14 @@ export { d1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { e as d2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { f as d1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 5 }; function c1_1() { return c1_2(); @@ -707,48 +671,36 @@ export { c1_3 as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { g as c1_1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { c1_1 }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { i as c1_3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { c1_3 }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { i as c1_3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; c1_3(); ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { c as c2_2 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { c as c2_2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; c2_2(); ``` @@ -808,8 +760,8 @@ import "__TURBOPACK_PART__" assert { ## Merged (c1_3) ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { i as c1_3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; export { c1_3 }; @@ -835,11 +787,11 @@ export { c1_3 }; ## Merged (c1_3,c2_2) ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { i as c1_3 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { c as c2_2 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; export { c1_3 }; export { c2_2 }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/amphtml-document/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/amphtml-document/output.md index f5bc25d5391e7..0b6ee9ae3ae13 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/amphtml-document/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/amphtml-document/output.md @@ -392,53 +392,29 @@ export { Document as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { h as Document } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { g as _jsxs } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as _Fragment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { e as _jsx } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { d as Html } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { c as Head } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as Main } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as NextScript } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; class MyDocument extends Document { static async getInitialProps(ctx) { @@ -491,8 +467,8 @@ import 'next/document'; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { i as MyDocument } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 @@ -500,9 +476,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { i as MyDocument } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; const __TURBOPACK__default__export__ = MyDocument; export { __TURBOPACK__default__export__ as j } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -525,11 +498,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { j as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; export { __TURBOPACK__default__export__ as default }; @@ -635,53 +605,29 @@ export { Document as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { h as Document } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { g as _jsxs } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as _Fragment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { e as _jsx } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { d as Html } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { c as Head } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as Main } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as NextScript } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; class MyDocument extends Document { static async getInitialProps(ctx) { @@ -734,8 +680,8 @@ import 'next/document'; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { i as MyDocument } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 @@ -743,9 +689,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { i as MyDocument } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; const __TURBOPACK__default__export__ = MyDocument; export { __TURBOPACK__default__export__ as j } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -768,11 +711,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { j as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; export { __TURBOPACK__default__export__ as default }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/app-route/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/app-route/output.md index 4ac5a2bdb7730..036f553fdf4f9 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/app-route/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/app-route/output.md @@ -438,11 +438,8 @@ export { originalPathname as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as originalPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { originalPathname }; @@ -519,14 +516,14 @@ import 'VAR_USERLAND'; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { e as AppRouteRouteModule } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -543,15 +540,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { e as AppRouteRouteModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { d as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const routeModule = new AppRouteRouteModule({ definition: { kind: RouteKind.APP_ROUTE, @@ -591,22 +579,16 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { routeModule }; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; const { requestAsyncStorage, workAsyncStorage, serverHooks } = routeModule; export { requestAsyncStorage as g } from "__TURBOPACK_VAR__" assert { @@ -622,33 +604,30 @@ export { serverHooks as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { i as serverHooks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { serverHooks }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { workAsyncStorage }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { b as _patchFetch } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 +}; +import { i as serverHooks } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 @@ -656,15 +635,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { b as _patchFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { i as serverHooks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; function patchFetch() { return _patchFetch({ serverHooks, @@ -678,22 +648,16 @@ export { patchFetch as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { j as patchFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { patchFetch }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { g as requestAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { requestAsyncStorage }; @@ -779,11 +743,8 @@ export { originalPathname as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as originalPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { originalPathname }; @@ -860,14 +821,14 @@ import 'VAR_USERLAND'; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { e as AppRouteRouteModule } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -881,15 +842,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { e as AppRouteRouteModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { d as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const routeModule = new AppRouteRouteModule({ definition: { kind: RouteKind.APP_ROUTE, @@ -909,22 +861,16 @@ export { routeModule as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { routeModule }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; const { requestAsyncStorage, workAsyncStorage, serverHooks } = routeModule; export { requestAsyncStorage as g } from "__TURBOPACK_VAR__" assert { @@ -940,20 +886,14 @@ export { serverHooks as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; import { b as _patchFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { i as serverHooks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; function patchFetch() { return _patchFetch({ @@ -968,44 +908,32 @@ export { patchFetch as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { j as patchFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { patchFetch }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { i as serverHooks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { serverHooks }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { h as workAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { workAsyncStorage }; ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as requestAsyncStorage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { requestAsyncStorage }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md index b985f59e405db..75d05e9e9abd1 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-fn/output.md @@ -111,25 +111,19 @@ export { a as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; a = ()=>{}; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as a } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; console.log(a); @@ -175,25 +169,19 @@ export { a as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; a = ()=>{}; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as a } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; console.log(a); diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md index 1f441267e23db..43417934895b8 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/assign-before-decl-var/output.md @@ -106,11 +106,8 @@ export { a as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; console.log(a); @@ -125,11 +122,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; a = 1; @@ -167,11 +161,8 @@ export { a as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; console.log(a); @@ -186,11 +177,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; a = 1; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/combined-export/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/combined-export/output.md index 14b3cfa980ace..741009b700b99 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/combined-export/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/combined-export/output.md @@ -114,11 +114,8 @@ export { b as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { b }; @@ -133,11 +130,8 @@ export { a as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { a }; @@ -189,11 +183,8 @@ export { b as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { b }; @@ -208,11 +199,8 @@ export { a as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { a }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/complex/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/complex/output.md index 347e83e28b13b..7f5568a463b40 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/complex/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/complex/output.md @@ -440,22 +440,16 @@ export { cat as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { cat }; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; const initialCat = cat; export { initialCat as b } from "__TURBOPACK_VAR__" assert { @@ -465,11 +459,8 @@ export { initialCat as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as initialCat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { initialCat }; @@ -484,96 +475,75 @@ export { dog as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; dog += "!"; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 5 }; console.log(dog); ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 5 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; dog += "!"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(dog); ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; dog += "!"; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 9 }; function getChimera() { return cat + dog; @@ -585,25 +555,19 @@ export { getChimera as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { d as getChimera } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { getChimera }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 9 }; function getDog() { return dog; @@ -615,11 +579,11 @@ export { getDog as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -627,9 +591,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(dog); ``` @@ -649,14 +610,14 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { e as getDog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -12 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: 9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 @@ -664,12 +625,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 13 }; -import { e as getDog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; function setDog(newDog) { dog = newDog; } @@ -688,11 +643,8 @@ export { dogRef as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { g as dogRef } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; export { dogRef }; @@ -760,22 +712,16 @@ export { cat as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { cat }; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; const initialCat = cat; export { initialCat as b } from "__TURBOPACK_VAR__" assert { @@ -785,11 +731,8 @@ export { initialCat as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as initialCat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { initialCat }; @@ -804,11 +747,8 @@ export { dog as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; function setDog(newDog) { dog = newDog; @@ -820,60 +760,45 @@ export { setDog as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; dog += "!"; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 6 }; dog += "!"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 7 }; dog += "!"; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as cat } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; function getChimera() { return cat + dog; } @@ -884,25 +809,19 @@ export { getChimera as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { e as getChimera } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; export { getChimera }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 8 }; function getDog() { return dog; @@ -914,26 +833,17 @@ export { getDog as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { f as getDog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; import { d as setDog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; const dogRef = { initial: dog, @@ -947,53 +857,44 @@ export { dogRef as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as dogRef } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { dogRef }; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 6 }; console.log(dog); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(dog); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { c as dog } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 @@ -1001,9 +902,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { c as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(dog); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/input.js b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/input.js new file mode 100644 index 0000000000000..0fb5615352753 --- /dev/null +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/input.js @@ -0,0 +1,5 @@ +import { baz } from './module' + +if (1 + 1 == 3) { + baz(); +} diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/output.md new file mode 100644 index 0000000000000..14efcc2485176 --- /dev/null +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/dce/output.md @@ -0,0 +1,218 @@ +# Items + +Count: 4 + +## Item 1: Stmt 0, `ImportOfModule` + +```js +import { baz } from './module'; + +``` + +- Hoisted +- Side effects + +## Item 2: Stmt 0, `ImportBinding(0)` + +```js +import { baz } from './module'; + +``` + +- Hoisted +- Declares: `baz` + +## Item 3: Stmt 1, `Normal` + +```js +if (1 + 1 == 3) { + baz(); +} + +``` + +- Side effects +- Reads: `baz` + +# Phase 1 +```mermaid +graph TD + Item1; + Item2; + Item3; + Item4; + Item4["ModuleEvaluation"]; +``` +# Phase 2 +```mermaid +graph TD + Item1; + Item2; + Item3; + Item4; + Item4["ModuleEvaluation"]; + Item3 --> Item2; + Item3 --> Item1; +``` +# Phase 3 +```mermaid +graph TD + Item1; + Item2; + Item3; + Item4; + Item4["ModuleEvaluation"]; + Item3 --> Item2; + Item3 --> Item1; +``` +# Phase 4 +```mermaid +graph TD + Item1; + Item2; + Item3; + Item4; + Item4["ModuleEvaluation"]; + Item3 --> Item2; + Item3 --> Item1; + Item4 --> Item1; + Item4 --> Item3; +``` +# Final +```mermaid +graph TD + N0["Items: [ItemId(0, ImportOfModule)]"]; + N1["Items: [ItemId(0, ImportBinding(0))]"]; + N2["Items: [ItemId(1, Normal)]"]; + N3["Items: [ItemId(ModuleEvaluation)]"]; + N2 --> N1; + N2 --> N0; + N3 --> N0; + N3 --> N2; +``` +# Entrypoints + +``` +{ + ModuleEvaluation: 3, + Exports: 4, +} +``` + + +# Modules (dev) +## Part 0 +```js +import './module'; + +``` +## Part 1 +```js +import { baz } from './module'; +export { baz as a } from "__TURBOPACK_VAR__" assert { + __turbopack_var__: true +}; + +``` +## Part 2 +```js +import { a as baz } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +if (1 + 1 == 3) { + baz(); +} + +``` +## Part 3 +```js +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 2 +}; +"module evaluation"; + +``` +## Part 4 +```js + +``` +## Merged (module eval) +```js +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 2 +}; +"module evaluation"; + +``` +# Entrypoints + +``` +{ + ModuleEvaluation: 3, + Exports: 4, +} +``` + + +# Modules (prod) +## Part 0 +```js +import './module'; + +``` +## Part 1 +```js +import { baz } from './module'; +export { baz as a } from "__TURBOPACK_VAR__" assert { + __turbopack_var__: true +}; + +``` +## Part 2 +```js +import { a as baz } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +if (1 + 1 == 3) { + baz(); +} + +``` +## Part 3 +```js +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 2 +}; +"module evaluation"; + +``` +## Part 4 +```js + +``` +## Merged (module eval) +```js +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 2 +}; +"module evaluation"; + +``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md index 64dcc78e132ee..30ee49baac86d 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/export-named/output.md @@ -113,11 +113,8 @@ export { __TURBOPACK__reexport__cat__ as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as __TURBOPACK__reexport__cat__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { __TURBOPACK__reexport__cat__ as fakeCat }; @@ -174,11 +171,8 @@ export { __TURBOPACK__reexport__cat__ as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as __TURBOPACK__reexport__cat__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { __TURBOPACK__reexport__cat__ as fakeCat }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-1/output.md index 141d36c8d7bac..853860fc5d717 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-1/output.md @@ -288,23 +288,14 @@ export { eventCallbacks as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as getSocketProtocol } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { b as source } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as eventCallbacks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function connectHMR(options) { const { timeout = 5 * 1000 } = options; @@ -354,22 +345,16 @@ export { connectHMR as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as connectHMR } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { connectHMR }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as source } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function sendMessage(data) { if (!source || source.readyState !== source.OPEN) return; @@ -382,22 +367,16 @@ export { sendMessage as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as sendMessage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { sendMessage }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as eventCallbacks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function addMessageListener(cb) { eventCallbacks.push(cb); @@ -409,11 +388,8 @@ export { addMessageListener as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; import { f as addMessageListener } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; export { addMessageListener }; @@ -493,23 +469,14 @@ export { eventCallbacks as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as getSocketProtocol } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { b as source } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as eventCallbacks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function connectHMR(options) { const { timeout = 5 * 1000 } = options; @@ -559,22 +526,16 @@ export { connectHMR as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as connectHMR } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { connectHMR }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as source } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function sendMessage(data) { if (!source || source.readyState !== source.OPEN) return; @@ -587,22 +548,16 @@ export { sendMessage as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as sendMessage } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { sendMessage }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as eventCallbacks } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function addMessageListener(cb) { eventCallbacks.push(cb); @@ -614,11 +569,8 @@ export { addMessageListener as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; import { f as addMessageListener } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; export { addMessageListener }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-2/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-2/output.md index fae660f2d010f..a8c88bcdbe7f5 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-2/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-2/output.md @@ -708,11 +708,8 @@ export { formatDynamicAPIAccesses as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as formatDynamicAPIAccesses } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { formatDynamicAPIAccesses }; @@ -729,11 +726,8 @@ export { usedDynamicAPIs as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as usedDynamicAPIs } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { usedDynamicAPIs }; @@ -753,11 +747,8 @@ export { createPrerenderState as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as createPrerenderState } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { createPrerenderState }; @@ -834,8 +825,8 @@ import '../../lib/url'; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { g as React } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -861,9 +852,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const hasPostpone = typeof React.unstable_postpone === 'function'; function postponeWithTracking(prerenderState, expression, pathname) { assertPostpone(); @@ -912,17 +900,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; import { j as assertPostpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function createPostponedAbortSignal(reason) { assertPostpone(); @@ -941,22 +923,16 @@ export { createPostponedAbortSignal as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { k as createPostponedAbortSignal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { createPostponedAbortSignal }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { i as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function trackDynamicFetch(store, expression) { if (!store.prerenderState || store.isUnstableCacheCallback) return; @@ -969,22 +945,16 @@ export { trackDynamicFetch as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { l as trackDynamicFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; export { trackDynamicFetch }; ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { i as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function Postpone({ reason, prerenderState, pathname }) { postponeWithTracking(prerenderState, reason, pathname); @@ -996,40 +966,25 @@ export { Postpone as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { m as Postpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { Postpone }; ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { d as DynamicServerError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as getPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { e as StaticGenBailoutError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { i as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function trackDynamicDataAccessed(store, expression) { const pathname = getPathname(store.urlPathname); @@ -1056,40 +1011,25 @@ export { trackDynamicDataAccessed as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 -}; import { n as trackDynamicDataAccessed } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 + __turbopack_part__: -22 }; export { trackDynamicDataAccessed }; ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { d as DynamicServerError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as getPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { e as StaticGenBailoutError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { i as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function markCurrentScopeAsDynamic(store, expression) { const pathname = getPathname(store.urlPathname); @@ -1116,11 +1056,8 @@ export { markCurrentScopeAsDynamic as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 -}; import { o as markCurrentScopeAsDynamic } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 + __turbopack_part__: -24 }; export { markCurrentScopeAsDynamic }; @@ -1234,11 +1171,8 @@ export { formatDynamicAPIAccesses as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as formatDynamicAPIAccesses } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { formatDynamicAPIAccesses }; @@ -1255,11 +1189,8 @@ export { usedDynamicAPIs as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as usedDynamicAPIs } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { usedDynamicAPIs }; @@ -1279,11 +1210,8 @@ export { createPrerenderState as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { c as createPrerenderState } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { createPrerenderState }; @@ -1360,8 +1288,8 @@ import '../../lib/url'; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { g as React } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -1375,9 +1303,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 13 }; -import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const hasPostpone = typeof React.unstable_postpone === 'function'; export { hasPostpone as h } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1386,11 +1311,8 @@ export { hasPostpone as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { h as hasPostpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; function assertPostpone() { if (!hasPostpone) { @@ -1404,20 +1326,14 @@ export { assertPostpone as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; import { i as assertPostpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 14 }; function createPostponedAbortSignal(reason) { assertPostpone(); @@ -1436,31 +1352,22 @@ export { createPostponedAbortSignal as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { j as createPostponedAbortSignal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { createPostponedAbortSignal }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { g as React } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; import { i as assertPostpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 14 }; function postponeWithTracking(prerenderState, expression, pathname) { assertPostpone(); @@ -1478,11 +1385,8 @@ export { postponeWithTracking as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { k as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; function trackDynamicFetch(store, expression) { if (!store.prerenderState || store.isUnstableCacheCallback) return; @@ -1495,22 +1399,16 @@ export { trackDynamicFetch as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; import { l as trackDynamicFetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 + __turbopack_part__: -19 }; export { trackDynamicFetch }; ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { k as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; function Postpone({ reason, prerenderState, pathname }) { postponeWithTracking(prerenderState, reason, pathname); @@ -1522,40 +1420,25 @@ export { Postpone as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; import { m as Postpone } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 + __turbopack_part__: -21 }; export { Postpone }; ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { d as DynamicServerError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as getPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { e as StaticGenBailoutError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { k as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; function trackDynamicDataAccessed(store, expression) { const pathname = getPathname(store.urlPathname); @@ -1582,40 +1465,25 @@ export { trackDynamicDataAccessed as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; import { n as trackDynamicDataAccessed } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 + __turbopack_part__: -23 }; export { trackDynamicDataAccessed }; ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { d as DynamicServerError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as getPathname } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { e as StaticGenBailoutError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { k as postponeWithTracking } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; function markCurrentScopeAsDynamic(store, expression) { const pathname = getPathname(store.urlPathname); @@ -1642,11 +1510,8 @@ export { markCurrentScopeAsDynamic as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; import { o as markCurrentScopeAsDynamic } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 + __turbopack_part__: -25 }; export { markCurrentScopeAsDynamic }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-3/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-3/output.md index 7c2e66e39cdb9..a54582c6888ac 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-3/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/failed-3/output.md @@ -2077,17 +2077,11 @@ export { getProperError as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as parseStackTrace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as getProperError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function structuredError(e) { e = getProperError(e); @@ -2104,17 +2098,11 @@ export { structuredError as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as createConnection } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function createIpc(port) { const socket = createConnection(port, "127.0.0.1"); @@ -2249,11 +2237,8 @@ export { createIpc as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { structuredError }; @@ -2313,11 +2298,11 @@ export { PORT as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as createIpc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { f as PORT } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2340,12 +2325,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { e as createIpc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { f as PORT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const IPC = createIpc(parseInt(PORT, 10)); export { IPC as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2354,8 +2333,8 @@ export { IPC as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2381,9 +2360,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; process.on("uncaughtException", (err)=>{ IPC.sendError(err); }); @@ -2391,14 +2367,11 @@ process.on("uncaughtException", (err)=>{ ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: 11 }; export { IPC }; @@ -2456,8 +2429,8 @@ export { improveConsole as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2489,16 +2462,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("error", "stderr", true); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2533,16 +2503,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("warn", "stderr", true); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2580,16 +2547,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("count", "stdout", true); ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2630,16 +2594,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("trace", "stderr", false); ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2683,16 +2644,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("log", "stdout", true); ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2739,16 +2697,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("group", "stdout", true); ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2798,16 +2753,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("groupCollapsed", "stdout", true); ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2860,16 +2812,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("table", "stdout", true); ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2925,16 +2874,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("debug", "stdout", true); ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2993,16 +2939,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("info", "stdout", true); ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3064,16 +3007,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dir", "stdout", true); ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3138,16 +3078,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dirxml", "stdout", true); ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3215,16 +3152,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeEnd", "stdout", true); ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3295,16 +3229,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeLog", "stdout", true); ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3378,16 +3309,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeStamp", "stdout", true); ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3464,9 +3392,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("assert", "stderr", true); ``` @@ -3671,17 +3596,11 @@ export { getProperError as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as parseStackTrace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as getProperError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function structuredError(e) { e = getProperError(e); @@ -3698,28 +3617,19 @@ export { structuredError as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { structuredError }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as createConnection } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function createIpc(port) { const socket = createConnection(port, "127.0.0.1"); @@ -3895,11 +3805,11 @@ export { PORT as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { e as createIpc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { f as PORT } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3910,12 +3820,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { e as createIpc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { f as PORT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const IPC = createIpc(parseInt(PORT, 10)); export { IPC as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3924,8 +3828,8 @@ export { IPC as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3939,9 +3843,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; process.on("uncaughtException", (err)=>{ IPC.sendError(err); }); @@ -3949,15 +3850,12 @@ process.on("uncaughtException", (err)=>{ ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; export { IPC }; ``` @@ -4002,8 +3900,8 @@ export { improveConsole as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4023,16 +3921,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("error", "stderr", true); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4055,16 +3950,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("warn", "stderr", true); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4090,16 +3982,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("count", "stdout", true); ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4128,16 +4017,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("trace", "stderr", false); ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4169,16 +4055,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 17 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("log", "stdout", true); ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4213,16 +4096,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 18 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("group", "stdout", true); ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4260,16 +4140,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 19 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("groupCollapsed", "stdout", true); ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4310,16 +4187,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 20 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("table", "stdout", true); ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4363,16 +4237,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 21 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("debug", "stdout", true); ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4419,16 +4290,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 22 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("info", "stdout", true); ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4478,16 +4346,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 23 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dir", "stdout", true); ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4540,16 +4405,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 24 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dirxml", "stdout", true); ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4605,16 +4467,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 25 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeEnd", "stdout", true); ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4673,14 +4532,14 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 26 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeLog", "stdout", true); ``` ## Part 28 ```js +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; @@ -4741,17 +4600,14 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeStamp", "stdout", true); ``` ## Part 29 ```js +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 28 }; @@ -4815,12 +4671,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("assert", "stderr", true); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/grouping/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/grouping/output.md index 9180e805fd1c9..bc6763b55a5f1 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/grouping/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/grouping/output.md @@ -344,25 +344,19 @@ export { x as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 3; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; console.log(x); @@ -377,113 +371,92 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 2 }; x = 5; ``` ## Part 5 ```js +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 6; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 5 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 7; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 8; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 9; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { x }; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; const y = x; export { y as b } from "__TURBOPACK_VAR__" assert { @@ -493,36 +466,27 @@ export { y as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { b as y } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { y }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 2 }; x = 4; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 2; @@ -572,107 +536,83 @@ export { x as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 5; ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 4; ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 3; ``` ## Part 4 ```js +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; x += 6; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 4 }; x += 7; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 5 }; x += 8; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; x += 9; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const y = x; export { y as b } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -681,39 +621,30 @@ export { y as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { b as y } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { y }; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; export { x }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as x } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; console.log(x); @@ -728,11 +659,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as x } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; x = 2; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-evaluate/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-evaluate/output.md index 8f277020ccbb8..466391f04dc28 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-evaluate/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-evaluate/output.md @@ -269,11 +269,8 @@ export { IPC as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; const ipc = IPC; export { ipc as c } from "__TURBOPACK_VAR__" assert { @@ -283,21 +280,15 @@ export { ipc as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as ipc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as queue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { c as ipc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { a as queue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const run = async (moduleFactory)=>{ let nextId = 1; const requests = new Map(); @@ -407,11 +398,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as run } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { run }; @@ -471,11 +459,8 @@ export { IPC as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; const ipc = IPC; export { ipc as c } from "__TURBOPACK_VAR__" assert { @@ -485,21 +470,15 @@ export { ipc as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as ipc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as queue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 0 }; -import { c as ipc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { a as queue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const run = async (moduleFactory)=>{ let nextId = 1; const requests = new Map(); @@ -609,11 +588,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as run } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { run }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-index/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-index/output.md index 7c2e66e39cdb9..a54582c6888ac 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-index/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/ipc-index/output.md @@ -2077,17 +2077,11 @@ export { getProperError as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as parseStackTrace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as getProperError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function structuredError(e) { e = getProperError(e); @@ -2104,17 +2098,11 @@ export { structuredError as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as createConnection } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function createIpc(port) { const socket = createConnection(port, "127.0.0.1"); @@ -2249,11 +2237,8 @@ export { createIpc as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { structuredError }; @@ -2313,11 +2298,11 @@ export { PORT as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as createIpc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { f as PORT } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2340,12 +2325,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { e as createIpc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { f as PORT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const IPC = createIpc(parseInt(PORT, 10)); export { IPC as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2354,8 +2333,8 @@ export { IPC as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2381,9 +2360,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; process.on("uncaughtException", (err)=>{ IPC.sendError(err); }); @@ -2391,14 +2367,11 @@ process.on("uncaughtException", (err)=>{ ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: 11 }; export { IPC }; @@ -2456,8 +2429,8 @@ export { improveConsole as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2489,16 +2462,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("error", "stderr", true); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2533,16 +2503,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("warn", "stderr", true); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2580,16 +2547,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("count", "stdout", true); ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2630,16 +2594,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("trace", "stderr", false); ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2683,16 +2644,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("log", "stdout", true); ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2739,16 +2697,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("group", "stdout", true); ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2798,16 +2753,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("groupCollapsed", "stdout", true); ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2860,16 +2812,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("table", "stdout", true); ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2925,16 +2874,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("debug", "stdout", true); ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2993,16 +2939,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("info", "stdout", true); ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3064,16 +3007,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dir", "stdout", true); ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3138,16 +3078,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dirxml", "stdout", true); ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3215,16 +3152,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeEnd", "stdout", true); ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3295,16 +3229,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeLog", "stdout", true); ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3378,16 +3309,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeStamp", "stdout", true); ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3464,9 +3392,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("assert", "stderr", true); ``` @@ -3671,17 +3596,11 @@ export { getProperError as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as parseStackTrace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as getProperError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function structuredError(e) { e = getProperError(e); @@ -3698,28 +3617,19 @@ export { structuredError as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { structuredError }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { d as structuredError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as createConnection } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function createIpc(port) { const socket = createConnection(port, "127.0.0.1"); @@ -3895,11 +3805,11 @@ export { PORT as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { e as createIpc } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { f as PORT } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3910,12 +3820,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { e as createIpc } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { f as PORT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; const IPC = createIpc(parseInt(PORT, 10)); export { IPC as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3924,8 +3828,8 @@ export { IPC as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3939,9 +3843,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; process.on("uncaughtException", (err)=>{ IPC.sendError(err); }); @@ -3949,15 +3850,12 @@ process.on("uncaughtException", (err)=>{ ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { g as IPC } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { g as IPC } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; export { IPC }; ``` @@ -4002,8 +3900,8 @@ export { improveConsole as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4023,16 +3921,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("error", "stderr", true); ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4055,16 +3950,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("warn", "stderr", true); ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4090,16 +3982,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("count", "stdout", true); ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4128,16 +4017,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("trace", "stderr", false); ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4169,16 +4055,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 17 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("log", "stdout", true); ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4213,16 +4096,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 18 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("group", "stdout", true); ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4260,16 +4140,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 19 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("groupCollapsed", "stdout", true); ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4310,16 +4187,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 20 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("table", "stdout", true); ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4363,16 +4237,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 21 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("debug", "stdout", true); ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4419,16 +4290,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 22 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("info", "stdout", true); ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4478,16 +4346,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 23 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dir", "stdout", true); ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4540,16 +4405,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 24 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("dirxml", "stdout", true); ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4605,16 +4467,13 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 25 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeEnd", "stdout", true); ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4673,14 +4532,14 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 26 }; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeLog", "stdout", true); ``` ## Part 28 ```js +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; @@ -4741,17 +4600,14 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("timeStamp", "stdout", true); ``` ## Part 29 ```js +import { h as improveConsole } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 28 }; @@ -4815,12 +4671,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as improveConsole } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; improveConsole("assert", "stderr", true); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/let-bug-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/let-bug-1/output.md index 32b782230eed9..d4bfea84ddc58 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/let-bug-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/let-bug-1/output.md @@ -238,23 +238,14 @@ export { clientComponentLoadStart as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function getClientComponentLoaderMetrics(options = {}) { const metrics = clientComponentLoadStart === 0 ? undefined : { @@ -276,34 +267,22 @@ export { getClientComponentLoaderMetrics as d } from "__TURBOPACK_VAR__" assert ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getClientComponentLoaderMetrics } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getClientComponentLoaderMetrics }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function wrapClientComponentLoader(ComponentMod) { if (!('performance' in globalThis)) { @@ -340,11 +319,8 @@ export { wrapClientComponentLoader as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as wrapClientComponentLoader } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { wrapClientComponentLoader }; @@ -412,23 +388,14 @@ export { clientComponentLoadStart as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function getClientComponentLoaderMetrics(options = {}) { const metrics = clientComponentLoadStart === 0 ? undefined : { @@ -450,34 +417,22 @@ export { getClientComponentLoaderMetrics as d } from "__TURBOPACK_VAR__" assert ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getClientComponentLoaderMetrics } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getClientComponentLoaderMetrics }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function wrapClientComponentLoader(ComponentMod) { if (!('performance' in globalThis)) { @@ -514,11 +469,8 @@ export { wrapClientComponentLoader as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as wrapClientComponentLoader } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { wrapClientComponentLoader }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/logger/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/logger/output.md index 2b831c57cafc5..cf1bdd8fe9751 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/logger/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/logger/output.md @@ -238,23 +238,14 @@ export { clientComponentLoadStart as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function getClientComponentLoaderMetrics(options = {}) { const metrics = clientComponentLoadStart === 0 ? undefined : { @@ -276,34 +267,22 @@ export { getClientComponentLoaderMetrics as d } from "__TURBOPACK_VAR__" assert ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getClientComponentLoaderMetrics } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getClientComponentLoaderMetrics }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function wrapClientComponentLoader(ComponentMod) { if (!('performance' in globalThis)) { @@ -340,11 +319,8 @@ export { wrapClientComponentLoader as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as wrapClientComponentLoader } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { wrapClientComponentLoader }; @@ -412,23 +388,14 @@ export { clientComponentLoadStart as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; function getClientComponentLoaderMetrics(options = {}) { const metrics = clientComponentLoadStart === 0 ? undefined : { @@ -450,34 +417,22 @@ export { getClientComponentLoaderMetrics as d } from "__TURBOPACK_VAR__" assert ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getClientComponentLoaderMetrics } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getClientComponentLoaderMetrics }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as clientComponentLoadTimes } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as clientComponentLoadStart } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as clientComponentLoadCount } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function wrapClientComponentLoader(ComponentMod) { if (!('performance' in globalThis)) { @@ -514,11 +469,8 @@ export { wrapClientComponentLoader as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as wrapClientComponentLoader } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { wrapClientComponentLoader }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/mui-sys/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/mui-sys/output.md index c917d6cc8b413..eff73648492ce 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/mui-sys/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/mui-sys/output.md @@ -2022,14 +2022,14 @@ import './responsivePropType'; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2046,15 +2046,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const gap = (props)=>{ if (props.gap !== undefined && props.gap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap'); @@ -2072,11 +2063,11 @@ export { gap as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2093,12 +2084,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; gap.propTypes = process.env.NODE_ENV !== 'production' ? { gap: responsivePropType } : {}; @@ -2106,14 +2091,14 @@ gap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2136,15 +2121,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const columnGap = (props)=>{ if (props.columnGap !== undefined && props.columnGap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap'); @@ -2162,11 +2138,11 @@ export { columnGap as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2189,12 +2165,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; columnGap.propTypes = process.env.NODE_ENV !== 'production' ? { columnGap: responsivePropType } : {}; @@ -2202,14 +2172,14 @@ columnGap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2238,15 +2208,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const rowGap = (props)=>{ if (props.rowGap !== undefined && props.rowGap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap'); @@ -2264,11 +2225,11 @@ export { rowGap as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2297,12 +2258,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; rowGap.propTypes = process.env.NODE_ENV !== 'production' ? { rowGap: responsivePropType } : {}; @@ -2310,8 +2265,8 @@ rowGap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2346,9 +2301,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridColumn = style({ prop: 'gridColumn' }); @@ -2359,19 +2311,16 @@ export { gridColumn as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; import { j as gridColumn } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 + __turbopack_part__: -17 }; export { gridColumn }; ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2409,9 +2358,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 17 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridRow = style({ prop: 'gridRow' }); @@ -2422,19 +2368,16 @@ export { gridRow as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; import { k as gridRow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 + __turbopack_part__: -19 }; export { gridRow }; ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2475,9 +2418,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 19 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoFlow = style({ prop: 'gridAutoFlow' }); @@ -2488,19 +2428,16 @@ export { gridAutoFlow as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 + __turbopack_part__: -21 }; export { gridAutoFlow }; ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2544,9 +2481,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 21 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoColumns = style({ prop: 'gridAutoColumns' }); @@ -2557,19 +2491,16 @@ export { gridAutoColumns as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 + __turbopack_part__: -23 }; export { gridAutoColumns }; ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2616,9 +2547,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 23 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoRows = style({ prop: 'gridAutoRows' }); @@ -2629,19 +2557,16 @@ export { gridAutoRows as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 + __turbopack_part__: -25 }; export { gridAutoRows }; ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2691,9 +2616,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 25 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateColumns = style({ prop: 'gridTemplateColumns' }); @@ -2704,19 +2626,16 @@ export { gridTemplateColumns as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 -}; import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 + __turbopack_part__: -27 }; export { gridTemplateColumns }; ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2769,9 +2688,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 27 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateRows = style({ prop: 'gridTemplateRows' }); @@ -2782,19 +2698,16 @@ export { gridTemplateRows as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 30 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 -}; import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 + __turbopack_part__: -29 }; export { gridTemplateRows }; ``` ## Part 31 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2850,9 +2763,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 29 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateAreas = style({ prop: 'gridTemplateAreas' }); @@ -2863,19 +2773,16 @@ export { gridTemplateAreas as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 32 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 -}; import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 + __turbopack_part__: -31 }; export { gridTemplateAreas }; ``` ## Part 33 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2934,9 +2841,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 31 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridArea = style({ prop: 'gridArea' }); @@ -2947,25 +2851,19 @@ export { gridArea as r } from "__TURBOPACK_VAR__" assert { ``` ## Part 34 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 -}; import { r as gridArea } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 + __turbopack_part__: -33 }; export { gridArea }; ``` ## Part 35 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 16 }; rowGap.filterProps = [ 'rowGap' @@ -2974,28 +2872,22 @@ rowGap.filterProps = [ ``` ## Part 36 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 35 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 35 }; export { rowGap }; ``` ## Part 37 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: 14 }; columnGap.filterProps = [ 'columnGap' @@ -3004,28 +2896,22 @@ columnGap.filterProps = [ ``` ## Part 38 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 37 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: 37 }; export { columnGap }; ``` ## Part 39 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; gap.filterProps = [ 'gap' @@ -3034,67 +2920,64 @@ gap.filterProps = [ ``` ## Part 40 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 39 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 39 }; export { gap }; ``` ## Part 41 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as compose } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 39 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 37 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { j as gridColumn } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -17 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 35 +import { k as gridRow } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -19 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 +import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -21 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 +import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -23 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 +import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -25 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 +import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -27 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 +import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -29 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 +import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -31 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 +import { r as gridArea } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -33 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 + __turbopack_part__: 39 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 + __turbopack_part__: 37 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 + __turbopack_part__: 35 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3120,45 +3003,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { a as compose } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { j as gridColumn } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; -import { k as gridRow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; -import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; -import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; -import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; -import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 -}; -import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 -}; -import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 -}; -import { r as gridArea } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 -}; const grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea); export { grid as s } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3167,8 +3011,8 @@ export { grid as s } from "__TURBOPACK_VAR__" assert { ``` ## Part 42 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 41 +import { s as grid } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -41 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3230,9 +3074,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 33 }; -import { s as grid } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 41 -}; const __TURBOPACK__default__export__ = grid; export { __TURBOPACK__default__export__ as t } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3312,11 +3153,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 44 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 42 -}; import { t as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 42 + __turbopack_part__: -42 }; export { __TURBOPACK__default__export__ as default }; @@ -3590,14 +3428,14 @@ import './responsivePropType'; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3614,15 +3452,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const gap = (props)=>{ if (props.gap !== undefined && props.gap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap'); @@ -3640,11 +3469,11 @@ export { gap as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3661,12 +3490,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; gap.propTypes = process.env.NODE_ENV !== 'production' ? { gap: responsivePropType } : {}; @@ -3674,14 +3497,14 @@ gap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3704,15 +3527,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const columnGap = (props)=>{ if (props.columnGap !== undefined && props.columnGap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap'); @@ -3730,11 +3544,11 @@ export { columnGap as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3757,12 +3571,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; columnGap.propTypes = process.env.NODE_ENV !== 'production' ? { columnGap: responsivePropType } : {}; @@ -3770,14 +3578,14 @@ columnGap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as getValue } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3806,15 +3614,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { f as createUnaryUnit } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as getValue } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as handleBreakpoints } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; const rowGap = (props)=>{ if (props.rowGap !== undefined && props.rowGap !== null) { const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap'); @@ -3832,11 +3631,11 @@ export { rowGap as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as responsivePropType } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3865,12 +3664,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { c as responsivePropType } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; rowGap.propTypes = process.env.NODE_ENV !== 'production' ? { rowGap: responsivePropType } : {}; @@ -3878,8 +3671,8 @@ rowGap.propTypes = process.env.NODE_ENV !== 'production' ? { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3914,9 +3707,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridColumn = style({ prop: 'gridColumn' }); @@ -3927,19 +3717,16 @@ export { gridColumn as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; import { j as gridColumn } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 + __turbopack_part__: -17 }; export { gridColumn }; ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3977,9 +3764,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 17 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridRow = style({ prop: 'gridRow' }); @@ -3990,19 +3774,16 @@ export { gridRow as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; import { k as gridRow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 + __turbopack_part__: -19 }; export { gridRow }; ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4043,9 +3824,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 19 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoFlow = style({ prop: 'gridAutoFlow' }); @@ -4056,19 +3834,16 @@ export { gridAutoFlow as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 + __turbopack_part__: -21 }; export { gridAutoFlow }; ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4112,9 +3887,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 21 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoColumns = style({ prop: 'gridAutoColumns' }); @@ -4125,19 +3897,16 @@ export { gridAutoColumns as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 + __turbopack_part__: -23 }; export { gridAutoColumns }; ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4184,9 +3953,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 23 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridAutoRows = style({ prop: 'gridAutoRows' }); @@ -4197,19 +3963,16 @@ export { gridAutoRows as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 + __turbopack_part__: -25 }; export { gridAutoRows }; ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4259,9 +4022,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 25 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateColumns = style({ prop: 'gridTemplateColumns' }); @@ -4272,19 +4032,16 @@ export { gridTemplateColumns as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 -}; import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 + __turbopack_part__: -27 }; export { gridTemplateColumns }; ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4337,9 +4094,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 27 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateRows = style({ prop: 'gridTemplateRows' }); @@ -4350,19 +4104,16 @@ export { gridTemplateRows as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 30 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 -}; import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 + __turbopack_part__: -29 }; export { gridTemplateRows }; ``` ## Part 31 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4418,9 +4169,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 29 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridTemplateAreas = style({ prop: 'gridTemplateAreas' }); @@ -4431,19 +4179,16 @@ export { gridTemplateAreas as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 32 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 -}; import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 + __turbopack_part__: -31 }; export { gridTemplateAreas }; ``` ## Part 33 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as style } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4502,9 +4247,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 31 }; -import { b as style } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; const gridArea = style({ prop: 'gridArea' }); @@ -4515,25 +4257,19 @@ export { gridArea as r } from "__TURBOPACK_VAR__" assert { ``` ## Part 34 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 -}; import { r as gridArea } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 + __turbopack_part__: -33 }; export { gridArea }; ``` ## Part 35 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 16 }; rowGap.filterProps = [ 'rowGap' @@ -4542,28 +4278,22 @@ rowGap.filterProps = [ ``` ## Part 36 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 35 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 35 }; export { rowGap }; ``` ## Part 37 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: 14 }; columnGap.filterProps = [ 'columnGap' @@ -4572,28 +4302,22 @@ columnGap.filterProps = [ ``` ## Part 38 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 37 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: 37 }; export { columnGap }; ``` ## Part 39 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; gap.filterProps = [ 'gap' @@ -4602,67 +4326,64 @@ gap.filterProps = [ ``` ## Part 40 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 39 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 39 }; export { gap }; ``` ## Part 41 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as compose } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 39 +import { g as gap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { h as columnGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -13 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 37 +import { i as rowGap } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { j as gridColumn } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -17 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 35 +import { k as gridRow } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -19 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 +import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -21 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 +import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -23 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 +import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -25 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 +import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -27 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 +import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -29 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 +import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -31 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 +import { r as gridArea } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -33 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 + __turbopack_part__: 39 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 + __turbopack_part__: 37 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 + __turbopack_part__: 35 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4688,45 +4409,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { a as compose } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { g as gap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { h as columnGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import { i as rowGap } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { j as gridColumn } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; -import { k as gridRow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; -import { l as gridAutoFlow } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 21 -}; -import { m as gridAutoColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 23 -}; -import { n as gridAutoRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 25 -}; -import { o as gridTemplateColumns } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 27 -}; -import { p as gridTemplateRows } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 29 -}; -import { q as gridTemplateAreas } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 31 -}; -import { r as gridArea } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 33 -}; const grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea); export { grid as s } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -4735,8 +4417,8 @@ export { grid as s } from "__TURBOPACK_VAR__" assert { ``` ## Part 42 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 41 +import { s as grid } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -41 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -4798,9 +4480,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 33 }; -import { s as grid } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 41 -}; const __TURBOPACK__default__export__ = grid; export { __TURBOPACK__default__export__ as t } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -4880,11 +4559,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 44 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 42 -}; import { t as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 42 + __turbopack_part__: -42 }; export { __TURBOPACK__default__export__ as default }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/multi-export/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/multi-export/output.md index c420d4b4275d3..448e7ffc02135 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/multi-export/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/multi-export/output.md @@ -114,11 +114,8 @@ export { cat as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { cat }; @@ -133,11 +130,8 @@ export { dog as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { dog as DOG }; @@ -189,11 +183,8 @@ export { cat as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { cat }; @@ -208,11 +199,8 @@ export { dog as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { dog as DOG }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nanoid/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nanoid/output.md index 5f6065bf68905..6c9c6c6367d00 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nanoid/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nanoid/output.md @@ -490,17 +490,17 @@ import './url-alphabet/index.js'; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as pool } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as POOL_SIZE_MULTIPLIER } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as crypto } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as poolOffset } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 5 @@ -508,18 +508,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as POOL_SIZE_MULTIPLIER } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as crypto } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; let fillPool = (bytes)=>{ if (!pool || pool.length < bytes) { pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER); @@ -586,34 +574,22 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { g as customRandom } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { customRandom }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { f as fillPool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; let random = (bytes)=>{ fillPool((bytes -= 0)); @@ -626,43 +602,28 @@ export { random as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { h as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; export { random }; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { f as fillPool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 11 }; let nanoid = (size = 21)=>{ fillPool((size -= 0)); @@ -679,42 +640,30 @@ export { nanoid as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 13 }; export { urlAlphabet }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { i as nanoid } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { nanoid }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { g as customRandom } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { h as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; let customAlphabet = (alphabet, size)=>customRandom(alphabet, size, random); export { customAlphabet as j } from "__TURBOPACK_VAR__" assert { @@ -724,11 +673,8 @@ export { customAlphabet as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { j as customAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { customAlphabet }; @@ -850,17 +796,17 @@ import './url-alphabet/index.js'; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as pool } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as POOL_SIZE_MULTIPLIER } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as crypto } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as poolOffset } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 5 @@ -868,18 +814,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as POOL_SIZE_MULTIPLIER } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as crypto } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; let fillPool = (bytes)=>{ if (!pool || pool.length < bytes) { pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER); @@ -946,34 +880,22 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { g as customRandom } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { customRandom }; ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { f as fillPool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; let random = (bytes)=>{ fillPool((bytes -= 0)); @@ -986,43 +908,28 @@ export { random as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { h as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; export { random }; ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { f as fillPool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; import { b as poolOffset } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { e as pool } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 11 }; let nanoid = (size = 21)=>{ fillPool((size -= 0)); @@ -1039,42 +946,30 @@ export { nanoid as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 +import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as urlAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 13 }; export { urlAlphabet }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { i as nanoid } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { nanoid }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; import { g as customRandom } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { h as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: -11 }; let customAlphabet = (alphabet, size)=>customRandom(alphabet, size, random); export { customAlphabet as j } from "__TURBOPACK_VAR__" assert { @@ -1084,11 +979,8 @@ export { customAlphabet as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { j as customAlphabet } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { customAlphabet }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/next-response/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/next-response/output.md index 15bd5b000aee7..5f95beb276865 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/next-response/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/next-response/output.md @@ -744,59 +744,32 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { g as ResponseCookies } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as stringifyCookie } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { e as handleMiddlewareField } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { d as ReflectAdapter } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { h as INTERNALS } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; import { c as NextURL } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as toNodeOutgoingHttpHeaders } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as validateURL } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { i as REDIRECTS } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; class NextResponse extends Response { constructor(body, init = {}){ @@ -893,11 +866,8 @@ export { NextResponse as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { j as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; export { NextResponse }; @@ -1156,59 +1126,32 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { g as ResponseCookies } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; import { f as stringifyCookie } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { e as handleMiddlewareField } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; import { d as ReflectAdapter } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { h as INTERNALS } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; import { c as NextURL } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as toNodeOutgoingHttpHeaders } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { a as validateURL } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { i as REDIRECTS } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; class NextResponse extends Response { constructor(body, init = {}){ @@ -1305,11 +1248,8 @@ export { NextResponse as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { j as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; export { NextResponse }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nextjs-tracer/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nextjs-tracer/output.md index 180ad1fad17b7..3c9fe677b3c18 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nextjs-tracer/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/nextjs-tracer/output.md @@ -759,11 +759,8 @@ export { lastSpanId as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { e as lastSpanId } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const getSpanId = ()=>lastSpanId++; export { getSpanId as f } from "__TURBOPACK_VAR__" assert { @@ -787,22 +784,16 @@ export { BubbledError as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { g as BubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { BubbledError }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { g as BubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; function isBubbledError(error) { if (typeof error !== 'object' || error === null) return false; @@ -815,11 +806,8 @@ export { isBubbledError as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { h as isBubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { isBubbledError }; @@ -839,15 +827,12 @@ export { api as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; if (process.env.NEXT_RUNTIME === 'edge') { api = require('@opentelemetry/api'); } else { @@ -878,14 +863,11 @@ export { rootSpanAttributesStore as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api; export { context as k } from "__TURBOPACK_VAR__" assert { @@ -910,22 +892,19 @@ export { ROOT_CONTEXT as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { o as SpanKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; export { SpanKind }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 @@ -939,9 +918,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; const rootSpanIdKey = api.createContextKey('next.rootSpanId'); export { rootSpanIdKey as q } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -950,17 +926,11 @@ export { rootSpanIdKey as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { h as isBubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { n as SpanStatusCode } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; const closeSpanWithError = (span, error)=>{ if (isBubbledError(error) && error.bubble) { @@ -983,82 +953,52 @@ export { closeSpanWithError as r } from "__TURBOPACK_VAR__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 +import { n as SpanStatusCode } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -14 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import { n as SpanStatusCode } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: 17 }; export { SpanStatusCode }; ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { m as trace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { k as context } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { l as propagation } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { d as clientTraceDataSetter } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { c as NextVanillaSpanAllowlist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { p as ROOT_CONTEXT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { f as getSpanId } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { q as rootSpanIdKey } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; import { j as rootSpanAttributesStore } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; import { b as LogSpanAllowList } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { r as closeSpanWithError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 + __turbopack_part__: -17 }; import { a as isPromise } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; class NextTracerImpl { getTracerInstance() { @@ -1205,8 +1145,8 @@ export { NextTracerImpl as s } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 +import { s as NextTracerImpl } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -19 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -1223,9 +1163,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { s as NextTracerImpl } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; const getTracer = (()=>{ const tracer = new NextTracerImpl(); return ()=>tracer; @@ -1257,11 +1194,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { t as getTracer } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { getTracer }; @@ -1382,11 +1316,8 @@ export { lastSpanId as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { e as lastSpanId } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const getSpanId = ()=>lastSpanId++; export { getSpanId as f } from "__TURBOPACK_VAR__" assert { @@ -1410,22 +1341,16 @@ export { BubbledError as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { g as BubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { BubbledError }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { g as BubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; function isBubbledError(error) { if (typeof error !== 'object' || error === null) return false; @@ -1438,11 +1363,8 @@ export { isBubbledError as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { h as isBubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { isBubbledError }; @@ -1462,15 +1384,12 @@ export { api as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 }; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; if (process.env.NEXT_RUNTIME === 'edge') { api = require('@opentelemetry/api'); } else { @@ -1498,11 +1417,11 @@ export { rootSpanAttributesStore as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -1510,9 +1429,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 13 }; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; const rootSpanIdKey = api.createContextKey('next.rootSpanId'); export { rootSpanIdKey as k } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1521,14 +1437,11 @@ export { rootSpanIdKey as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { i as api } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -11 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 -}; -import { i as api } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 11 + __turbopack_part__: 12 }; const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api; export { context as l } from "__TURBOPACK_VAR__" assert { @@ -1553,28 +1466,19 @@ export { ROOT_CONTEXT as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { p as SpanKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; export { SpanKind }; ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; import { h as isBubbledError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; import { o as SpanStatusCode } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; const closeSpanWithError = (span, error)=>{ if (isBubbledError(error) && error.bubble) { @@ -1597,82 +1501,52 @@ export { closeSpanWithError as r } from "__TURBOPACK_VAR__" assert { ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 +import { o as SpanStatusCode } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -15 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import { o as SpanStatusCode } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: 17 }; export { SpanStatusCode }; ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { n as trace } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; import { l as context } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; import { m as propagation } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; import { d as clientTraceDataSetter } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { c as NextVanillaSpanAllowlist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { q as ROOT_CONTEXT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 15 + __turbopack_part__: -15 }; import { f as getSpanId } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; import { k as rootSpanIdKey } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; import { j as rootSpanAttributesStore } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; import { b as LogSpanAllowList } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { r as closeSpanWithError } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 17 + __turbopack_part__: -17 }; import { a as isPromise } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; class NextTracerImpl { getTracerInstance() { @@ -1819,8 +1693,8 @@ export { NextTracerImpl as s } from "__TURBOPACK_VAR__" assert { ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 +import { s as NextTracerImpl } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -19 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 10 @@ -1834,9 +1708,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { s as NextTracerImpl } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 19 -}; const getTracer = (()=>{ const tracer = new NextTracerImpl(); return ()=>tracer; @@ -1848,11 +1719,8 @@ export { getTracer as t } from "__TURBOPACK_VAR__" assert { ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { t as getTracer } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { getTracer }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/node-fetch/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/node-fetch/output.md index c298fb61a63d5..c3de057bafd54 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/node-fetch/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/node-fetch/output.md @@ -187,15 +187,12 @@ export { Stream as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { b as Stream } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { b as Stream } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; export { streamDestructionSupported as c } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -204,8 +201,8 @@ export { streamDestructionSupported as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as fetch } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -213,9 +210,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as fetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const __TURBOPACK__default__export__ = fetch; export { __TURBOPACK__default__export__ as d } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -238,11 +232,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { __TURBOPACK__default__export__ as default }; @@ -305,15 +296,12 @@ export { Stream as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { b as Stream } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { b as Stream } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; export { streamDestructionSupported as c } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -322,8 +310,8 @@ export { streamDestructionSupported as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as fetch } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -331,9 +319,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as fetch } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const __TURBOPACK__default__export__ = fetch; export { __TURBOPACK__default__export__ as d } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -356,11 +341,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { __TURBOPACK__default__export__ as default }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/otel-core/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/otel-core/output.md index e34bc4360aceb..fa16521a40f6f 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/otel-core/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/otel-core/output.md @@ -238,17 +238,11 @@ export { parseEnvironment as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as _globalThis } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as parseEnvironment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function getEnvWithoutDefaults() { return parseEnvironment(_globalThis); @@ -260,34 +254,22 @@ export { getEnvWithoutDefaults as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getEnvWithoutDefaults } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getEnvWithoutDefaults }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as DEFAULT_ENVIRONMENT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as parseEnvironment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as _globalThis } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function getEnv() { var globalEnv = parseEnvironment(_globalThis); @@ -300,11 +282,8 @@ export { getEnv as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as getEnv } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { getEnv }; @@ -397,17 +376,11 @@ export { parseEnvironment as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as _globalThis } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; import { c as parseEnvironment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function getEnvWithoutDefaults() { return parseEnvironment(_globalThis); @@ -419,34 +392,22 @@ export { getEnvWithoutDefaults as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as getEnvWithoutDefaults } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { getEnvWithoutDefaults }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as DEFAULT_ENVIRONMENT } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as parseEnvironment } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as _globalThis } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function getEnv() { var globalEnv = parseEnvironment(_globalThis); @@ -459,11 +420,8 @@ export { getEnv as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as getEnv } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { getEnv }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-handler/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-handler/output.md index 65a31f3e70ca8..7d15565dff491 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-handler/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-handler/output.md @@ -168,11 +168,8 @@ export { runtime as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as runtime } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { runtime }; @@ -187,11 +184,8 @@ export { NextResponse as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { b as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const GET = (req)=>{ return NextResponse.json({ @@ -205,11 +199,8 @@ export { GET as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { c as GET } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { GET }; @@ -272,11 +263,8 @@ export { runtime as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as runtime } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { runtime }; @@ -291,11 +279,8 @@ export { NextResponse as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { b as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const GET = (req)=>{ return NextResponse.json({ @@ -309,11 +294,8 @@ export { GET as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { c as GET } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { GET }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md index 6924612f2f251..72bd60ad17d9e 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/route-kind/output.md @@ -114,11 +114,8 @@ export { RouteKind as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; (function(RouteKind) { RouteKind["PAGES"] = "PAGES"; @@ -138,14 +135,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; export { RouteKind }; @@ -189,11 +183,8 @@ export { RouteKind as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; (function(RouteKind) { RouteKind["PAGES"] = "PAGES"; @@ -213,14 +204,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; export { RouteKind }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-2/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-2/output.md index d1a4ab2bab400..231f1231854ad 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-2/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-2/output.md @@ -281,11 +281,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -303,20 +300,14 @@ export { random as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 1 }; const shared = { random, @@ -329,11 +320,8 @@ export { shared as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const a = { shared, @@ -346,25 +334,19 @@ export { a as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { a }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 4 }; const b = { shared, @@ -377,22 +359,19 @@ export { b as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { e as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { b }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -400,9 +379,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -425,14 +401,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { order }; @@ -497,11 +470,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -519,20 +489,14 @@ export { random as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 1 }; const shared = { random, @@ -545,11 +509,8 @@ export { shared as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const a = { shared, @@ -562,25 +523,19 @@ export { a as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { a }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 4 }; const b = { shared, @@ -593,22 +548,19 @@ export { b as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { e as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { b }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -616,9 +568,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -641,14 +590,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { order }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-and-side-effects/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-and-side-effects/output.md index 4a933578294f8..c13e060954245 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-and-side-effects/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-and-side-effects/output.md @@ -347,23 +347,14 @@ export { value2 as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as value } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { c as value2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as value3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; const shared = { value, @@ -391,8 +382,8 @@ externalObject.propertyWithSetter = 42; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -406,9 +397,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 5 }; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(shared); ``` @@ -434,15 +422,12 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const a = { shared, a: "aaaaaaaaaaa" @@ -454,29 +439,23 @@ export { a as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { e as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { a }; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 8 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 }; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const b = { shared, b: "bbbbbbbbbbb" @@ -488,11 +467,8 @@ export { b as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { b }; @@ -584,23 +560,14 @@ export { value2 as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as value } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { c as value2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as value3 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; const shared = { value, @@ -614,11 +581,8 @@ export { shared as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; const a = { shared, @@ -631,25 +595,19 @@ export { a as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; import { e as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 + __turbopack_part__: -5 }; export { a }; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: 5 }; const b = { shared, @@ -662,11 +620,8 @@ export { b as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; import { f as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 + __turbopack_part__: -7 }; export { b }; @@ -687,8 +642,8 @@ externalObject.propertyWithSetter = 42; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -702,9 +657,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; console.log(shared); ``` diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-regression/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-regression/output.md index d1a4ab2bab400..231f1231854ad 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-regression/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/shared-regression/output.md @@ -281,11 +281,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -303,20 +300,14 @@ export { random as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 1 }; const shared = { random, @@ -329,11 +320,8 @@ export { shared as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const a = { shared, @@ -346,25 +334,19 @@ export { a as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { a }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 4 }; const b = { shared, @@ -377,22 +359,19 @@ export { b as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { e as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { b }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -400,9 +379,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -425,14 +401,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { order }; @@ -497,11 +470,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -519,20 +489,14 @@ export { random as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { b as random } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 1 }; const shared = { random, @@ -545,11 +509,8 @@ export { shared as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const a = { shared, @@ -562,25 +523,19 @@ export { a as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { a }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { c as shared } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 4 }; const b = { shared, @@ -593,22 +548,19 @@ export { b as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 -}; import { e as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 + __turbopack_part__: -6 }; export { b }; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -616,9 +568,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -641,14 +590,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 8 }; export { order }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple-vars-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple-vars-1/output.md index 14b3cfa980ace..741009b700b99 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple-vars-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple-vars-1/output.md @@ -114,11 +114,8 @@ export { b as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { b }; @@ -133,11 +130,8 @@ export { a as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { a }; @@ -189,11 +183,8 @@ export { b as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as b } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; export { b }; @@ -208,11 +199,8 @@ export { a as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { b as a } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { a }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple/output.md index 3fddff090b84d..96d7c8e0ed885 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/simple/output.md @@ -166,17 +166,11 @@ export { dog as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; const CHIMERA = cat + dog; export { CHIMERA as c } from "__TURBOPACK_VAR__" assert { @@ -186,22 +180,16 @@ export { CHIMERA as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as CHIMERA } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { CHIMERA }; ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; const DOG = dog; export { DOG as d } from "__TURBOPACK_VAR__" assert { @@ -211,11 +199,8 @@ export { DOG as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as DOG } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { DOG }; @@ -275,17 +260,11 @@ export { dog as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 2 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { a as cat } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; const CHIMERA = cat + dog; export { CHIMERA as c } from "__TURBOPACK_VAR__" assert { @@ -295,22 +274,16 @@ export { CHIMERA as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { c as CHIMERA } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { CHIMERA }; ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; import { b as dog } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; const DOG = dog; export { DOG as d } from "__TURBOPACK_VAR__" assert { @@ -320,11 +293,8 @@ export { DOG as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as DOG } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { DOG }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/template-pages/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/template-pages/output.md index 07c84eba05001..18bb0b9a02345 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/template-pages/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/template-pages/output.md @@ -1527,11 +1527,11 @@ import 'VAR_USERLAND'; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1551,12 +1551,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const __TURBOPACK__default__export__ = hoist(userland, 'default'); export { __TURBOPACK__default__export__ as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1565,22 +1559,19 @@ export { __TURBOPACK__default__export__ as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { __TURBOPACK__default__export__ as default }; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1603,12 +1594,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getStaticProps = hoist(userland, 'getStaticProps'); export { getStaticProps as h } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1617,22 +1602,19 @@ export { getStaticProps as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { h as getStaticProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; export { getStaticProps }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1658,12 +1640,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getStaticPaths = hoist(userland, 'getStaticPaths'); export { getStaticPaths as i } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1672,22 +1648,19 @@ export { getStaticPaths as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { i as getStaticPaths } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { getStaticPaths }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1716,12 +1689,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getServerSideProps = hoist(userland, 'getServerSideProps'); export { getServerSideProps as j } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1730,22 +1697,19 @@ export { getServerSideProps as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { j as getServerSideProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; export { getServerSideProps }; ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1777,12 +1741,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 18 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const config = hoist(userland, 'config'); export { config as k } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1791,22 +1749,19 @@ export { config as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { k as config } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { config }; ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1841,12 +1796,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 20 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const reportWebVitals = hoist(userland, 'reportWebVitals'); export { reportWebVitals as l } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1855,22 +1804,19 @@ export { reportWebVitals as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 -}; import { l as reportWebVitals } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 + __turbopack_part__: -22 }; export { reportWebVitals }; ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1908,12 +1854,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 22 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticProps = hoist(userland, 'unstable_getStaticProps'); export { unstable_getStaticProps as m } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1922,22 +1862,19 @@ export { unstable_getStaticProps as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 -}; import { m as unstable_getStaticProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 + __turbopack_part__: -24 }; export { unstable_getStaticProps }; ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -1978,12 +1915,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 24 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticPaths = hoist(userland, 'unstable_getStaticPaths'); export { unstable_getStaticPaths as n } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -1992,22 +1923,19 @@ export { unstable_getStaticPaths as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 26 -}; import { n as unstable_getStaticPaths } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 26 + __turbopack_part__: -26 }; export { unstable_getStaticPaths }; ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2051,12 +1979,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 26 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticParams = hoist(userland, 'unstable_getStaticParams'); export { unstable_getStaticParams as o } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2065,22 +1987,19 @@ export { unstable_getStaticParams as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 28 -}; import { o as unstable_getStaticParams } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 28 + __turbopack_part__: -28 }; export { unstable_getStaticParams }; ``` ## Part 30 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2127,12 +2046,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 28 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getServerProps = hoist(userland, 'unstable_getServerProps'); export { unstable_getServerProps as p } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2141,22 +2054,19 @@ export { unstable_getServerProps as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 31 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 30 -}; import { p as unstable_getServerProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 30 + __turbopack_part__: -30 }; export { unstable_getServerProps }; ``` ## Part 32 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2206,12 +2116,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 30 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getServerSideProps = hoist(userland, 'unstable_getServerSideProps'); export { unstable_getServerSideProps as q } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2220,31 +2124,28 @@ export { unstable_getServerSideProps as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 33 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 32 -}; import { q as unstable_getServerSideProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 32 + __turbopack_part__: -32 }; export { unstable_getServerSideProps }; ``` ## Part 34 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as PagesRouteModule } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as App } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as Document } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 32 @@ -2297,21 +2198,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 30 }; -import { d as PagesRouteModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { b as App } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import { a as Document } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const routeModule = new PagesRouteModule({ definition: { kind: RouteKind.PAGES, @@ -2392,11 +2278,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 36 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 34 -}; import { r as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 34 + __turbopack_part__: -34 }; export { routeModule }; @@ -2672,11 +2555,11 @@ import 'VAR_USERLAND'; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2696,12 +2579,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 11 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const __TURBOPACK__default__export__ = hoist(userland, 'default'); export { __TURBOPACK__default__export__ as g } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2710,22 +2587,19 @@ export { __TURBOPACK__default__export__ as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as __TURBOPACK__default__export__ } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; export { __TURBOPACK__default__export__ as default }; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2748,12 +2622,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getStaticProps = hoist(userland, 'getStaticProps'); export { getStaticProps as h } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2762,22 +2630,19 @@ export { getStaticProps as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 -}; import { h as getStaticProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 14 + __turbopack_part__: -14 }; export { getStaticProps }; ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2803,12 +2668,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 14 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getStaticPaths = hoist(userland, 'getStaticPaths'); export { getStaticPaths as i } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2817,22 +2676,19 @@ export { getStaticPaths as i } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { i as getStaticPaths } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { getStaticPaths }; ``` ## Part 18 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2861,12 +2717,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 16 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const getServerSideProps = hoist(userland, 'getServerSideProps'); export { getServerSideProps as j } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2875,22 +2725,19 @@ export { getServerSideProps as j } from "__TURBOPACK_VAR__" assert { ``` ## Part 19 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 -}; import { j as getServerSideProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 18 + __turbopack_part__: -18 }; export { getServerSideProps }; ``` ## Part 20 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2922,12 +2769,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 18 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const config = hoist(userland, 'config'); export { config as k } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -2936,22 +2777,19 @@ export { config as k } from "__TURBOPACK_VAR__" assert { ``` ## Part 21 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 -}; import { k as config } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 20 + __turbopack_part__: -20 }; export { config }; ``` ## Part 22 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -2986,12 +2824,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 20 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const reportWebVitals = hoist(userland, 'reportWebVitals'); export { reportWebVitals as l } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3000,22 +2832,19 @@ export { reportWebVitals as l } from "__TURBOPACK_VAR__" assert { ``` ## Part 23 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 -}; import { l as reportWebVitals } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 22 + __turbopack_part__: -22 }; export { reportWebVitals }; ``` ## Part 24 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3053,12 +2882,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 22 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticProps = hoist(userland, 'unstable_getStaticProps'); export { unstable_getStaticProps as m } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3067,22 +2890,19 @@ export { unstable_getStaticProps as m } from "__TURBOPACK_VAR__" assert { ``` ## Part 25 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 -}; import { m as unstable_getStaticProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 24 + __turbopack_part__: -24 }; export { unstable_getStaticProps }; ``` ## Part 26 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3123,12 +2943,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 24 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticPaths = hoist(userland, 'unstable_getStaticPaths'); export { unstable_getStaticPaths as n } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3137,22 +2951,19 @@ export { unstable_getStaticPaths as n } from "__TURBOPACK_VAR__" assert { ``` ## Part 27 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 26 -}; import { n as unstable_getStaticPaths } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 26 + __turbopack_part__: -26 }; export { unstable_getStaticPaths }; ``` ## Part 28 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3196,12 +3007,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 26 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getStaticParams = hoist(userland, 'unstable_getStaticParams'); export { unstable_getStaticParams as o } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3210,22 +3015,19 @@ export { unstable_getStaticParams as o } from "__TURBOPACK_VAR__" assert { ``` ## Part 29 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 28 -}; import { o as unstable_getStaticParams } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 28 + __turbopack_part__: -28 }; export { unstable_getStaticParams }; ``` ## Part 30 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3272,12 +3074,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 28 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getServerProps = hoist(userland, 'unstable_getServerProps'); export { unstable_getServerProps as p } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3286,22 +3082,19 @@ export { unstable_getServerProps as p } from "__TURBOPACK_VAR__" assert { ``` ## Part 31 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 30 -}; import { p as unstable_getServerProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 30 + __turbopack_part__: -30 }; export { unstable_getServerProps }; ``` ## Part 32 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 +import { f as hoist } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -5 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 6 @@ -3351,12 +3144,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 30 }; -import { f as hoist } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 5 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const unstable_getServerSideProps = hoist(userland, 'unstable_getServerSideProps'); export { unstable_getServerSideProps as q } from "__TURBOPACK_VAR__" assert { __turbopack_var__: true @@ -3365,31 +3152,28 @@ export { unstable_getServerSideProps as q } from "__TURBOPACK_VAR__" assert { ``` ## Part 33 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 32 -}; import { q as unstable_getServerSideProps } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 32 + __turbopack_part__: -32 }; export { unstable_getServerSideProps }; ``` ## Part 34 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { d as PagesRouteModule } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { c as RouteKind } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { b as App } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -1 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 +import { a as Document } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { e as userland } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 32 @@ -3442,21 +3226,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 30 }; -import { d as PagesRouteModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as RouteKind } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { b as App } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import { a as Document } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { e as userland } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; const routeModule = new PagesRouteModule({ definition: { kind: RouteKind.PAGES, @@ -3537,11 +3306,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 36 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 34 -}; import { r as routeModule } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 34 + __turbopack_part__: -34 }; export { routeModule }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/test-config-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/test-config-1/output.md index 2618322891641..78a2bcb82d5df 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/test-config-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/test-config-1/output.md @@ -456,11 +456,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const foo = foobar; export { foo as d } from "__TURBOPACK_VAR__" assert { @@ -470,45 +467,33 @@ export { foo as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { foo }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { b as bar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; -import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; foobar += bar; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; let foobarCopy = foobar; export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { @@ -518,11 +503,11 @@ export { foobarCopy as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 @@ -530,28 +515,19 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; foobar += "foo"; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; function internal() { return upper(foobar); @@ -563,20 +539,14 @@ export { internal as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { f as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 8 }; function external1() { return internal() + foobar; @@ -588,31 +558,28 @@ export { external1 as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { g as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { external1 }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 8 }; export { foobar }; ``` ## Part 13 ```js +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 +}; import "__TURBOPACK_PART__" assert { __turbopack_part__: 4 }; @@ -622,12 +589,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 12 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; function external2() { foobar += "."; } @@ -638,19 +599,16 @@ export { external2 as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 -}; import { h as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 13 + __turbopack_part__: -13 }; export { external2 }; ``` ## Part 15 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -667,9 +625,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 9 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; console.log(foobarCopy); ``` @@ -686,15 +641,12 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { e as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -7 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 15 }; -import { e as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; foobarCopy += "Unused"; ``` @@ -779,11 +731,8 @@ export { foobar as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; function external2() { foobar += "."; @@ -795,76 +744,55 @@ export { external2 as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as external2 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { external2 }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { b as bar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; foobar += bar; ``` ## Part 7 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; foobar += "foo"; ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 7 }; export { foobar }; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 7 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; import { a as upper } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 +}; +import "__TURBOPACK_PART__" assert { + __turbopack_part__: 7 }; function internal() { return upper(foobar); @@ -876,21 +804,15 @@ export { internal as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 +import { e as internal } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -9 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 7 }; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { e as internal } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; function external1() { return internal() + foobar; } @@ -901,25 +823,19 @@ export { external1 as f } from "__TURBOPACK_VAR__" assert { ``` ## Part 11 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 -}; import { f as external1 } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 + __turbopack_part__: -10 }; export { external1 }; ``` ## Part 12 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { c as foobar } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -3 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; -import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: 6 }; let foobarCopy = foobar; export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { @@ -929,26 +845,20 @@ export { foobarCopy as g } from "__TURBOPACK_VAR__" assert { ``` ## Part 13 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 + __turbopack_part__: -12 }; foobarCopy += "Unused"; ``` ## Part 14 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 +import { g as foobarCopy } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -12 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 }; -import { g as foobarCopy } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 12 -}; console.log(foobarCopy); ``` @@ -965,11 +875,8 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 16 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { c as foobar } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; const foo = foobar; export { foo as h } from "__TURBOPACK_VAR__" assert { @@ -979,11 +886,8 @@ export { foo as h } from "__TURBOPACK_VAR__" assert { ``` ## Part 17 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 -}; import { h as foo } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 16 + __turbopack_part__: -16 }; export { foo }; @@ -1039,8 +943,8 @@ import "__TURBOPACK_PART__" assert { ## Merged (external1) ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { f as external1 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; export { external1 }; @@ -1069,11 +973,11 @@ export { external1 }; ## Merged (external1,external2) ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 10 +import { f as external1 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -10 }; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { d as external2 } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -4 }; export { external1 }; export { external2 }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/tla-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/tla-1/output.md index 308e68cf5d05a..d86ef89f17e37 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/tla-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/tla-1/output.md @@ -154,26 +154,20 @@ export { effects as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as effects } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { effects }; ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 +import { a as effects } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -2 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as effects } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; function effect(name) { effects.push(name); } @@ -184,11 +178,8 @@ export { effect as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { b as effect } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { effect }; @@ -251,11 +242,8 @@ export { effects as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as effects } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; function effect(name) { effects.push(name); @@ -267,22 +255,16 @@ export { effect as b } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { b as effect } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { effect }; ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; import { a as effects } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; export { effects }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/typeof-1/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/typeof-1/output.md index 7697decd9c5f9..160bac9430ede 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/typeof-1/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/typeof-1/output.md @@ -227,23 +227,14 @@ export { NextResponse as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as MyModuleClientComponent } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as ClientComponent } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function GET() { return NextResponse.json({ @@ -258,11 +249,8 @@ export { GET as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as GET } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { GET }; @@ -366,23 +354,14 @@ export { NextResponse as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 3 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 -}; -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as MyModuleClientComponent } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; import { c as NextResponse } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 2 + __turbopack_part__: -2 }; import { b as ClientComponent } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 + __turbopack_part__: -1 }; function GET() { return NextResponse.json({ @@ -397,11 +376,8 @@ export { GET as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 -}; import { d as GET } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 3 + __turbopack_part__: -3 }; export { GET }; diff --git a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/write-order/output.md b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/write-order/output.md index 74733b899b426..70397abd9a71f 100644 --- a/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/write-order/output.md +++ b/turbopack/crates/turbopack-ecmascript/tests/tree-shaker/analyzer/write-order/output.md @@ -293,11 +293,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -329,11 +326,11 @@ export { x2 as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 @@ -341,9 +338,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const shared = { effect: order.push("b") }; @@ -354,22 +348,19 @@ export { shared as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { shared }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -380,9 +371,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -408,32 +396,26 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; export { order }; ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 8 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; function func() { order.push("d"); } @@ -444,11 +426,8 @@ export { func as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 -}; import { e as func } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 9 + __turbopack_part__: -9 }; export { func }; @@ -516,11 +495,8 @@ export { order as a } from "__TURBOPACK_VAR__" assert { ``` ## Part 1 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: -0 }; order.push("a"); @@ -552,11 +528,11 @@ export { x2 as c } from "__TURBOPACK_VAR__" assert { ``` ## Part 4 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 1 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 1 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 2 @@ -564,9 +540,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; const shared = { effect: order.push("b") }; @@ -577,22 +550,19 @@ export { shared as d } from "__TURBOPACK_VAR__" assert { ``` ## Part 5 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 -}; import { d as shared } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 + __turbopack_part__: -4 }; export { shared }; ``` ## Part 6 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 4 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 4 }; import "__TURBOPACK_PART__" assert { __turbopack_part__: 1 @@ -603,9 +573,6 @@ import "__TURBOPACK_PART__" assert { import "__TURBOPACK_PART__" assert { __turbopack_part__: 3 }; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; order.push("c"); ``` @@ -631,14 +598,11 @@ import "__TURBOPACK_PART__" assert { ``` ## Part 8 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; function func() { order.push("d"); @@ -650,25 +614,19 @@ export { func as e } from "__TURBOPACK_VAR__" assert { ``` ## Part 9 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 -}; import { e as func } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 8 + __turbopack_part__: -8 }; export { func }; ``` ## Part 10 ```js -import "__TURBOPACK_PART__" assert { - __turbopack_part__: 6 +import { a as order } from "__TURBOPACK_PART__" assert { + __turbopack_part__: -0 }; import "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 -}; -import { a as order } from "__TURBOPACK_PART__" assert { - __turbopack_part__: 0 + __turbopack_part__: 6 }; export { order }; diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js index d2f74e2974740..91139d62a65e9 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -143,7 +137,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -161,7 +154,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -181,7 +173,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -207,9 +198,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -229,7 +217,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -242,15 +229,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -268,7 +253,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -284,7 +268,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$dynamic$2d$import$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -300,7 +283,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js.map index 51be1ef630519..c67a855e11eb1 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_dynamic-import_input_lib_e521f1.js.map @@ -4,42 +4,42 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,kPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,kPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,kPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 138, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 146, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 152, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,kPAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 168, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 174, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,kPAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 188, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,kPAAA,CAAA,IAAG;IACZ,KAAK,mPAAA,CAAA,IAAM;IACX,KAAK,kPAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 218, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 224, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 232, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 238, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,kPAAA,CAAA,IAAG,GAAG,kPAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 257, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 271, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 277, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,kPAAA,CAAA,IAAG"}}, - {"offset": {"line": 289, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 295, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 303, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 309, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 324, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 330, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 341, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,kPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,kPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,kPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 126, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,kPAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 160, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,kPAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,kPAAA,CAAA,IAAG;IACZ,KAAK,mPAAA,CAAA,IAAM;IACX,KAAK,kPAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 212, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 219, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,kPAAA,CAAA,IAAG,GAAG,kPAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 255, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 261, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/dynamic-import/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,kPAAA,CAAA,IAAG"}}, + {"offset": {"line": 272, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 285, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 291, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 306, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 312, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 323, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js index 4e3cf09f65539..a865b4746f760 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -174,7 +168,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/module.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -205,7 +198,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -230,12 +222,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js.map index 20987b8ef1de9..78d1743fa1806 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-named_input_1823b4._.js.map @@ -4,40 +4,40 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 163, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 169, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 177, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 183, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 200, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 208, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 214, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 231, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js"],"sourcesContent":["import { fakeCat } from \"./module\";\n\n\nconsole.log(fakeCat)\n"],"names":[],"mappings":";;;;;;;AAGA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAO"}}, - {"offset": {"line": 239, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 245, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 252, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 258, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 133, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 143, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 157, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 163, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 170, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 187, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 193, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 200, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 217, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 223, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-named/input/index.js"],"sourcesContent":["import { fakeCat } from \"./module\";\n\n\nconsole.log(fakeCat)\n"],"names":[],"mappings":";;;;;;AAGA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAO"}}, + {"offset": {"line": 230, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 236, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 243, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 249, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 254, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js index b135e128475e4..7d2731a9a0ca6 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -174,7 +168,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -192,7 +185,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -212,7 +204,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -238,9 +229,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -260,7 +248,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -273,15 +260,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -299,7 +284,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -315,7 +299,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -331,7 +314,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -380,7 +362,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -405,12 +386,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$export$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"].cat); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js.map index 06c999b2f36e4..1bad33bcc7015 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_export-namespace_input_6b9ee3._.js.map @@ -4,58 +4,58 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 163, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 169, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 177, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 183, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,oPAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 199, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 205, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,oPAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 219, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,oPAAA,CAAA,IAAG;IACZ,KAAK,qPAAA,CAAA,IAAM;IACX,KAAK,oPAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 249, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 255, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 269, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,oPAAA,CAAA,IAAG,GAAG,oPAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 288, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 294, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 302, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 308, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 320, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 326, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 334, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 340, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 355, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 361, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 369, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 375, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 383, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 389, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 400, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 406, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js"],"sourcesContent":["import {lib} from './module'\n\nconsole.log(lib.cat)\n"],"names":[],"mappings":";;;;;;;AAEA,QAAQ,GAAG,CAAC,sPAAA,CAAA,IAAG,CAAC,GAAG"}}, - {"offset": {"line": 414, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 420, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 427, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 433, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 438, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 133, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 143, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 157, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 163, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 170, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,oPAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 191, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 197, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,oPAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 210, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 216, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,oPAAA,CAAA,IAAG;IACZ,KAAK,qPAAA,CAAA,IAAM;IACX,KAAK,oPAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 237, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 243, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 250, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 256, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,oPAAA,CAAA,IAAG,GAAG,oPAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 273, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 279, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 286, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 292, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 303, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 309, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 316, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 322, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 337, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 343, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 351, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 357, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 364, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 370, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 381, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 387, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/export-namespace/input/index.js"],"sourcesContent":["import {lib} from './module'\n\nconsole.log(lib.cat)\n"],"names":[],"mappings":";;;;;;AAEA,QAAQ,GAAG,CAAC,sPAAA,CAAA,IAAG,CAAC,GAAG"}}, + {"offset": {"line": 394, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 400, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 407, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 413, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 418, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js index 3eef8f6ba6918..59b3fb946e1c3 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -153,7 +147,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -178,12 +171,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2d$all$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"]) // TODO: Execution ; }}), diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js.map index 9e8afc629548a..f81b0fe7b1e13 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named-all_input_84a6ca._.js.map @@ -4,32 +4,32 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,uPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,uPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,uPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 148, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 156, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 162, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 173, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js"],"sourcesContent":["import {cat as c,dogRef,initialCat,getChimera} from './lib'\n\nconsole.log(c)\n\n// TODO: Execution\n"],"names":[],"mappings":";;;;;;;AAEA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAC,EAEb,kBAAkB"}}, - {"offset": {"line": 188, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 201, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 207, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 212, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,uPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,uPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,uPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,uPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 136, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 172, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named-all/input/index.js"],"sourcesContent":["import {cat as c,dogRef,initialCat,getChimera} from './lib'\n\nconsole.log(c)\n\n// TODO: Execution\n"],"names":[],"mappings":";;;;;;AAEA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAC,EAEb,kBAAkB"}}, + {"offset": {"line": 180, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 186, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 193, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 199, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 204, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js index b80bccc4d46c5..f000a38b95bda 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -153,7 +147,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -178,12 +171,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$named$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js.map index 4248dfd9611db..8ca7bc26992a9 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-named_input_4f48a0._.js.map @@ -4,32 +4,32 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,gPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 148, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 156, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 162, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 173, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js"],"sourcesContent":["import {cat as c} from './lib'\n\nconsole.log(c)\n"],"names":[],"mappings":";;;;;;;AAEA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAC"}}, - {"offset": {"line": 187, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 193, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 200, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 211, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,gPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,gPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 136, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 172, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-named/input/index.js"],"sourcesContent":["import {cat as c} from './lib'\n\nconsole.log(c)\n"],"names":[],"mappings":";;;;;;AAEA,QAAQ,GAAG,CAAC,kPAAA,CAAA,IAAC"}}, + {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 192, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 203, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js index cedbeb8d916c6..dc7c6e5f596fb 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -153,7 +147,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -171,7 +164,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -191,7 +183,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -217,9 +208,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -239,7 +227,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -252,15 +239,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -278,7 +263,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -294,7 +278,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -310,7 +293,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -353,12 +335,11 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; { __turbopack_esm__({}); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$namespace$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__1$3e$__["a"].cat); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js.map index cfd529f4f9ebd..d0697329000c3 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-namespace_input_519014._.js.map @@ -4,50 +4,50 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,oPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 148, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 156, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 162, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,oPAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 178, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 184, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,oPAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 204, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,oPAAA,CAAA,IAAG;IACZ,KAAK,qPAAA,CAAA,IAAM;IACX,KAAK,oPAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 228, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 234, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,oPAAA,CAAA,IAAG,GAAG,oPAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 267, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 273, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 281, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 287, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,oPAAA,CAAA,IAAG"}}, - {"offset": {"line": 299, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 305, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 313, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 319, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 334, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 340, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 348, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 354, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js"],"sourcesContent":["import * as lib from './lib'\n\nconsole.log(lib.cat)\n"],"names":[],"mappings":";;;;;;;AAEA,QAAQ,GAAG,CAAC,sPAAA,CAAA,IAAG,CAAC,GAAG"}}, - {"offset": {"line": 362, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 368, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 375, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 381, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 386, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,oPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 136, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 142, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 149, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 155, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,oPAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 170, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,oPAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 189, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 195, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,oPAAA,CAAA,IAAG;IACZ,KAAK,qPAAA,CAAA,IAAM;IACX,KAAK,oPAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 216, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 222, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 229, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 235, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,oPAAA,CAAA,IAAG,GAAG,oPAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 252, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 258, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 265, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 271, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,oPAAA,CAAA,IAAG"}}, + {"offset": {"line": 282, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 288, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 295, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 301, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 316, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 322, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 330, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 336, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-namespace/input/index.js"],"sourcesContent":["import * as lib from './lib'\n\nconsole.log(lib.cat)\n"],"names":[],"mappings":";;;;;;AAEA,QAAQ,GAAG,CAAC,sPAAA,CAAA,IAAG,CAAC,GAAG"}}, + {"offset": {"line": 343, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 349, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 356, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 362, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 367, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js index 2ab78d5eb24d2..ff9ac1456fb09 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$import$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js.map index a993a9be292a1..030a968d416dd 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/output/b1abf_turbopack-tests_tests_snapshot_basic-tree-shake_import-side-effect_input_55cb06._.js.map @@ -4,24 +4,24 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,yPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,yPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,yPAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 134, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 150, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,yPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,yPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,yPAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/import-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,yPAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 122, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 128, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 133, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 144, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js index f0f20be8c82d5..fd42042849086 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -143,7 +137,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -161,7 +154,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -181,7 +173,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -207,9 +198,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -229,7 +217,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -242,15 +229,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -268,7 +253,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -284,7 +268,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$require$2d$side$2d$effect$2f$input$2f$lib$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -300,7 +283,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js.map index eed96fbd24538..743f33a870938 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/output/4c35f_tests_snapshot_basic-tree-shake_require-side-effect_input_c7b81e._.js.map @@ -4,44 +4,44 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,0PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,0PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,0PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 138, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 146, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 152, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,0PAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 168, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 174, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,0PAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 188, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,0PAAA,CAAA,IAAG;IACZ,KAAK,2PAAA,CAAA,IAAM;IACX,KAAK,0PAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 218, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 224, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 232, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 238, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,0PAAA,CAAA,IAAG,GAAG,0PAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 257, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 271, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 277, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,0PAAA,CAAA,IAAG"}}, - {"offset": {"line": 289, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 295, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 303, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 309, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 324, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 330, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 341, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 346, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/index.js"],"sourcesContent":["const {cat} = require('./lib')\n"],"names":[],"mappings":"AAAA,MAAM,EAAC,GAAG,EAAC"}}, - {"offset": {"line": 347, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,0PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,0PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,0PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,0PAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 126, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,0PAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 160, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,0PAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,0PAAA,CAAA,IAAG;IACZ,KAAK,2PAAA,CAAA,IAAM;IACX,KAAK,0PAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 212, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 219, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,0PAAA,CAAA,IAAG,GAAG,0PAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 255, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 261, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/lib.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,0PAAA,CAAA,IAAG"}}, + {"offset": {"line": 272, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 285, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 291, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 306, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 312, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 323, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 328, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/require-side-effect/input/index.js"],"sourcesContent":["const {cat} = require('./lib')\n"],"names":[],"mappings":"AAAA,MAAM,EAAC,GAAG,EAAC"}}, + {"offset": {"line": 329, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js index dfc368614aec3..5bf44f761a571 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js @@ -23,7 +23,6 @@ __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -37,7 +36,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -51,7 +49,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] += "!"; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -65,7 +62,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -75,13 +71,12 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__7$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -91,15 +86,14 @@ var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_ { __turbopack_esm__({}); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__14$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__15$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; ; -; console.log(__TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]); }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { @@ -143,7 +137,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -161,7 +154,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; function getDog() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -181,7 +173,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; function setDog(newDog) { __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"] = newDog; } @@ -207,9 +198,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo ; ; ; -; -; -; const dogRef = { initial: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"], get: __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__11$3e$__["f"], @@ -229,7 +217,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -242,15 +229,13 @@ __turbopack_esm__({ (new_getChimera)=>getChimera = new_getChimera ] }); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); -var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__8$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; ; ; -; -; function getChimera() { return __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"] + __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__4$3e$__["c"]; } @@ -268,7 +253,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; @@ -284,7 +268,6 @@ __turbopack_esm__({ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) "); "__TURBOPACK__ecmascript__hoisting__location__"; ; -; const initialCat = __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$basic$2d$tree$2d$shake$2f$tree$2d$shake$2d$test$2d$1$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__["a"]; ; }}), @@ -300,7 +283,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbo "__TURBOPACK__ecmascript__hoisting__location__"; ; ; -; }}), "[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { "use strict"; diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js.map index c9fec8650a2ba..7925bc5995b93 100644 --- a/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js.map +++ b/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/output/4c35f_tests_snapshot_basic-tree-shake_tree-shake-test-1_input_index_950e23.js.map @@ -4,42 +4,42 @@ "sections": [ {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAAA,IAAI,MAAM"}}, {"offset": {"line": 15, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;AAEA,6PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 27, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 33, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAUA,6PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 41, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 47, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAkBA,6PAAA,CAAA,IAAG,IAAI"}}, - {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 61, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;AAIA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, - {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 75, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAYA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, - {"offset": {"line": 85, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 91, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, - {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 109, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 124, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, - {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 138, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 146, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 152, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAMA,SAAS;IACP,OAAO,6PAAA,CAAA,IAAG;AACZ"}}, - {"offset": {"line": 168, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 174, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,6PAAA,CAAA,IAAG,GAAG;AACR"}}, - {"offset": {"line": 188, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 194, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,6PAAA,CAAA,IAAG;IACZ,KAAK,8PAAA,CAAA,IAAM;IACX,KAAK,6PAAA,CAAA,IAAM;AACb"}}, - {"offset": {"line": 218, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 224, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 232, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 238, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,6PAAA,CAAA,IAAG,GAAG,6PAAA,CAAA,IAAG;AAClB"}}, - {"offset": {"line": 257, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 263, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 271, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 277, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AA8BO,MAAM,aAAa,6PAAA,CAAA,IAAG"}}, - {"offset": {"line": 289, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 295, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 303, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 309, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 324, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, - {"offset": {"line": 330, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, - {"offset": {"line": 341, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] + {"offset": {"line": 21, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;AAEA,6PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 32, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAUA,6PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 39, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 45, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAkBA,6PAAA,CAAA,IAAG,IAAI"}}, + {"offset": {"line": 52, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AAIA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, + {"offset": {"line": 65, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 71, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;AAYA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, + {"offset": {"line": 80, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 86, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAoBA,QAAQ,GAAG,CAAC,6PAAA,CAAA,IAAG"}}, + {"offset": {"line": 97, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 103, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 118, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;AA4BO,IAAI,MAAM"}}, + {"offset": {"line": 126, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 132, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 139, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 145, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMA,SAAS;IACP,OAAO,6PAAA,CAAA,IAAG;AACZ"}}, + {"offset": {"line": 160, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 166, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AAcA,SAAS,OAAO,MAAM;IACpB,6PAAA,CAAA,IAAG,GAAG;AACR"}}, + {"offset": {"line": 179, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,MAAM,SAAS;IACpB,SAAS,6PAAA,CAAA,IAAG;IACZ,KAAK,8PAAA,CAAA,IAAM;IACX,KAAK,6PAAA,CAAA,IAAM;AACb"}}, + {"offset": {"line": 206, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 212, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 219, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 225, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAgCO,SAAS;IACd,OAAO,6PAAA,CAAA,IAAG,GAAG,6PAAA,CAAA,IAAG;AAClB"}}, + {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 248, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 255, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 261, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/basic-tree-shake/tree-shake-test-1/input/index.js"],"sourcesContent":["let dog = \"dog\";\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction getDog() {\n return dog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nfunction setDog(newDog) {\n dog = newDog;\n}\n\ndog += \"!\";\n\nconsole.log(dog);\n\nexport const dogRef = {\n initial: dog,\n get: getDog,\n set: setDog,\n};\n\nexport let cat = \"cat\";\n\nexport const initialCat = cat;\n\nexport function getChimera() {\n return cat + dog;\n}\n"],"names":[],"mappings":";;;;;;;;;AA8BO,MAAM,aAAa,6PAAA,CAAA,IAAG"}}, + {"offset": {"line": 272, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 285, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 291, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 306, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 312, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 323, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] } \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js new file mode 100644 index 0000000000000..0fb5615352753 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js @@ -0,0 +1,5 @@ +import { baz } from './module' + +if (1 + 1 == 3) { + baz(); +} diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js new file mode 100644 index 0000000000000..4d614d519c52a --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js @@ -0,0 +1,7 @@ +export function bar() { + console.log('BAR should not be included'); +} + +export function baz() { + console.log('BAZ should not be included'); +} diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/options.json b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/options.json new file mode 100644 index 0000000000000..000d78a6b3cbb --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/options.json @@ -0,0 +1,3 @@ +{ + "treeShakingMode": "module-fragments" +} diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js new file mode 100644 index 0000000000000..688e8a424e300 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js @@ -0,0 +1,6 @@ +(globalThis.TURBOPACK = globalThis.TURBOPACK || []).push([ + "output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js", + {}, + {"otherChunks":["output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js"],"runtimeModuleIds":["[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript)"]} +]); +// Dummy runtime \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js.map new file mode 100644 index 0000000000000..c15d7ec00382d --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/4e721_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_index_04960d.js.map @@ -0,0 +1,5 @@ +{ + "version": 3, + "sources": [], + "sections": [] +} \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js new file mode 100644 index 0000000000000..75cbc130434e8 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js @@ -0,0 +1,59 @@ +(globalThis.TURBOPACK = globalThis.TURBOPACK || []).push(["output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js", { + +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js [test] (ecmascript) ": (function(__turbopack_context__) { + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, m: module, e: exports, t: require } = __turbopack_context__; +{ +"module evaluation"; +}}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { +"use strict"; + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; +{ +__turbopack_esm__({}); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$module$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$module__evaluation$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/module.js [test] (ecmascript) "); +"__TURBOPACK__ecmascript__hoisting__location__"; +; +}}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { +"use strict"; + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; +{ +__turbopack_esm__({}); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) "); +"__TURBOPACK__ecmascript__hoisting__location__"; +; +; +if ("TURBOPACK compile-time falsy", 0) { + "TURBOPACK unreachable"; +} +}}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) ": ((__turbopack_context__) => { +"use strict"; + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; +{ +__turbopack_esm__({}); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__0$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$internal__part__2$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) "); +"__TURBOPACK__ecmascript__hoisting__location__"; +; +; +"module evaluation"; +}}), +"[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript)": ((__turbopack_context__) => { +"use strict"; + +var { r: __turbopack_require__, f: __turbopack_module_context__, i: __turbopack_import__, s: __turbopack_esm__, v: __turbopack_export_value__, n: __turbopack_export_namespace__, c: __turbopack_cache__, M: __turbopack_modules__, l: __turbopack_load__, j: __turbopack_dynamic__, P: __turbopack_resolve_absolute_path__, U: __turbopack_relative_url__, R: __turbopack_resolve_module_id_path__, b: __turbopack_worker_blob_url__, g: global, __dirname, z: require } = __turbopack_context__; +{ +__turbopack_esm__({}); +var __TURBOPACK__imported__module__$5b$project$5d2f$turbopack$2f$crates$2f$turbopack$2d$tests$2f$tests$2f$snapshot$2f$tree$2d$shaking$2f$dce$2f$input$2f$index$2e$js__$5b$test$5d$__$28$ecmascript$29$__$3c$module__evaluation$3e$__ = __turbopack_import__("[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js [test] (ecmascript) "); +"__TURBOPACK__ecmascript__hoisting__location__"; +; +; +}}), +}]); + +//# sourceMappingURL=turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map \ No newline at end of file diff --git a/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map new file mode 100644 index 0000000000000..e9cbf3634b650 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/output/turbopack_crates_turbopack-tests_tests_snapshot_tree-shaking_dce_input_757209._.js.map @@ -0,0 +1,15 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 6, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 7, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 13, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 17, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 23, "column": 0}, "map": {"version":3,"sources":["turbopack://[project]/turbopack/crates/turbopack-tests/tests/snapshot/tree-shaking/dce/input/index.js"],"sourcesContent":["import { baz } from './module'\n\nif (1 + 1 == 3) {\n baz();\n}\n"],"names":[],"mappings":";;;;;AAEA,uCAAgB;;AAEhB"}}, + {"offset": {"line": 31, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 37, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 44, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}, + {"offset": {"line": 50, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 55, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":"A"}}] +} \ No newline at end of file From 9e86040bcf42c575ab40dba89368a939d59c8046 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 4 Oct 2024 15:54:46 +0200 Subject: [PATCH 14/19] Turbopack: next/dynamic layout segment optimization (#70708) Closes PACK-3274 This deduplicates work by only searching for `next/dynamic` once per layout segment. - `collect_next_dynamic_imports` is a turbotask now, executed once per layout segment - `collect_next_dynamic_imports` also takes a list of visited modules, to prevent revisiting Before Bildschirmfoto 2024-10-01 um 15 28 34 After Bildschirmfoto 2024-10-02 um 15 17 10 --- crates/next-api/src/app.rs | 63 +++++---- crates/next-api/src/dynamic_imports.rs | 120 +++++++++++------- crates/next-api/src/pages.rs | 25 ++-- .../visit_client_reference.rs | 21 ++- .../turbo-tasks/src/graph/graph_store.rs | 13 +- .../turbo-tasks/src/graph/graph_traversal.rs | 17 ++- turbopack/crates/turbo-tasks/src/graph/mod.rs | 2 +- 7 files changed, 173 insertions(+), 88 deletions(-) diff --git a/crates/next-api/src/app.rs b/crates/next-api/src/app.rs index 8cafb6bb7dd9b..5772561ae4be6 100644 --- a/crates/next-api/src/app.rs +++ b/crates/next-api/src/app.rs @@ -1,5 +1,5 @@ use anyhow::{Context, Result}; -use indexmap::IndexSet; +use indexmap::{IndexMap, IndexSet}; use next_core::{ all_assets_from_entries, app_segment_config::NextSegmentConfig, @@ -18,9 +18,7 @@ use next_core::{ get_client_module_options_context, get_client_resolve_options_context, get_client_runtime_entries, ClientContextType, RuntimeEntries, }, - next_client_reference::{ - client_reference_graph, ClientReferenceType, NextEcmascriptClientReferenceTransition, - }, + next_client_reference::{client_reference_graph, NextEcmascriptClientReferenceTransition}, next_config::NextConfig, next_dynamic::NextDynamicTransition, next_edge::route_regex::get_named_middleware_regex, @@ -69,6 +67,7 @@ use turbopack_ecmascript::resolve::cjs_resolve; use crate::{ dynamic_imports::{ collect_chunk_group, collect_evaluated_chunk_group, collect_next_dynamic_imports, + VisitedDynamicImportModules, }, font::create_font_manifest, loadable_manifest::create_react_loadable_manifest, @@ -864,7 +863,6 @@ impl AppEndpoint { let client_shared_availability_info = client_shared_chunk_group.availability_info; let client_references = client_reference_graph(Vc::cell(vec![rsc_entry_asset])); - let client_reference_types = client_references.types(); let ssr_chunking_context = if process_ssr { Some(match runtime { @@ -880,21 +878,32 @@ impl AppEndpoint { None }; - let client_dynamic_imports = collect_next_dynamic_imports( - client_references + let client_dynamic_imports = { + let mut client_dynamic_imports = IndexMap::new(); + let mut visited_modules = VisitedDynamicImportModules::empty(); + + for refs in client_references .await? - .client_references - .iter() - .filter_map(|r| match r.ty() { - ClientReferenceType::EcmascriptClientReference(entry) => Some(entry), - ClientReferenceType::CssClientReference(_) => None, - }) - .map(|entry| async move { Ok(Vc::upcast(entry.await?.ssr_module)) }) - .try_join() - .await?, - Vc::upcast(this.app_project.client_module_context()), - ) - .await?; + .client_references_by_server_component + .values() + { + let result = collect_next_dynamic_imports( + refs.clone(), + Vc::upcast(this.app_project.client_module_context()), + visited_modules, + ) + .await?; + client_dynamic_imports.extend( + result + .client_dynamic_imports + .iter() + .map(|(k, v)| (*k, v.clone())), + ); + visited_modules = result.visited_modules; + } + + client_dynamic_imports + }; let client_references_chunks = get_app_client_references_chunks( client_references, @@ -1025,7 +1034,7 @@ impl AppEndpoint { } ( - Some(get_app_server_reference_modules(client_reference_types)), + Some(get_app_server_reference_modules(client_references.types())), Some(client_dynamic_imports), Some(client_references), ) @@ -1199,10 +1208,13 @@ impl AppEndpoint { // create react-loadable-manifest for next/dynamic let mut dynamic_import_modules = collect_next_dynamic_imports( - [Vc::upcast(app_entry.rsc_entry)], + vec![Vc::upcast(app_entry.rsc_entry)], Vc::upcast(this.app_project.client_module_context()), + VisitedDynamicImportModules::empty(), ) - .await?; + .await? + .client_dynamic_imports + .clone(); dynamic_import_modules.extend(client_dynamic_imports.into_iter().flatten()); let dynamic_import_entries = collect_evaluated_chunk_group( Vc::upcast(client_chunking_context), @@ -1351,10 +1363,13 @@ impl AppEndpoint { // create react-loadable-manifest for next/dynamic let availability_info = Value::new(AvailabilityInfo::Root); let mut dynamic_import_modules = collect_next_dynamic_imports( - [Vc::upcast(app_entry.rsc_entry)], + vec![Vc::upcast(app_entry.rsc_entry)], Vc::upcast(this.app_project.client_module_context()), + VisitedDynamicImportModules::empty(), ) - .await?; + .await? + .client_dynamic_imports + .clone(); dynamic_import_modules.extend(client_dynamic_imports.into_iter().flatten()); let dynamic_import_entries = collect_chunk_group( Vc::upcast(client_chunking_context), diff --git a/crates/next-api/src/dynamic_imports.rs b/crates/next-api/src/dynamic_imports.rs index 72c1d3d8bdaae..9d16f94c24bef 100644 --- a/crates/next-api/src/dynamic_imports.rs +++ b/crates/next-api/src/dynamic_imports.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use anyhow::{bail, Result}; use futures::Future; @@ -8,9 +8,9 @@ use swc_core::ecma::{ ast::{CallExpr, Callee, Expr, Ident, Lit}, visit::{Visit, VisitWith}, }; -use tracing::Level; +use tracing::{Instrument, Level}; use turbo_tasks::{ - graph::{GraphTraversal, NonDeterministic, VisitControlFlow}, + graph::{GraphTraversal, NonDeterministic, VisitControlFlow, VisitedNodes}, trace::TraceRawVcs, RcStr, ReadRef, TryJoinIterExt, Value, ValueToString, Vc, }; @@ -103,6 +103,23 @@ pub(crate) async fn collect_evaluated_chunk_group( .await } +#[turbo_tasks::value(shared)] +pub struct NextDynamicImportsResult { + pub client_dynamic_imports: IndexMap>, DynamicImportedModules>, + pub visited_modules: Vc, +} + +#[turbo_tasks::value(shared)] +pub struct VisitedDynamicImportModules(HashSet); + +#[turbo_tasks::value_impl] +impl VisitedDynamicImportModules { + #[turbo_tasks::function] + pub fn empty() -> Vc { + VisitedDynamicImportModules(Default::default()).cell() + } +} + /// Returns a mapping of the dynamic imports for each module, if the import is /// wrapped in `next/dynamic`'s `dynamic()`. Refer [documentation](https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#with-named-exports) for the usecases. /// @@ -125,40 +142,44 @@ pub(crate) async fn collect_evaluated_chunk_group( /// - Loadable runtime [injects preload fn](https://github.com/vercel/next.js/blob/ad42b610c25b72561ad367b82b1c7383fd2a5dd2/packages/next/src/shared/lib/loadable.shared-runtime.tsx#L281) /// to wait until all the dynamic components are being loaded, this ensures hydration mismatch /// won't occur -#[tracing::instrument(level = Level::INFO, name = "collecting next/dynamic imports", skip_all)] +#[turbo_tasks::function] pub(crate) async fn collect_next_dynamic_imports( - server_entries: impl IntoIterator>>, + // `server_entries` cannot be a `Vc>` because that would compare by cell identity and + // not by value, breaking memoization. + server_entries: Vec>>, client_asset_context: Vc>, -) -> Result>, DynamicImportedModules>> { - // Traverse referenced modules graph, collect all of the dynamic imports: - // - Read the Program AST of the Module, this is the origin (A) - // - If there's `dynamic(import(B))`, then B is the module that is being imported - // Returned import mappings are in the form of - // (Module, Vec<(B, Module)>) (where B is the raw import source string, - // and Module is the actual resolved Module) - let imported_modules_mapping = NonDeterministic::new() - .skip_duplicates() - .visit( - server_entries - .into_iter() - .map(|module| async move { - Ok(NextDynamicVisitEntry::Module( - module.resolve().await?, - module.ident().to_string().await?, - )) - }) - .try_join() - .await? - .into_iter(), - NextDynamicVisit { - client_asset_context: client_asset_context.resolve().await?, - }, - ) - .await - .completed()? - .into_inner() - .into_iter() - .filter_map(|entry| { + visited_modules: Vc, +) -> Result> { + async move { + // Traverse referenced modules graph, collect all of the dynamic imports: + // - Read the Program AST of the Module, this is the origin (A) + // - If there's `dynamic(import(B))`, then B is the module that is being imported + // Returned import mappings are in the form of + // (Module, Vec<(B, Module)>) (where B is the raw import source string, + // and Module is the actual resolved Module) + let (result, visited_modules) = NonDeterministic::new() + .skip_duplicates_with_visited_nodes(VisitedNodes(visited_modules.await?.0.clone())) + .visit( + server_entries + .iter() + .map(|module| async move { + Ok(NextDynamicVisitEntry::Module( + module.resolve().await?, + module.ident().to_string().await?, + )) + }) + .try_join() + .await? + .into_iter(), + NextDynamicVisit { + client_asset_context: client_asset_context.resolve().await?, + }, + ) + .await + .completed()? + .into_inner_with_visited(); + + let imported_modules_mapping = result.into_iter().filter_map(|entry| { if let NextDynamicVisitEntry::DynamicImportsMap(dynamic_imports_map) = entry { Some(dynamic_imports_map) } else { @@ -166,19 +187,26 @@ pub(crate) async fn collect_next_dynamic_imports( } }); - // Consolifate import mappings into a single indexmap - let mut import_mappings: IndexMap>, DynamicImportedModules> = - IndexMap::new(); + // Consolidate import mappings into a single indexmap + let mut import_mappings: IndexMap>, DynamicImportedModules> = + IndexMap::new(); - for module_mapping in imported_modules_mapping { - let (origin_module, dynamic_imports) = &*module_mapping.await?; - import_mappings - .entry(*origin_module) - .or_insert_with(Vec::new) - .append(&mut dynamic_imports.clone()) - } + for module_mapping in imported_modules_mapping { + let (origin_module, dynamic_imports) = &*module_mapping.await?; + import_mappings + .entry(*origin_module) + .or_insert_with(Vec::new) + .append(&mut dynamic_imports.clone()) + } - Ok(import_mappings) + Ok(NextDynamicImportsResult { + client_dynamic_imports: import_mappings, + visited_modules: VisitedDynamicImportModules(visited_modules.0).cell(), + } + .cell()) + } + .instrument(tracing::info_span!("collecting next/dynamic imports")) + .await } #[derive(Debug, PartialEq, Eq, Hash, Clone, TraceRawVcs, Serialize, Deserialize)] diff --git a/crates/next-api/src/pages.rs b/crates/next-api/src/pages.rs index 812bd901c1cf2..4fdfe4a86c79b 100644 --- a/crates/next-api/src/pages.rs +++ b/crates/next-api/src/pages.rs @@ -61,7 +61,7 @@ use turbopack_nodejs::NodeJsChunkingContext; use crate::{ dynamic_imports::{ collect_chunk_group, collect_evaluated_chunk_group, collect_next_dynamic_imports, - DynamicImportedChunks, + DynamicImportedChunks, VisitedDynamicImportModules, }, font::create_font_manifest, loadable_manifest::create_react_loadable_manifest, @@ -810,8 +810,16 @@ impl PageEndpoint { runtime, } = *self.internal_ssr_chunk_module().await?; - let is_edge = matches!(runtime, NextRuntime::Edge); + let dynamic_import_modules = collect_next_dynamic_imports( + vec![Vc::upcast(ssr_module)], + this.pages_project.client_module_context(), + VisitedDynamicImportModules::empty(), + ) + .await? + .client_dynamic_imports + .clone(); + let is_edge = matches!(runtime, NextRuntime::Edge); if is_edge { let mut evaluatable_assets = edge_runtime_entries.await?.clone_value(); let evaluatable = Vc::try_resolve_sidecast(ssr_module) @@ -825,11 +833,6 @@ impl PageEndpoint { Value::new(AvailabilityInfo::Root), ); - let dynamic_import_modules = collect_next_dynamic_imports( - [Vc::upcast(ssr_module)], - this.pages_project.client_module_context(), - ) - .await?; let client_chunking_context = this.pages_project.project().client_chunking_context(); let dynamic_import_entries = collect_evaluated_chunk_group( @@ -863,18 +866,12 @@ impl PageEndpoint { ) .await?; - let availability_info = Value::new(AvailabilityInfo::Root); - let dynamic_import_modules = collect_next_dynamic_imports( - [Vc::upcast(ssr_module)], - this.pages_project.client_module_context(), - ) - .await?; let client_chunking_context = this.pages_project.project().client_chunking_context(); let dynamic_import_entries = collect_chunk_group( Vc::upcast(client_chunking_context), dynamic_import_modules, - availability_info, + Value::new(AvailabilityInfo::Root), ) .await?; diff --git a/crates/next-core/src/next_client_reference/visit_client_reference.rs b/crates/next-core/src/next_client_reference/visit_client_reference.rs index d74d07db67441..ef463f415f743 100644 --- a/crates/next-core/src/next_client_reference/visit_client_reference.rs +++ b/crates/next-core/src/next_client_reference/visit_client_reference.rs @@ -1,7 +1,7 @@ use std::future::Future; use anyhow::Result; -use indexmap::IndexSet; +use indexmap::{IndexMap, IndexSet}; use serde::{Deserialize, Serialize}; use tracing::Instrument; use turbo_tasks::{ @@ -50,6 +50,10 @@ pub enum ClientReferenceType { #[derive(Debug)] pub struct ClientReferenceGraphResult { pub client_references: Vec, + /// Only the [`ClientReferenceType::EcmascriptClientReference`]s are listed in this map. + #[allow(clippy::type_complexity)] + pub client_references_by_server_component: + IndexMap>, Vec>>>, pub server_component_entries: Vec>, pub server_utils: Vec>>, } @@ -81,6 +85,11 @@ pub async fn client_reference_graph( let mut server_component_entries = vec![]; let mut server_utils = vec![]; + let mut client_references_by_server_component = IndexMap::new(); + // Make sure None (for the various internal next/dist/esm/client/components/*) is listed + // first + client_references_by_server_component.insert(None, Vec::new()); + let graph = AdjacencyMap::new() .skip_duplicates() .visit( @@ -115,6 +124,15 @@ pub async fn client_reference_graph( } VisitClientReferenceNodeType::ClientReference(client_reference, _) => { client_references.push(*client_reference); + + if let ClientReferenceType::EcmascriptClientReference(entry) = + client_reference.ty() + { + client_references_by_server_component + .entry(client_reference.server_component) + .or_insert_with(Vec::new) + .push(Vc::upcast::>(entry.await?.ssr_module)); + } } VisitClientReferenceNodeType::ServerUtilEntry(server_util, _) => { server_utils.push(*server_util); @@ -127,6 +145,7 @@ pub async fn client_reference_graph( Ok(ClientReferenceGraphResult { client_references, + client_references_by_server_component, server_component_entries, server_utils, } diff --git a/turbopack/crates/turbo-tasks/src/graph/graph_store.rs b/turbopack/crates/turbo-tasks/src/graph/graph_store.rs index 30c43b85faeee..08f61a1c19e77 100644 --- a/turbopack/crates/turbo-tasks/src/graph/graph_store.rs +++ b/turbopack/crates/turbo-tasks/src/graph/graph_store.rs @@ -1,4 +1,6 @@ -use std::collections::HashSet; +use std::{collections::HashSet, hash::Hash}; + +use super::VisitedNodes; /// A graph store is a data structure that will be built up during a graph /// traversal. It is used to store the results of the traversal. @@ -62,6 +64,10 @@ where visited: Default::default(), } } + + pub fn new_with_visited_nodes(store: StoreImpl, visited: HashSet) -> Self { + Self { store, visited } + } } impl GraphStore for SkipDuplicates @@ -98,4 +104,9 @@ where pub fn into_inner(self) -> StoreImpl { self.store } + + /// Consumes the wrapper and returns the underlying store along with the visited nodes. + pub fn into_inner_with_visited(self) -> (StoreImpl, VisitedNodes) { + (self.store, VisitedNodes(self.visited)) + } } diff --git a/turbopack/crates/turbo-tasks/src/graph/graph_traversal.rs b/turbopack/crates/turbo-tasks/src/graph/graph_traversal.rs index d5c1832211aef..593368a088ad4 100644 --- a/turbopack/crates/turbo-tasks/src/graph/graph_traversal.rs +++ b/turbopack/crates/turbo-tasks/src/graph/graph_traversal.rs @@ -1,4 +1,4 @@ -use std::{future::Future, pin::Pin}; +use std::{collections::HashSet, future::Future, pin::Pin}; use anyhow::Result; use futures::{stream::FuturesUnordered, Stream}; @@ -9,6 +9,10 @@ use super::{ SkipDuplicates, Visit, VisitControlFlow, }; +/// A list of modules that were already visited and should be skipped (including their subgraphs). +#[derive(Clone, Default, Debug)] +pub struct VisitedNodes(pub HashSet); + /// [`GraphTraversal`] is a utility type that can be used to traverse a graph of /// nodes, where each node can have a variable number of outgoing edges. The /// traversal is done in parallel, and the order of the nodes in the traversal @@ -24,6 +28,10 @@ pub trait GraphTraversal: GraphStore + Sized { RootEdgesIt: IntoIterator; fn skip_duplicates(self) -> SkipDuplicates; + fn skip_duplicates_with_visited_nodes( + self, + visited: VisitedNodes, + ) -> SkipDuplicates; } impl GraphTraversal for Store @@ -73,6 +81,13 @@ where fn skip_duplicates(self) -> SkipDuplicates { SkipDuplicates::new(self) } + + fn skip_duplicates_with_visited_nodes( + self, + visited: VisitedNodes, + ) -> SkipDuplicates { + SkipDuplicates::new_with_visited_nodes(self, visited.0) + } } /// A future that resolves to a [`GraphStore`] containing the result of a graph diff --git a/turbopack/crates/turbo-tasks/src/graph/mod.rs b/turbopack/crates/turbo-tasks/src/graph/mod.rs index e2c0754485387..3829a39241be5 100644 --- a/turbopack/crates/turbo-tasks/src/graph/mod.rs +++ b/turbopack/crates/turbo-tasks/src/graph/mod.rs @@ -9,6 +9,6 @@ mod with_future; pub use adjacency_map::AdjacencyMap; pub use control_flow::VisitControlFlow; pub use graph_store::{GraphStore, SkipDuplicates}; -pub use graph_traversal::{GraphTraversal, GraphTraversalResult}; +pub use graph_traversal::{GraphTraversal, GraphTraversalResult, VisitedNodes}; pub use non_deterministic::NonDeterministic; pub use visit::Visit; From 474974541a4d69201398d4df9bdc3430af25e0d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Markb=C3=A5ge?= Date: Fri, 4 Oct 2024 10:53:45 -0400 Subject: [PATCH 15/19] Error if reading Request Store inside Prerender (#70775) Stacked on #70768. We should never access Request Store inside Prerender since those stores should be mutually exclusive. This forces us to explicitly handle Draft Mode in Prerender/Cache which previously was just implicitly isEnabled false. This no longer errors getting draftMode() in "use cache" since it's a way to just override all caches. One remaining thing to fix is after() should be allowed in prerender and cache. --- .../request-async-storage.external.ts | 8 ++ packages/next/src/server/after/after.ts | 10 ++- packages/next/src/server/request/cookies.ts | 61 +++++++++------- .../next/src/server/request/draft-mode.ts | 73 +++++++++++++------ packages/next/src/server/request/headers.ts | 56 +++++++------- .../use-cache/app/errors/error-boundary.tsx | 13 +++- test/e2e/app-dir/use-cache/app/errors/util.ts | 2 +- test/e2e/app-dir/use-cache/use-cache.test.ts | 15 ++-- 8 files changed, 146 insertions(+), 92 deletions(-) diff --git a/packages/next/src/client/components/request-async-storage.external.ts b/packages/next/src/client/components/request-async-storage.external.ts index 81b61ed621429..d7a8852b1c315 100644 --- a/packages/next/src/client/components/request-async-storage.external.ts +++ b/packages/next/src/client/components/request-async-storage.external.ts @@ -10,6 +10,7 @@ import type { AfterContext } from '../../server/after/after-context' import type { ServerComponentsHmrCache } from '../../server/response-cache' import { cacheAsyncStorage } from '../../server/app-render/cache-async-storage.external' +import { prerenderAsyncStorage } from '../../server/app-render/prerender-async-storage.external' export interface RequestStore { /** @@ -43,6 +44,13 @@ export type RequestAsyncStorage = AsyncLocalStorage export { requestAsyncStorage } export function getExpectedRequestStore(callingExpression: string) { + const prerenderStore = prerenderAsyncStorage.getStore() + if (prerenderStore) { + // This should not happen because we should have checked it already. + throw new Error( + `\`${callingExpression}\` cannot be called inside a prerender. This is a bug in Next.js.` + ) + } const store = requestAsyncStorage.getStore() if (store) return store const cacheStore = cacheAsyncStorage.getStore() diff --git a/packages/next/src/server/after/after.ts b/packages/next/src/server/after/after.ts index 7d24c94c80a12..4e648d021f2c4 100644 --- a/packages/next/src/server/after/after.ts +++ b/packages/next/src/server/after/after.ts @@ -1,4 +1,4 @@ -import { getExpectedRequestStore } from '../../client/components/request-async-storage.external' +import { requestAsyncStorage } from '../../client/components/request-async-storage.external' import { workAsyncStorage } from '../../client/components/work-async-storage.external' import { cacheAsyncStorage } from '../../server/app-render/cache-async-storage.external' import { StaticGenBailoutError } from '../../client/components/static-generation-bailout' @@ -14,7 +14,13 @@ export type AfterCallback = () => T | Promise export function unstable_after(task: AfterTask) { const callingExpression = 'unstable_after' - const requestStore = getExpectedRequestStore(callingExpression) + // TODO: This is not safe. afterContext should move to WorkStore. + const requestStore = requestAsyncStorage.getStore() + if (!requestStore) { + throw new Error( + `\`${callingExpression}\` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context` + ) + } const { afterContext } = requestStore if (!afterContext) { diff --git a/packages/next/src/server/request/cookies.ts b/packages/next/src/server/request/cookies.ts index 33ffccff98171..c6c0daef43d9b 100644 --- a/packages/next/src/server/request/cookies.ts +++ b/packages/next/src/server/request/cookies.ts @@ -52,7 +52,6 @@ export type UnsafeUnwrappedCookies = ReadonlyRequestCookies export function cookies(): Promise { const callingExpression = 'cookies' - const requestStore = getExpectedRequestStore(callingExpression) const workStore = workAsyncStorage.getStore() const prerenderStore = prerenderAsyncStorage.getStore() const cacheStore = cacheAsyncStorage.getStore() @@ -82,35 +81,41 @@ export function cookies(): Promise { ) } - if (prerenderStore && prerenderStore.type === 'prerender') { - // We are in PPR and/or dynamicIO mode and prerendering - - if (isDynamicIOPrerender(prerenderStore)) { - // We use the controller and cacheSignal as an indication we are in dynamicIO mode. - // When resolving cookies for a prerender with dynamic IO we return a forever promise - // along with property access tracked synchronous cookies. - - // We don't track dynamic access here because access will be tracked when you access - // one of the properties of the cookies object. - return makeDynamicallyTrackedExoticCookies( - workStore.route, - prerenderStore - ) - } else { - // We are prerendering with PPR. We need track dynamic access here eagerly - // to keep continuity with how cookies has worked in PPR without dynamicIO. - // TODO consider switching the semantic to throw on property access instead - postponeWithTracking( - workStore.route, + if (prerenderStore) { + if (prerenderStore.type === 'prerender') { + // We are in PPR and/or dynamicIO mode and prerendering + + if (isDynamicIOPrerender(prerenderStore)) { + // We use the controller and cacheSignal as an indication we are in dynamicIO mode. + // When resolving cookies for a prerender with dynamic IO we return a forever promise + // along with property access tracked synchronous cookies. + + // We don't track dynamic access here because access will be tracked when you access + // one of the properties of the cookies object. + return makeDynamicallyTrackedExoticCookies( + workStore.route, + prerenderStore + ) + } else { + // We are prerendering with PPR. We need track dynamic access here eagerly + // to keep continuity with how cookies has worked in PPR without dynamicIO. + // TODO consider switching the semantic to throw on property access instead + postponeWithTracking( + workStore.route, + callingExpression, + prerenderStore.dynamicTracking + ) + } + } else if (prerenderStore.type === 'prerender-legacy') { + // We are in a legacy static generation mode while prerendering + // We track dynamic access here so we don't need to wrap the cookies in + // individual property access tracking. + throwToInterruptStaticGeneration( callingExpression, - prerenderStore.dynamicTracking + workStore, + cacheStore ) } - } else if (workStore.isStaticGeneration) { - // We are in a legacy static generation mode while prerendering - // We track dynamic access here so we don't need to wrap the cookies in - // individual property access tracking. - throwToInterruptStaticGeneration(callingExpression, workStore, cacheStore) } // We fall through to the dynamic context below but we still track dynamic access // because in dev we can still error for things like using cookies inside a cache context @@ -120,6 +125,8 @@ export function cookies(): Promise { // cookies is being called in a dynamic context const actionStore = actionAsyncStorage.getStore() + const requestStore = getExpectedRequestStore(callingExpression) + let underlyingCookies: ReadonlyRequestCookies // The current implementation of cookies will return Response cookies diff --git a/packages/next/src/server/request/draft-mode.ts b/packages/next/src/server/request/draft-mode.ts index b60e36910cbc9..50864ac1dc0c1 100644 --- a/packages/next/src/server/request/draft-mode.ts +++ b/packages/next/src/server/request/draft-mode.ts @@ -4,6 +4,7 @@ import type { DraftModeProvider } from '../../server/async-storage/draft-mode-pr import { workAsyncStorage } from '../../client/components/work-async-storage.external' import { cacheAsyncStorage } from '../../server/app-render/cache-async-storage.external' +import { prerenderAsyncStorage } from '../../server/app-render/prerender-async-storage.external' import { trackDynamicDataAccessed } from '../app-render/dynamic-rendering' import { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-loger' @@ -35,31 +36,58 @@ export type UnsafeUnwrappedDraftMode = DraftMode export function draftMode(): Promise { const callingExpression = 'draftMode' - const requestStore = getExpectedRequestStore(callingExpression) const workStore = workAsyncStorage.getStore() + const prerenderStore = prerenderAsyncStorage.getStore() + const cacheStore = cacheAsyncStorage.getStore() + + if ( + (cacheStore && + (cacheStore.type === 'cache' || cacheStore.type === 'unstable-cache')) || + (prerenderStore && + (prerenderStore.type === 'prerender' || + prerenderStore.type === 'prerender-legacy')) + ) { + // Return empty draft mode + if ( + process.env.NODE_ENV === 'development' && + !workStore?.isPrefetchRequest + ) { + const route = workStore?.route + return createExoticDraftModeWithDevWarnings(null, route) + } else { + return createExoticDraftMode(null) + } + } + + const requestStore = getExpectedRequestStore(callingExpression) + const cachedDraftMode = CachedDraftModes.get(requestStore.draftMode) + if (cachedDraftMode) { + return cachedDraftMode + } + + let promise if (process.env.NODE_ENV === 'development' && !workStore?.isPrefetchRequest) { const route = workStore?.route - return createExoticDraftModeWithDevWarnings(requestStore.draftMode, route) + promise = createExoticDraftModeWithDevWarnings( + requestStore.draftMode, + route + ) } else { - return createExoticDraftMode(requestStore.draftMode) + promise = createExoticDraftMode(requestStore.draftMode) } + CachedDraftModes.set(requestStore.draftMode, promise) + return promise } interface CacheLifetime {} const CachedDraftModes = new WeakMap>() function createExoticDraftMode( - underlyingProvider: DraftModeProvider + underlyingProvider: null | DraftModeProvider ): Promise { - const cachedDraftMode = CachedDraftModes.get(underlyingProvider) - if (cachedDraftMode) { - return cachedDraftMode - } - const instance = new DraftMode(underlyingProvider) const promise = Promise.resolve(instance) - CachedDraftModes.set(underlyingProvider, promise) Object.defineProperty(promise, 'isEnabled', { get() { @@ -82,17 +110,11 @@ function createExoticDraftMode( } function createExoticDraftModeWithDevWarnings( - underlyingProvider: DraftModeProvider, + underlyingProvider: null | DraftModeProvider, route: undefined | string ): Promise { - const cachedDraftMode = CachedDraftModes.get(underlyingProvider) - if (cachedDraftMode) { - return cachedDraftMode - } - const instance = new DraftMode(underlyingProvider) const promise = Promise.resolve(instance) - CachedDraftModes.set(underlyingProvider, promise) Object.defineProperty(promise, 'isEnabled', { get() { @@ -134,13 +156,16 @@ class DraftMode { /** * @internal - this declaration is stripped via `tsc --stripInternal` */ - private readonly _provider: DraftModeProvider + private readonly _provider: null | DraftModeProvider - constructor(provider: DraftModeProvider) { + constructor(provider: null | DraftModeProvider) { this._provider = provider } get isEnabled() { - return this._provider.isEnabled + if (this._provider !== null) { + return this._provider.isEnabled + } + return false } public enable() { const store = workAsyncStorage.getStore() @@ -150,7 +175,9 @@ class DraftMode { // don't statically generate routes that manipulate draft mode. trackDynamicDataAccessed(store, cacheStore, 'draftMode().enable()') } - return this._provider.enable() + if (this._provider !== null) { + this._provider.enable() + } } public disable() { const store = workAsyncStorage.getStore() @@ -160,7 +187,9 @@ class DraftMode { // don't statically generate routes that manipulate draft mode. trackDynamicDataAccessed(store, cacheStore, 'draftMode().disable()') } - return this._provider.disable() + if (this._provider !== null) { + this._provider.disable() + } } } diff --git a/packages/next/src/server/request/headers.ts b/packages/next/src/server/request/headers.ts index 8a94313be211e..c27dc53d5aecb 100644 --- a/packages/next/src/server/request/headers.ts +++ b/packages/next/src/server/request/headers.ts @@ -57,7 +57,6 @@ export type UnsafeUnwrappedHeaders = ReadonlyHeaders * Read more: [Next.js Docs: `headers`](https://nextjs.org/docs/app/api-reference/functions/headers) */ export function headers(): Promise { - const requestStore = getExpectedRequestStore('headers') const workStore = workAsyncStorage.getStore() const prerenderStore = prerenderAsyncStorage.getStore() const cacheStore = cacheAsyncStorage.getStore() @@ -87,41 +86,44 @@ export function headers(): Promise { ) } - if (prerenderStore && prerenderStore.type === 'prerender') { - // We are in PPR and/or dynamicIO mode and prerendering + if (prerenderStore) { + if (prerenderStore.type === 'prerender') { + // We are in PPR and/or dynamicIO mode and prerendering - if (isDynamicIOPrerender(prerenderStore)) { - // We use the controller and cacheSignal as an indication we are in dynamicIO mode. - // When resolving headers for a prerender with dynamic IO we return a forever promise - // along with property access tracked synchronous headers. + if (isDynamicIOPrerender(prerenderStore)) { + // We use the controller and cacheSignal as an indication we are in dynamicIO mode. + // When resolving headers for a prerender with dynamic IO we return a forever promise + // along with property access tracked synchronous headers. - // We don't track dynamic access here because access will be tracked when you access - // one of the properties of the headers object. - return makeDynamicallyTrackedExoticHeaders( - workStore.route, - prerenderStore - ) - } else { - // We are prerendering with PPR. We need track dynamic access here eagerly - // to keep continuity with how headers has worked in PPR without dynamicIO. - // TODO consider switching the semantic to throw on property access instead - postponeWithTracking( - workStore.route, - 'headers', - prerenderStore.dynamicTracking - ) + // We don't track dynamic access here because access will be tracked when you access + // one of the properties of the headers object. + return makeDynamicallyTrackedExoticHeaders( + workStore.route, + prerenderStore + ) + } else { + // We are prerendering with PPR. We need track dynamic access here eagerly + // to keep continuity with how headers has worked in PPR without dynamicIO. + // TODO consider switching the semantic to throw on property access instead + postponeWithTracking( + workStore.route, + 'headers', + prerenderStore.dynamicTracking + ) + } + } else if (prerenderStore.type === 'prerender-legacy') { + // We are in a legacy static generation mode while prerendering + // We track dynamic access here so we don't need to wrap the headers in + // individual property access tracking. + throwToInterruptStaticGeneration('headers', workStore, cacheStore) } - } else if (workStore.isStaticGeneration) { - // We are in a legacy static generation mode while prerendering - // We track dynamic access here so we don't need to wrap the headers in - // individual property access tracking. - throwToInterruptStaticGeneration('headers', workStore, cacheStore) } // We fall through to the dynamic context below but we still track dynamic access // because in dev we can still error for things like using headers inside a cache context trackDynamicDataInDynamicRender(workStore, cacheStore) } + const requestStore = getExpectedRequestStore('headers') if (process.env.NODE_ENV === 'development' && !workStore?.isPrefetchRequest) { return makeUntrackedExoticHeadersWithDevWarnings( requestStore.headers, diff --git a/test/e2e/app-dir/use-cache/app/errors/error-boundary.tsx b/test/e2e/app-dir/use-cache/app/errors/error-boundary.tsx index 93472e5662b11..2b05725c7baba 100644 --- a/test/e2e/app-dir/use-cache/app/errors/error-boundary.tsx +++ b/test/e2e/app-dir/use-cache/app/errors/error-boundary.tsx @@ -1,6 +1,6 @@ 'use client' -import { Component } from 'react' +import { Component, Suspense } from 'react' export default class ErrorBoundary extends Component< { id: string; children: React.ReactNode }, @@ -11,9 +11,16 @@ export default class ErrorBoundary extends Component< return { message: error.message } } render() { + let content if (this.state.message !== null) { - return

{this.state.message}

+ content = this.state.message + } else { + content = this.props.children } - return this.props.children + return ( +

+ {content} +

+ ) } } diff --git a/test/e2e/app-dir/use-cache/app/errors/util.ts b/test/e2e/app-dir/use-cache/app/errors/util.ts index 923e84f6a4838..42257e2e1c1f2 100644 --- a/test/e2e/app-dir/use-cache/app/errors/util.ts +++ b/test/e2e/app-dir/use-cache/app/errors/util.ts @@ -9,5 +9,5 @@ export async function currentReferer() { } export async function isEditing() { - return (await draftMode()).isEnabled + return String((await draftMode()).isEnabled) } diff --git a/test/e2e/app-dir/use-cache/use-cache.test.ts b/test/e2e/app-dir/use-cache/use-cache.test.ts index a11b76d26726b..5d018664d0359 100644 --- a/test/e2e/app-dir/use-cache/use-cache.test.ts +++ b/test/e2e/app-dir/use-cache/use-cache.test.ts @@ -52,30 +52,25 @@ describe('use-cache', () => { const browser = await next.browser('/errors') expect(await browser.waitForElementByCss('#cookies').text()).toContain( isNextDev - ? '`cookies` cannot be called inside "use cache".' + ? 'Route /errors used "cookies" inside "use cache".' : GENERIC_RSC_ERROR ) expect(await browser.waitForElementByCss('#headers').text()).toContain( isNextDev - ? '`headers` cannot be called inside "use cache".' + ? 'Route /errors used "headers" inside "use cache".' : GENERIC_RSC_ERROR ) expect(await browser.waitForElementByCss('#draft-mode').text()).toContain( - isNextDev - ? '`draftMode` cannot be called inside "use cache".' - : GENERIC_RSC_ERROR + 'Editing: false' ) // CLI assertions are skipped in deploy mode because `next.cliOutput` will only contain build-time logs. if (!isNextDeploy) { expect(next.cliOutput).toContain( - '`cookies` cannot be called inside "use cache".' - ) - expect(next.cliOutput).toContain( - '`headers` cannot be called inside "use cache".' + 'Route /errors used "cookies" inside "use cache". ' ) expect(next.cliOutput).toContain( - '`draftMode` cannot be called inside "use cache".' + 'Route /errors used "headers" inside "use cache". ' ) } }) From 3dbbcadc74db882115fe8c899c43b276ceabe07b Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Fri, 4 Oct 2024 17:15:13 +0200 Subject: [PATCH 16/19] codemod: handle the async api type (#70785) --- .../async-api-23.input.tsx | 6 ++++ .../async-api-23.output.tsx | 7 ++++ .../next-async-dynamic-api.ts | 36 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.input.tsx create mode 100644 packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.output.tsx diff --git a/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.input.tsx b/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.input.tsx new file mode 100644 index 0000000000000..82796fa7ecf09 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.input.tsx @@ -0,0 +1,6 @@ +import { cookies } from 'next/headers' + +export type Cookie = ReturnType +export function foo(c: ReturnType) { + return c +} diff --git a/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.output.tsx b/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.output.tsx new file mode 100644 index 0000000000000..b77bd963c1c11 --- /dev/null +++ b/packages/next-codemod/transforms/__testfixtures__/next-async-request-api-dynamic-apis/async-api-23.output.tsx @@ -0,0 +1,7 @@ +import { cookies } from 'next/headers' + +export type Cookie = Awaited> +export function foo(c: Awaited>) { + return c +} + diff --git a/packages/next-codemod/transforms/lib/async-request-api/next-async-dynamic-api.ts b/packages/next-codemod/transforms/lib/async-request-api/next-async-dynamic-api.ts index 64c910fc5402b..9c1ad6feab2cd 100644 --- a/packages/next-codemod/transforms/lib/async-request-api/next-async-dynamic-api.ts +++ b/packages/next-codemod/transforms/lib/async-request-api/next-async-dynamic-api.ts @@ -205,6 +205,42 @@ export function transformDynamicAPI( } } }) + + // Handle type usage of async API, e.g. `type Cookie = ReturnType` + // convert it to `type Cookie = Awaited>` + root + .find(j.TSTypeReference, { + typeName: { + type: 'Identifier', + name: 'ReturnType', + }, + }) + .forEach((path) => { + const typeParam = path.node.typeParameters?.params[0] + + // Check if the ReturnType is for 'cookies' + if ( + typeParam && + j.TSTypeQuery.check(typeParam) && + j.Identifier.check(typeParam.exprName) && + typeParam.exprName.name === asyncRequestApiName + ) { + // Replace ReturnType with Awaited> + const awaitedTypeReference = j.tsTypeReference( + j.identifier('Awaited'), + j.tsTypeParameterInstantiation([ + j.tsTypeReference( + j.identifier('ReturnType'), + j.tsTypeParameterInstantiation([typeParam]) + ), + ]) + ) + + j(path).replaceWith(awaitedTypeReference) + + modified = true + } + }) } const isClientComponent = determineClientDirective(root, j) From 8894bed0c39cfef51865356af0b83025fedf901e Mon Sep 17 00:00:00 2001 From: vercel-release-bot Date: Fri, 4 Oct 2024 15:18:40 +0000 Subject: [PATCH 17/19] v15.0.0-canary.178 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 ++-- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 ++++++------ packages/react-refresh-utils/package.json | 2 +- packages/third-parties/package.json | 4 ++-- pnpm-lock.yaml | 24 ++++++++++---------- 17 files changed, 36 insertions(+), 36 deletions(-) diff --git a/lerna.json b/lerna.json index 63e98d6a1b728..e6496bf8d6d28 100644 --- a/lerna.json +++ b/lerna.json @@ -16,5 +16,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "15.0.0-canary.177" + "version": "15.0.0-canary.178" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index bc2ca3cad0c1a..e4bf4964eb866 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index 03a486094a9dc..0d9323e08bfcf 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "ESLint configuration used by Next.js.", "main": "index.js", "license": "MIT", @@ -10,7 +10,7 @@ }, "homepage": "https://nextjs.org/docs/app/building-your-application/configuring/eslint#eslint-config", "dependencies": { - "@next/eslint-plugin-next": "15.0.0-canary.177", + "@next/eslint-plugin-next": "15.0.0-canary.178", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index 07113c24513d7..7c0d01e8f5713 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "license": "MIT", diff --git a/packages/font/package.json b/packages/font/package.json index 68896a7359655..afa6098711d0c 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index e7cabfd8e9178..491ce81f50a79 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 51b0bf84d356f..aaa07f8c13cff 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 04cd5692c0409..c8e90b6237d95 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 57f863ce69b47..7975b4c0554bf 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index 33b8323206b3d..c7734267a3501 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index 2d7b80389af03..35ab237abea9b 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "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", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index af227f1ae802b..2cc73f7efe83d 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index 58d1e7eb0dcda..d552ba71435ec 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "private": true, "scripts": { "clean": "node ../../scripts/rm.mjs native", diff --git a/packages/next/package.json b/packages/next/package.json index d0552565830e6..eab33dd9618d7 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -95,7 +95,7 @@ ] }, "dependencies": { - "@next/env": "15.0.0-canary.177", + "@next/env": "15.0.0-canary.178", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.13", "busboy": "1.6.0", @@ -159,11 +159,11 @@ "@jest/types": "29.5.0", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "15.0.0-canary.177", - "@next/polyfill-module": "15.0.0-canary.177", - "@next/polyfill-nomodule": "15.0.0-canary.177", - "@next/react-refresh-utils": "15.0.0-canary.177", - "@next/swc": "15.0.0-canary.177", + "@next/font": "15.0.0-canary.178", + "@next/polyfill-module": "15.0.0-canary.178", + "@next/polyfill-nomodule": "15.0.0-canary.178", + "@next/react-refresh-utils": "15.0.0-canary.178", + "@next/swc": "15.0.0-canary.178", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.41.2", "@swc/core": "1.7.0-nightly-20240714.1", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index ef5baa6904567..b39a7fbf37f75 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index 257b5e8815b9c..39e7714b348c6 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "15.0.0-canary.177", + "version": "15.0.0-canary.178", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "15.0.0-canary.177", + "next": "15.0.0-canary.178", "outdent": "0.8.0", "prettier": "2.5.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c2b902067842..fe51b9e4b0b28 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -792,7 +792,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../eslint-plugin-next '@rushstack/eslint-patch': specifier: ^1.3.3 @@ -853,7 +853,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next-env '@swc/counter': specifier: 0.1.3 @@ -863,7 +863,7 @@ importers: version: 0.5.13 babel-plugin-react-compiler: specifier: '*' - version: 0.0.0-experimental-b4db8c3-20241001 + version: 0.0.0-experimental-27e0f40-20241002 busboy: specifier: 1.6.0 version: 1.6.0 @@ -981,19 +981,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../font '@next/polyfill-module': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../react-refresh-utils '@next/swc': - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1612,7 +1612,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 15.0.0-canary.177 + specifier: 15.0.0-canary.178 version: link:../next outdent: specifier: 0.8.0 @@ -5953,8 +5953,8 @@ packages: peerDependencies: '@babel/core': 7.22.5 - babel-plugin-react-compiler@0.0.0-experimental-b4db8c3-20241001: - resolution: {integrity: sha512-2qiuysJU65kKm4CznEMxpjvGV4FOlreXlpJwfJrOIqVxyQYL156614vzXFzuPObCsiwJrA5agXoAI9EP8zuvBw==} + babel-plugin-react-compiler@0.0.0-experimental-27e0f40-20241002: + resolution: {integrity: sha512-hMOwSqoI0gxyjgGVhsMqPsVV4bjCqJ2WTUFsQyrk+KAkDqK/o7Th9XRl/xhVApPbE4VzQeiutC60rbBGqNebHQ==} babel-plugin-react-compiler@0.0.0-experimental-c23de8d-20240515: resolution: {integrity: sha512-0XN2gmpT55QtAz5n7d5g91y1AuO9tRhWBaLgCRyc4ExHrlr7+LfxW+YTb3mOwxngkkiggwM8HyYsaEK9MqhnlQ==} @@ -20682,7 +20682,7 @@ snapshots: - supports-color optional: true - babel-plugin-react-compiler@0.0.0-experimental-b4db8c3-20241001: + babel-plugin-react-compiler@0.0.0-experimental-27e0f40-20241002: dependencies: '@babel/generator': 7.2.0 '@babel/types': 7.22.5 From a572740f46d1735992dee0a0de8247c8dd3c10f5 Mon Sep 17 00:00:00 2001 From: Hendrik Liebau Date: Fri, 4 Oct 2024 17:31:04 +0200 Subject: [PATCH 18/19] Create spans for `createServerReference` and `registerServerReference` (#70564) Creating proper source location spans for `createServerReference` and `registerServerReference` is the next step in enabling source mapping of server actions. With the added e2e test app, we can already verify that this works by mocking `findSourceMapURL`. Properly implementing `findSourceMapURL` will be the last missing piece to complete the puzzle. server action go to definition server action source source map viz server source map viz client --- .../src/transforms/server_actions.rs | 137 ++++++++++-------- .../action-client-wrapper.ts | 3 +- .../src/client/app-find-source-map-url.ts | 4 + packages/next/src/client/app-index.tsx | 4 + .../router-reducer/fetch-server-response.ts | 7 +- .../reducers/server-action-reducer.ts | 8 +- packages/next/types/$$compiled.internal.d.ts | 10 +- test/e2e/app-dir/actions-simple/README.md | 22 +++ .../actions-simple/actions-simple.test.ts | 28 ++++ .../e2e/app-dir/actions-simple/app/actions.ts | 5 + .../actions-simple/app/client/page.tsx | 15 ++ test/e2e/app-dir/actions-simple/app/form.tsx | 14 ++ .../e2e/app-dir/actions-simple/app/layout.tsx | 8 + test/e2e/app-dir/actions-simple/app/page.tsx | 13 ++ .../app/source-maps-turbopack/route.ts | 18 +++ .../find-source-map-url-turbopack-mock.ts | 10 ++ .../find-source-map-url-webpack-mock.ts | 4 + .../e2e/app-dir/actions-simple/next.config.js | 22 +++ 18 files changed, 262 insertions(+), 70 deletions(-) create mode 100644 packages/next/src/client/app-find-source-map-url.ts create mode 100644 test/e2e/app-dir/actions-simple/README.md create mode 100644 test/e2e/app-dir/actions-simple/actions-simple.test.ts create mode 100644 test/e2e/app-dir/actions-simple/app/actions.ts create mode 100644 test/e2e/app-dir/actions-simple/app/client/page.tsx create mode 100644 test/e2e/app-dir/actions-simple/app/form.tsx create mode 100644 test/e2e/app-dir/actions-simple/app/layout.tsx create mode 100644 test/e2e/app-dir/actions-simple/app/page.tsx create mode 100644 test/e2e/app-dir/actions-simple/app/source-maps-turbopack/route.ts create mode 100644 test/e2e/app-dir/actions-simple/find-source-map-url-turbopack-mock.ts create mode 100644 test/e2e/app-dir/actions-simple/find-source-map-url-webpack-mock.ts create mode 100644 test/e2e/app-dir/actions-simple/next.config.js diff --git a/crates/next-custom-transforms/src/transforms/server_actions.rs b/crates/next-custom-transforms/src/transforms/server_actions.rs index bf6d385fe068d..57557f430f875 100644 --- a/crates/next-custom-transforms/src/transforms/server_actions.rs +++ b/crates/next-custom-transforms/src/transforms/server_actions.rs @@ -105,7 +105,7 @@ struct ServerActions { should_track_names: bool, names: Vec, - declared_idents: Vec, + declared_idents: Vec, // This flag allows us to rewrite `function foo() {}` to `const foo = createProxy(...)`. rewrite_fn_decl_to_proxy_decl: Option, @@ -113,7 +113,7 @@ struct ServerActions { rewrite_expr_to_proxy_expr: Option>, // (ident, export name) - exported_idents: Vec<(Id, String)>, + exported_idents: Vec<(Ident, String)>, annotations: Vec, extra_items: Vec, @@ -193,7 +193,7 @@ impl ServerActions { self.has_action = true; self.export_actions.push(action_name.to_string()); - let action_ident = Ident::new(action_name.clone(), DUMMY_SP, self.private_ctxt); + let action_ident = Ident::new(action_name.clone(), arrow.span, self.private_ctxt); let register_action_expr = annotate_ident_as_server_reference( action_ident.clone(), @@ -347,7 +347,7 @@ impl ServerActions { self.has_action = true; self.export_actions.push(action_name.to_string()); - let action_ident = Ident::new(action_name.clone(), DUMMY_SP, self.private_ctxt); + let action_ident = Ident::new(action_name.clone(), function.span, self.private_ctxt); let register_action_expr = annotate_ident_as_server_reference( action_ident.clone(), @@ -1210,14 +1210,16 @@ impl VisitMut for ServerActions { Decl::Fn(f) => { // export function foo() {} self.exported_idents - .push((f.ident.to_id(), f.ident.sym.to_string())); + .push((f.ident.clone(), f.ident.sym.to_string())); } Decl::Var(var) => { // export const foo = 1 - let mut ids: Vec = Vec::new(); - collect_idents_in_var_decls(&var.decls, &mut ids); + let mut idents: Vec = Vec::new(); + collect_idents_in_var_decls(&var.decls, &mut idents); self.exported_idents.extend( - ids.into_iter().map(|id| (id.clone(), id.0.to_string())), + idents + .into_iter() + .map(|ident| (ident.clone(), ident.to_id().0.to_string())), ); for decl in &mut var.decls { @@ -1251,16 +1253,16 @@ impl VisitMut for ServerActions { { // export { foo as bar } self.exported_idents - .push((ident.to_id(), sym.to_string())); + .push((ident.clone(), sym.to_string())); } else if let ModuleExportName::Str(str) = export_name { // export { foo as "bar" } self.exported_idents - .push((ident.to_id(), str.value.to_string())); + .push((ident.clone(), str.value.to_string())); } } else { // export { foo } self.exported_idents - .push((ident.to_id(), ident.sym.to_string())); + .push((ident.clone(), ident.sym.to_string())); } } else { disallowed_export_span = named.span; @@ -1276,17 +1278,21 @@ impl VisitMut for ServerActions { DefaultDecl::Fn(f) => { if let Some(ident) = &f.ident { // export default function foo() {} - self.exported_idents.push((ident.to_id(), "default".into())); + self.exported_idents.push((ident.clone(), "default".into())); } else { // export default function() {} + // Use the span from the function expression + let span = f.function.span; + let new_ident = Ident::new( gen_action_ident(&mut self.reference_index), - DUMMY_SP, + span, self.private_ctxt, ); + f.ident = Some(new_ident.clone()); - self.exported_idents - .push((new_ident.to_id(), "default".into())); + + self.exported_idents.push((new_ident, "default".into())); } } _ => { @@ -1301,14 +1307,17 @@ impl VisitMut for ServerActions { disallowed_export_span = default_expr.span; } else { // export default async () => {} + // Use the span of the arrow function + let span = arrow.span; + let new_ident = Ident::new( gen_action_ident(&mut self.reference_index), - DUMMY_SP, + span, self.private_ctxt, ); self.exported_idents - .push((new_ident.to_id(), "default".into())); + .push((new_ident.clone(), "default".into())); *default_expr.expr = attach_name_to_expr( new_ident, @@ -1319,18 +1328,21 @@ impl VisitMut for ServerActions { } Expr::Ident(ident) => { // export default foo - self.exported_idents.push((ident.to_id(), "default".into())); + self.exported_idents.push((ident.clone(), "default".into())); } Expr::Call(call) => { // export default fn() + // Determining a useful span here is tricky. + let span = call.span; + let new_ident = Ident::new( gen_action_ident(&mut self.reference_index), - DUMMY_SP, + span, self.private_ctxt, ); self.exported_idents - .push((new_ident.to_id(), "default".into())); + .push((new_ident.clone(), "default".into())); *default_expr.expr = attach_name_to_expr( new_ident, @@ -1433,21 +1445,19 @@ impl VisitMut for ServerActions { new.rotate_right(1); } - for (id, export_name) in self.exported_idents.iter() { - let ident = Ident::new(id.0.clone(), DUMMY_SP, id.1); - + for (ident, export_name) in self.exported_idents.iter() { if !self.config.is_react_server_layer { let action_id = generate_action_id(&self.config.hash_salt, &self.file_name, export_name); - let span = Span::dummy_with_cmt(); - self.comments.add_pure_comment(span.lo); + let call_expr_span = Span::dummy_with_cmt(); + self.comments.add_pure_comment(call_expr_span.lo); if export_name == "default" { let export_expr = ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultExpr( ExportDefaultExpr { - span: DUMMY_SP, + span: ident.span, expr: Box::new(Expr::Call(CallExpr { - span, + span: call_expr_span, callee: Callee::Expr(Box::new(Expr::Ident( create_ref_ident.clone(), ))), @@ -1473,11 +1483,11 @@ impl VisitMut for ServerActions { decls: vec![VarDeclarator { span: DUMMY_SP, name: Pat::Ident( - IdentName::new(export_name.clone().into(), DUMMY_SP) + IdentName::new(export_name.clone().into(), ident.span) .into(), ), init: Some(Box::new(Expr::Call(CallExpr { - span, + span: call_expr_span, callee: Callee::Expr(Box::new(Expr::Ident( create_ref_ident.clone(), ))), @@ -1549,14 +1559,10 @@ impl VisitMut for ServerActions { elems: self .exported_idents .iter() - .map(|e| { + .map(|(ident, _span)| { Some(ExprOrSpread { spread: None, - expr: Box::new(Expr::Ident(Ident::new( - e.0 .0.clone(), - DUMMY_SP, - e.0 .1, - ))), + expr: Box::new(Expr::Ident(ident.clone())), }) }) .collect(), @@ -1701,7 +1707,10 @@ impl VisitMut for ServerActions { noop_visit_mut_type!(); } -fn retain_names_from_declared_idents(child_names: &mut Vec, current_declared_idents: &[Id]) { +fn retain_names_from_declared_idents( + child_names: &mut Vec, + current_declared_idents: &[Ident], +) { // Collect the names to retain in a separate vector let mut retained_names = Vec::new(); @@ -1733,7 +1742,9 @@ fn retain_names_from_declared_idents(child_names: &mut Vec, current_declar } if should_retain - && current_declared_idents.contains(&name.0) + && current_declared_idents + .iter() + .any(|ident| ident.to_id() == name.0) && !retained_names.contains(name) { retained_names.push(name.clone()); @@ -1826,7 +1837,7 @@ fn annotate_ident_as_server_reference( ) -> Expr { // registerServerReference(reference, id, null) let proxy_expr = Expr::Call(CallExpr { - span: DUMMY_SP, + span: ident.span, callee: quote_ident!("registerServerReference").as_callee(), args: vec![ ExprOrSpread { @@ -2198,96 +2209,100 @@ fn remove_server_directive_index_in_fn( }); } -fn collect_idents_in_array_pat(elems: &[Option], ids: &mut Vec) { +fn collect_idents_in_array_pat(elems: &[Option], idents: &mut Vec) { for elem in elems.iter().flatten() { match elem { Pat::Ident(ident) => { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } Pat::Array(array) => { - collect_idents_in_array_pat(&array.elems, ids); + collect_idents_in_array_pat(&array.elems, idents); } Pat::Object(object) => { - collect_idents_in_object_pat(&object.props, ids); + collect_idents_in_object_pat(&object.props, idents); } Pat::Rest(rest) => { if let Pat::Ident(ident) = &*rest.arg { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } } Pat::Assign(AssignPat { left, .. }) => { - collect_idents_in_pat(left, ids); + collect_idents_in_pat(left, idents); } Pat::Expr(..) | Pat::Invalid(..) => {} } } } -fn collect_idents_in_object_pat(props: &[ObjectPatProp], ids: &mut Vec) { +fn collect_idents_in_object_pat(props: &[ObjectPatProp], idents: &mut Vec) { for prop in props { match prop { ObjectPatProp::KeyValue(KeyValuePatProp { key, value }) => { if let PropName::Ident(ident) = key { - ids.push((ident.sym.clone(), SyntaxContext::empty())); + idents.push(Ident::new( + ident.sym.clone(), + ident.span, + SyntaxContext::empty(), + )); } match &**value { Pat::Ident(ident) => { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } Pat::Array(array) => { - collect_idents_in_array_pat(&array.elems, ids); + collect_idents_in_array_pat(&array.elems, idents); } Pat::Object(object) => { - collect_idents_in_object_pat(&object.props, ids); + collect_idents_in_object_pat(&object.props, idents); } _ => {} } } ObjectPatProp::Assign(AssignPatProp { key, .. }) => { - ids.push(key.to_id()); + idents.push(key.id.clone()); } ObjectPatProp::Rest(RestPat { arg, .. }) => { if let Pat::Ident(ident) = &**arg { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } } } } } -fn collect_idents_in_var_decls(decls: &[VarDeclarator], ids: &mut Vec) { +fn collect_idents_in_var_decls(decls: &[VarDeclarator], idents: &mut Vec) { for decl in decls { - collect_idents_in_pat(&decl.name, ids); + collect_idents_in_pat(&decl.name, idents); } } -fn collect_idents_in_pat(pat: &Pat, ids: &mut Vec) { +fn collect_idents_in_pat(pat: &Pat, idents: &mut Vec) { match pat { Pat::Ident(ident) => { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } Pat::Array(array) => { - collect_idents_in_array_pat(&array.elems, ids); + collect_idents_in_array_pat(&array.elems, idents); } Pat::Object(object) => { - collect_idents_in_object_pat(&object.props, ids); + collect_idents_in_object_pat(&object.props, idents); } Pat::Assign(AssignPat { left, .. }) => { - collect_idents_in_pat(left, ids); + collect_idents_in_pat(left, idents); } Pat::Rest(RestPat { arg, .. }) => { if let Pat::Ident(ident) = &**arg { - ids.push(ident.id.to_id()); + idents.push(ident.id.clone()); } } Pat::Expr(..) | Pat::Invalid(..) => {} } } -fn collect_decl_idents_in_stmt(stmt: &Stmt, ids: &mut Vec) { +fn collect_decl_idents_in_stmt(stmt: &Stmt, idents: &mut Vec) { if let Stmt::Decl(Decl::Var(var)) = &stmt { - collect_idents_in_var_decls(&var.decls, ids); + collect_idents_in_var_decls(&var.decls, idents); } } diff --git a/packages/next/src/build/webpack/loaders/next-flight-loader/action-client-wrapper.ts b/packages/next/src/build/webpack/loaders/next-flight-loader/action-client-wrapper.ts index 38e54b9effa5b..6adc513bd1c90 100644 --- a/packages/next/src/build/webpack/loaders/next-flight-loader/action-client-wrapper.ts +++ b/packages/next/src/build/webpack/loaders/next-flight-loader/action-client-wrapper.ts @@ -2,6 +2,7 @@ // imported by the server. export { callServer } from 'next/dist/client/app-call-server' +export { findSourceMapURL } from 'next/dist/client/app-find-source-map-url' // A noop wrapper to let the Flight client create the server reference. // See also: https://github.com/facebook/react/pull/26632 @@ -16,5 +17,3 @@ export const createServerReference = ( : // eslint-disable-next-line import/no-extraneous-dependencies require('react-server-dom-webpack/client')) as typeof import('react-server-dom-webpack/client') ).createServerReference - -export const findSourceMapURL = undefined diff --git a/packages/next/src/client/app-find-source-map-url.ts b/packages/next/src/client/app-find-source-map-url.ts new file mode 100644 index 0000000000000..de3c4a1792ccd --- /dev/null +++ b/packages/next/src/client/app-find-source-map-url.ts @@ -0,0 +1,4 @@ +// TODO: Will be implemented later. +export function findSourceMapURL(_filename: string): string | null { + return null +} diff --git a/packages/next/src/client/app-index.tsx b/packages/next/src/client/app-index.tsx index bd5f0a789174b..eb8964d70a705 100644 --- a/packages/next/src/client/app-index.tsx +++ b/packages/next/src/client/app-index.tsx @@ -20,6 +20,9 @@ import type { InitialRSCPayload } from '../server/app-render/types' import { createInitialRouterState } from './components/router-reducer/create-initial-router-state' import { MissingSlotContext } from '../shared/lib/app-router-context.shared-runtime' +// Importing from dist so that we can define an alias if needed. +import { findSourceMapURL } from 'next/dist/client/app-find-source-map-url' + /// const appElement: HTMLElement | Document | null = document @@ -140,6 +143,7 @@ const readable = new ReadableStream({ const initialServerResponse = createFromReadableStream(readable, { callServer, + findSourceMapURL, }) // React overrides `.then` and doesn't return a new promise chain, diff --git a/packages/next/src/client/components/router-reducer/fetch-server-response.ts b/packages/next/src/client/components/router-reducer/fetch-server-response.ts index 4fa93362a23ee..53b508544a06f 100644 --- a/packages/next/src/client/components/router-reducer/fetch-server-response.ts +++ b/packages/next/src/client/components/router-reducer/fetch-server-response.ts @@ -33,6 +33,9 @@ import { type NormalizedFlightData, } from '../../flight-data-helpers' +// Importing from dist so that we can define an alias if needed. +import { findSourceMapURL } from 'next/dist/client/app-find-source-map-url' + export interface FetchServerResponseOptions { readonly flightRouterState: FlightRouterState readonly nextUrl: string | null @@ -208,9 +211,7 @@ export async function fetchServerResponse( // Handle the `fetch` readable stream that can be unwrapped by `React.use`. const response: NavigationFlightResponse = await createFromFetch( Promise.resolve(res), - { - callServer, - } + { callServer, findSourceMapURL } ) if (buildId !== response.b) { diff --git a/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts b/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts index 3d693ac9e0ccc..13fb34bfdce09 100644 --- a/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts +++ b/packages/next/src/client/components/router-reducer/reducers/server-action-reducer.ts @@ -10,6 +10,10 @@ import { NEXT_URL, RSC_CONTENT_TYPE_HEADER, } from '../../app-router-headers' + +// Importing from dist so that we can define an alias if needed. +import { findSourceMapURL } from 'next/dist/client/app-find-source-map-url' + // // eslint-disable-next-line import/no-extraneous-dependencies // import { createFromFetch } from 'react-server-dom-webpack/client' // // eslint-disable-next-line import/no-extraneous-dependencies @@ -138,9 +142,7 @@ async function fetchServerAction( if (contentType?.startsWith(RSC_CONTENT_TYPE_HEADER)) { const response: ActionFlightResponse = await createFromFetch( Promise.resolve(res), - { - callServer, - } + { callServer, findSourceMapURL } ) if (location) { diff --git a/packages/next/types/$$compiled.internal.d.ts b/packages/next/types/$$compiled.internal.d.ts index 7b629c14609f9..c26ba711b7e40 100644 --- a/packages/next/types/$$compiled.internal.d.ts +++ b/packages/next/types/$$compiled.internal.d.ts @@ -21,7 +21,15 @@ declare module 'next/dist/compiled/react-server-dom-turbopack/client.browser' declare module 'next/dist/compiled/react-server-dom-turbopack/server.browser' declare module 'next/dist/compiled/react-server-dom-turbopack/server.edge' declare module 'next/dist/compiled/react-server-dom-turbopack/static.edge' -declare module 'next/dist/client/app-call-server' +declare module 'next/dist/client/app-call-server' { + export function callServer( + actionId: string, + actionArgs: unknown[] + ): Promise +} +declare module 'next/dist/client/app-find-source-map-url' { + export function findSourceMapURL(filename: string): string | null +} declare module 'next/dist/compiled/react-dom/server' declare module 'next/dist/compiled/react-dom/server.edge' declare module 'next/dist/compiled/browserslist' diff --git a/test/e2e/app-dir/actions-simple/README.md b/test/e2e/app-dir/actions-simple/README.md new file mode 100644 index 0000000000000..48ef4c869b7bb --- /dev/null +++ b/test/e2e/app-dir/actions-simple/README.md @@ -0,0 +1,22 @@ +The main purpose of this end-to-end test app is to allow manual testing of +server action source mapping within the React DevTools. + +Until we have properly implemented `findSourceMapURL` in Next.js, this demo only +works with Turbopack. This is because we can mock `findSourceMapURL` for the +test app, as Turbopack generates source map files, whereas Webpack uses +`eval-source-map`. + +For client bundles, the source map files are served directly through +`/_next/static/chunks`, and for server bundles, the source map files are read +from disk and served through the `/source-maps-turbopack` route handler. + +To check the source mapping of server actions, follow these steps: + +1. Run `pnpm next dev --turbo test/e2e/app-dir/actions-simple`. +2. Go to [http://localhost:3000]() or [http://localhost:3000/client](). +3. Open the Components panel of the React DevTools. +4. Select the `Form` element. +5. In the props section, right-click on the `action` prop and select "Go to + definition" (sometimes it needs two tries). +6. You should end up in the Chrome DevTools Sources panel with the `actions.ts` + file open and the cursor at `foo()`. diff --git a/test/e2e/app-dir/actions-simple/actions-simple.test.ts b/test/e2e/app-dir/actions-simple/actions-simple.test.ts new file mode 100644 index 0000000000000..309b4d96eb2a9 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/actions-simple.test.ts @@ -0,0 +1,28 @@ +import { nextTestSetup } from 'e2e-utils' +import { retry } from 'next-test-utils' + +describe('actions-simple', () => { + const { next } = nextTestSetup({ + files: __dirname, + }) + + it('should work with server actions passed to client components', async () => { + const browser = await next.browser('/') + expect(await browser.elementByCss('p').text()).toBe('initial') + await browser.elementByCss('button').click() + + await retry(async () => { + expect(await browser.elementByCss('p').text()).toBe('result') + }) + }) + + it('should work with server actions imported from client components', async () => { + const browser = await next.browser('/client') + expect(await browser.elementByCss('p').text()).toBe('initial') + await browser.elementByCss('button').click() + + await retry(async () => { + expect(await browser.elementByCss('p').text()).toBe('result') + }) + }) +}) diff --git a/test/e2e/app-dir/actions-simple/app/actions.ts b/test/e2e/app-dir/actions-simple/app/actions.ts new file mode 100644 index 0000000000000..d26fc49045e51 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/actions.ts @@ -0,0 +1,5 @@ +'use server' + +export async function foo() { + return 'result' +} diff --git a/test/e2e/app-dir/actions-simple/app/client/page.tsx b/test/e2e/app-dir/actions-simple/app/client/page.tsx new file mode 100644 index 0000000000000..f7f3fb549ed9c --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/client/page.tsx @@ -0,0 +1,15 @@ +'use client' + +import { Form } from '../form' +import { foo } from '../actions' +import Link from 'next/link' + +export default function Page() { + return ( +
+

client component page

+
+ server component page +
+ ) +} diff --git a/test/e2e/app-dir/actions-simple/app/form.tsx b/test/e2e/app-dir/actions-simple/app/form.tsx new file mode 100644 index 0000000000000..0247e612542e0 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/form.tsx @@ -0,0 +1,14 @@ +'use client' + +import { useActionState } from 'react' + +export function Form({ action }: { action: () => Promise }) { + const [result, formAction] = useActionState(action, 'initial') + + return ( + + +

{result}

+ + ) +} diff --git a/test/e2e/app-dir/actions-simple/app/layout.tsx b/test/e2e/app-dir/actions-simple/app/layout.tsx new file mode 100644 index 0000000000000..888614deda3ba --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/layout.tsx @@ -0,0 +1,8 @@ +import { ReactNode } from 'react' +export default function Root({ children }: { children: ReactNode }) { + return ( + + {children} + + ) +} diff --git a/test/e2e/app-dir/actions-simple/app/page.tsx b/test/e2e/app-dir/actions-simple/app/page.tsx new file mode 100644 index 0000000000000..001ad7d42b7d8 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/page.tsx @@ -0,0 +1,13 @@ +import { Form } from './form' +import { foo } from './actions' +import Link from 'next/link' + +export default function Page() { + return ( +
+

server component page

+
+ client component page +
+ ) +} diff --git a/test/e2e/app-dir/actions-simple/app/source-maps-turbopack/route.ts b/test/e2e/app-dir/actions-simple/app/source-maps-turbopack/route.ts new file mode 100644 index 0000000000000..f4d6ef2f0c379 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/app/source-maps-turbopack/route.ts @@ -0,0 +1,18 @@ +import { readFile } from 'fs/promises' +import { NextRequest } from 'next/server' + +// This is for mocking findSourceMapURL until we've implemented it properly. +export async function GET(request: NextRequest): Promise { + const filename = request.nextUrl.searchParams.get('filename') + + try { + // It's not safe not to sanitize the query param, but it's just for a test. + const sourceMapContents = await readFile(`${filename}.map`) + + return new Response(sourceMapContents) + } catch (error) { + console.error(error) + } + + return new Response(null, { status: 404 }) +} diff --git a/test/e2e/app-dir/actions-simple/find-source-map-url-turbopack-mock.ts b/test/e2e/app-dir/actions-simple/find-source-map-url-turbopack-mock.ts new file mode 100644 index 0000000000000..429300b9e3003 --- /dev/null +++ b/test/e2e/app-dir/actions-simple/find-source-map-url-turbopack-mock.ts @@ -0,0 +1,10 @@ +export function findSourceMapURL(filename: string): string | null { + if (filename.startsWith(`${document.location.origin}/_next/static`)) { + return `${filename}.map` + } + + const url = new URL('/source-maps-turbopack', document.location.origin) + url.searchParams.set('filename', filename) + + return url.href +} diff --git a/test/e2e/app-dir/actions-simple/find-source-map-url-webpack-mock.ts b/test/e2e/app-dir/actions-simple/find-source-map-url-webpack-mock.ts new file mode 100644 index 0000000000000..77d6ec64fa28d --- /dev/null +++ b/test/e2e/app-dir/actions-simple/find-source-map-url-webpack-mock.ts @@ -0,0 +1,4 @@ +export function findSourceMapURL(_filename: string): string | null { + // TODO + return null +} diff --git a/test/e2e/app-dir/actions-simple/next.config.js b/test/e2e/app-dir/actions-simple/next.config.js new file mode 100644 index 0000000000000..a288abc41898b --- /dev/null +++ b/test/e2e/app-dir/actions-simple/next.config.js @@ -0,0 +1,22 @@ +/** + * @type {import('next').NextConfig} + */ + +const nextConfig = { + webpack(config) { + config.resolve.alias['next/dist/client/app-find-source-map-url'] = + require.resolve('./find-source-map-url-webpack-mock.ts') + + return config + }, + experimental: { + turbo: { + resolveAlias: { + 'next/dist/client/app-find-source-map-url': + './find-source-map-url-turbopack-mock.ts', + }, + }, + }, +} + +module.exports = nextConfig From 673b1a96300d5b7cff614f1a46eb2de96e23ce31 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Fri, 4 Oct 2024 10:15:46 -0700 Subject: [PATCH 19/19] chore(turbopack-browser): Delete unreferenced runtime.rs file (#70773) I discovered while working on codemods for `ResolvedVc` that this module is unreferenced/dead. --- .../src/ecmascript/runtime.rs | 215 ------------------ 1 file changed, 215 deletions(-) delete mode 100644 turbopack/crates/turbopack-browser/src/ecmascript/runtime.rs diff --git a/turbopack/crates/turbopack-browser/src/ecmascript/runtime.rs b/turbopack/crates/turbopack-browser/src/ecmascript/runtime.rs deleted file mode 100644 index 9d21a5afab615..0000000000000 --- a/turbopack/crates/turbopack-browser/src/ecmascript/runtime.rs +++ /dev/null @@ -1,215 +0,0 @@ -use anyhow::{bail, Result}; -use turbo_tasks::{Value, ValueToString, Vc}; -use turbopack_core::{ - asset::Asset, - chunk::{ChunkGroup, ChunkListReference, ChunkingContext}, - ident::AssetIdent, -}; -use turbopack_ecmascript::chunk::{ - ChunkingContext, EcmascriptChunk, EcmascriptChunkPlaceables, EcmascriptChunkRuntime, - EcmascriptChunkRuntimeContent, -}; - -use crate::ecmascript::content::EcmascriptDevChunkContent; - -/// Development runtime for Ecmascript chunks. -#[turbo_tasks::value(shared)] -pub(crate) struct EcmascriptDevChunkRuntime { - /// The chunking context that created this runtime. - chunking_context: Vc>, - /// All chunks of this chunk group need to be ready for execution to start. - /// When None, it will use a chunk group created from the current chunk. - chunk_group: Option>, - /// If any evaluated entries are set, the main runtime code will be included - /// in the chunk and the provided entries will be evaluated as soon as the - /// chunk executes. - evaluated_entries: Option>, -} - -#[turbo_tasks::value_impl] -impl EcmascriptDevChunkRuntime { - /// Creates a new [`Vc`]. - #[turbo_tasks::function] - pub fn new( - chunking_context: Vc>, - evaluated_entries: Option>, - ) -> Vc { - EcmascriptDevChunkRuntime { - chunking_context, - chunk_group: None, - evaluated_entries, - } - .cell() - } -} - -#[turbo_tasks::value_impl] -impl ValueToString for EcmascriptDevChunkRuntime { - #[turbo_tasks::function] - fn to_string(&self) -> Vc { - Vc::cell("Ecmascript Dev Runtime".to_string()) - } -} - -#[turbo_tasks::function] -fn modifier() -> Vc { - Vc::cell("ecmascript dev chunk".to_string()) -} - -#[turbo_tasks::value_impl] -impl EcmascriptChunkRuntime for EcmascriptDevChunkRuntime { - #[turbo_tasks::function] - async fn decorate_asset_ident( - &self, - origin_chunk: Vc, - ident: Vc, - ) -> Result> { - let Self { - chunking_context: _, - chunk_group, - evaluated_entries, - } = self; - - let mut ident = ident.await?.clone_value(); - - // Add a constant modifier to qualify this runtime. - ident.add_modifier(modifier()); - - // Only add other modifiers when the chunk is evaluated. Otherwise, it will - // not receive any params and as such won't differ from another chunk in a - // different chunk group. - if let Some(evaluated_entries) = evaluated_entries { - ident.modifiers.extend( - evaluated_entries - .await? - .iter() - .map(|entry| entry.ident().to_string()), - ); - - // When the chunk group has changed, e.g. due to optimization, we want to - // include the information too. Since the optimization is - // deterministic, it's enough to include the entry chunk which is the only - // factor that influences the chunk group chunks. - // We want to avoid a cycle when this chunk is the entry chunk. - if let Some(chunk_group) = chunk_group { - let entry = chunk_group.entry().resolve().await?; - if entry != origin_chunk.into() { - ident.add_modifier(entry.ident().to_string()); - } - } - } - - Ok(AssetIdent::new(Value::new(ident))) - } - - #[turbo_tasks::function] - fn with_chunk_group(&self, chunk_group: Vc) -> Vc { - EcmascriptDevChunkRuntime::cell(EcmascriptDevChunkRuntime { - chunking_context: self.chunking_context, - chunk_group: Some(chunk_group), - evaluated_entries: self.evaluated_entries, - }) - } - - #[turbo_tasks::function] - fn references(&self, origin_chunk: Vc) -> Vc { - let Self { - chunk_group, - chunking_context, - evaluated_entries, - } = self; - - let mut references = vec![]; - if evaluated_entries.is_some() { - let chunk_group = - chunk_group.unwrap_or_else(|| ChunkGroup::from_chunk(origin_chunk.into())); - references.push(Vc::upcast(ChunkListReference::new( - chunking_context.output_root(), - chunk_group, - ))); - } - Vc::cell(references) - } - - #[turbo_tasks::function] - fn content(&self, origin_chunk: Vc) -> Vc { - Vc::upcast(EcmascriptDevChunkContent::new( - origin_chunk, - self.chunking_context, - self.chunk_group, - self.evaluated_entries, - )) - } - - #[turbo_tasks::function] - async fn merge( - &self, - runtimes: Vec>, - ) -> Result> { - let Self { - chunking_context, - chunk_group, - evaluated_entries, - } = self; - - let chunking_context = chunking_context.resolve().await?; - let chunk_group = if let Some(chunk_group) = chunk_group { - Some(chunk_group.resolve().await?) - } else { - None - }; - - let mut evaluated_entries = if let Some(evaluated_entries) = evaluated_entries { - Some(evaluated_entries.await?.clone_value()) - } else { - None - }; - - for runtime in runtimes { - let Some(runtime) = - Vc::try_resolve_downcast_type::(runtime).await? - else { - bail!("cannot merge EcmascriptDevChunkRuntime with non-EcmascriptDevChunkRuntime"); - }; - - let Self { - chunking_context: other_chunking_context, - chunk_group: other_chunk_group, - evaluated_entries: other_evaluated_entries, - } = &*runtime.await?; - - let other_chunking_context = other_chunking_context.resolve().await?; - let other_chunk_group = if let Some(other_chunk_group) = other_chunk_group { - Some(other_chunk_group.resolve().await?) - } else { - None - }; - - if chunking_context != other_chunking_context { - bail!("cannot merge EcmascriptDevChunkRuntime with different chunking contexts",); - } - - if chunk_group != other_chunk_group { - bail!("cannot merge EcmascriptDevChunkRuntime with different chunk groups",); - } - - match (&mut evaluated_entries, other_evaluated_entries) { - (Some(evaluated_entries), Some(other_evaluated_entries)) => { - evaluated_entries.extend(other_evaluated_entries.await?.iter().copied()); - } - (None, Some(other_evaluated_entries)) => { - evaluated_entries = Some(other_evaluated_entries.await?.clone_value()); - } - _ => {} - } - } - - Ok(EcmascriptDevChunkRuntime { - chunking_context, - chunk_group, - evaluated_entries: evaluated_entries.map(Vc::cell), - } - .cell() - .into()) - } -}