Use ProxiedAsset instead of css_chunk_root_path to expose RSC CSS chunks (#48946)

See https://github.com/vercel/turbo/pull/4740

This enables RSC CSS HMR. The `css_chunk_root_path` way somehow broke
the propagation of invalidation for CSS chunks.

This also updates Turbopack with the following changes:

* https://github.com/vercel/turbo/pull/4738 <!-- Tobias Koppers -
improve commonjs esm interop and node ESM -->
* https://github.com/vercel/turbo/pull/4740 <!-- Alex Kirszenberg -
Replace css_chunk_root_path with ProxiedAsset -->
* https://github.com/vercel/turbo/pull/4741 <!-- Tobias Koppers - add
svg size extraction -->

---------

Co-authored-by: Tobias Koppers <tobias.koppers@googlemail.com>
This commit is contained in:
Alex Kirszenberg 2023-04-28 20:37:34 +02:00 committed by GitHub
parent b3071ad47e
commit 7b348fa0f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 146 additions and 127 deletions

68
Cargo.lock generated
View file

@ -400,7 +400,7 @@ dependencies = [
[[package]]
name = "auto-hash-map"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"serde",
]
@ -3412,7 +3412,7 @@ dependencies = [
[[package]]
name = "node-file-trace"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"serde",
@ -6973,7 +6973,7 @@ dependencies = [
[[package]]
name = "turbo-binding"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"auto-hash-map",
"mdxjs",
@ -7013,7 +7013,7 @@ dependencies = [
[[package]]
name = "turbo-malloc"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"mimalloc",
]
@ -7021,7 +7021,7 @@ dependencies = [
[[package]]
name = "turbo-tasks"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7051,7 +7051,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-build"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"cargo-lock",
@ -7063,7 +7063,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-bytes"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"bytes",
@ -7078,7 +7078,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"dotenvy",
@ -7092,7 +7092,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fetch"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"indexmap",
@ -7109,7 +7109,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-fs"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7138,7 +7138,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-hash"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"base16",
"hex",
@ -7150,7 +7150,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"convert_case 0.6.0",
@ -7164,7 +7164,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-macros-shared"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"proc-macro2",
"quote",
@ -7174,7 +7174,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-memory"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7196,7 +7196,7 @@ dependencies = [
[[package]]
name = "turbo-tasks-testing"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"auto-hash-map",
@ -7208,7 +7208,7 @@ dependencies = [
[[package]]
name = "turbopack"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"async-recursion",
@ -7237,7 +7237,7 @@ dependencies = [
[[package]]
name = "turbopack-bench"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"chromiumoxide",
@ -7267,7 +7267,7 @@ dependencies = [
[[package]]
name = "turbopack-cli-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"clap 4.1.11",
@ -7284,7 +7284,7 @@ dependencies = [
[[package]]
name = "turbopack-core"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"async-trait",
@ -7311,7 +7311,7 @@ dependencies = [
[[package]]
name = "turbopack-create-test-app"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"clap 4.1.11",
@ -7324,7 +7324,7 @@ dependencies = [
[[package]]
name = "turbopack-css"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"async-trait",
@ -7346,7 +7346,7 @@ dependencies = [
[[package]]
name = "turbopack-dev"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"indexmap",
@ -7367,7 +7367,7 @@ dependencies = [
[[package]]
name = "turbopack-dev-server"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"async-compression",
@ -7401,7 +7401,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"async-trait",
@ -7437,7 +7437,7 @@ dependencies = [
[[package]]
name = "turbopack-ecmascript-plugins"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"serde",
@ -7451,7 +7451,7 @@ dependencies = [
[[package]]
name = "turbopack-env"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"indexmap",
@ -7467,13 +7467,15 @@ dependencies = [
[[package]]
name = "turbopack-image"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"base64 0.21.0",
"image",
"indexmap",
"mime",
"once_cell",
"regex",
"serde",
"serde_with",
"turbo-tasks",
@ -7485,7 +7487,7 @@ dependencies = [
[[package]]
name = "turbopack-json"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"serde",
@ -7500,7 +7502,7 @@ dependencies = [
[[package]]
name = "turbopack-mdx"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"mdxjs",
@ -7515,7 +7517,7 @@ dependencies = [
[[package]]
name = "turbopack-node"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"async-stream",
@ -7549,7 +7551,7 @@ dependencies = [
[[package]]
name = "turbopack-static"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"serde",
@ -7565,7 +7567,7 @@ dependencies = [
[[package]]
name = "turbopack-swc-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"swc_core",
"turbo-tasks",
@ -7576,7 +7578,7 @@ dependencies = [
[[package]]
name = "turbopack-test-utils"
version = "0.1.0"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230427.3#0e9881f822a6854a2b0daaf550b5eab91fd56771"
source = "git+https://github.com/vercel/turbo.git?tag=turbopack-230428.3#a64b0c13b08666537520d0c4d0fbcca07307876a"
dependencies = [
"anyhow",
"once_cell",

View file

@ -42,11 +42,11 @@ swc_relay = { version = "0.2.5" }
testing = { version = "0.33.4" }
# Turbo crates
turbo-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230427.3" }
turbo-binding = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230428.3" }
# [TODO]: need to refactor embed_directory! macro usages, as well as resolving turbo_tasks::function, macros..
turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230427.3" }
turbo-tasks = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230428.3" }
# [TODO]: need to refactor embed_directory! macro usage in next-core
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230427.3" }
turbo-tasks-fs = { git = "https://github.com/vercel/turbo.git", tag = "turbopack-230428.3" }
# General Deps

View file

@ -10,8 +10,8 @@
"check": "tsc --noEmit"
},
"dependencies": {
"@vercel/turbopack-dev": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230427.3",
"@vercel/turbopack-node": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230427.3",
"@vercel/turbopack-dev": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230428.3",
"@vercel/turbopack-node": "https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230428.3",
"anser": "^2.1.1",
"css.escape": "^1.5.1",
"next": "*",

View file

@ -4,6 +4,7 @@ import type { ReactElement } from 'react'
import { version } from 'next/package.json'
import { createFromReadableStream } from 'next/dist/compiled/react-server-dom-webpack/client'
import { callServer } from 'next/dist/client/app-call-server'
import { linkGc } from 'next/dist/client/app-link-gc'
import { HeadManagerContext } from 'next/dist/shared/lib/head-manager-context'
@ -153,6 +154,8 @@ function hydrate() {
ReactDOMClient.hydrateRoot(appElement, reactEl)
})
}
linkGc()
}
window.next = {

View file

@ -933,7 +933,6 @@ import {}, {{ chunks as {} }} from "COMPONENT_{}";
context.compile_time_info().environment(),
)
.layer("ssr")
.css_chunk_root_path(server_root.join("_next/static/chunks"))
.reference_chunk_source_maps(false)
.build();
@ -1013,7 +1012,6 @@ impl AppRouteVc {
this.context.compile_time_info().environment(),
)
.layer("ssr")
.css_chunk_root_path(this.server_root.join("_next/static/chunks"))
.reference_chunk_source_maps(false)
.build();

View file

@ -4,7 +4,7 @@ use turbo_binding::{
turbo::tasks_fs::FileSystemPathVc,
turbopack::{
core::{
asset::{Asset, AssetContentVc, AssetVc},
asset::{Asset, AssetContentVc, AssetVc, AssetsVc},
chunk::{
availability_info::AvailabilityInfo, ChunkItem, ChunkItemVc, ChunkVc,
ChunkableAsset, ChunkableAssetReference, ChunkableAssetReferenceVc,
@ -12,6 +12,7 @@ use turbo_binding::{
ChunkingTypeOptionVc,
},
ident::AssetIdentVc,
proxied_asset::ProxiedAssetVc,
reference::{
AssetReference, AssetReferenceVc, AssetReferencesVc, SingleAssetReferenceVc,
},
@ -116,14 +117,44 @@ struct WithClientChunksChunkItem {
#[turbo_tasks::value_impl]
impl WithClientChunksChunkItemVc {
#[turbo_tasks::function]
async fn chunks(self) -> Result<AssetsVc> {
let this = self.await?;
let inner = this.inner.await?;
Ok(this
.context
.chunk_group(inner.asset.as_root_chunk(this.context.into())))
}
#[turbo_tasks::function]
async fn client_chunks(self) -> Result<AssetsVc> {
let this = self.await?;
let inner = this.inner.await?;
let chunks = self.chunks();
let output_root = this.context.output_root().await?;
let mut client_chunks = Vec::new();
for chunk in &*chunks.await? {
let extension = chunk.ident().path().extension().await?;
// Only expose CSS chunks as client chunks.
if &*extension == "css" {
if let Some(path) = output_root.get_path_to(&*chunk.ident().path().await?) {
client_chunks
.push(ProxiedAssetVc::new(*chunk, inner.server_root.join(path)).into());
}
}
}
Ok(AssetsVc::cell(client_chunks))
}
#[turbo_tasks::function]
async fn chunks_data(self) -> Result<ChunksDataVc> {
let this = self.await?;
let inner = this.inner.await?;
Ok(ChunkDataVc::from_assets(
inner.server_root,
this.context
.chunk_group(inner.asset.as_root_chunk(this.context.into())),
self.client_chunks(),
))
}
}
@ -188,17 +219,11 @@ impl ChunkItem for WithClientChunksChunkItem {
.cell()
.into(),
);
let group = this
.context
.chunk_group(inner.asset.as_root_chunk(this.context.into()));
let server_root = inner.server_root.await?;
let chunks = group.await?;
let client_chunks = self_vc.client_chunks();
let client_chunks = client_chunks.await?;
let client_chunk = StringVc::cell("client chunk".to_string());
for &chunk in chunks.iter() {
let path = chunk.ident().path().await?;
if path.is_inside(&server_root) {
references.push(SingleAssetReferenceVc::new(chunk, client_chunk).into());
}
for &chunk in client_chunks.iter() {
references.push(SingleAssetReferenceVc::new(chunk, client_chunk).into());
}
for chunk_data in &*self_vc.chunks_data().await? {
references.extend(chunk_data.references().await?.iter().copied());

View file

@ -10,6 +10,7 @@ import { GlobalLayoutRouterContext } from '../shared/lib/app-router-context'
import onRecoverableError from './on-recoverable-error'
import { callServer } from './app-call-server'
import { isNextRouterError } from './components/is-next-router-error'
import { linkGc } from './app-link-gc'
// Since React doesn't call onerror for errors caught in error boundaries.
const origConsoleError = window.console.error
@ -297,55 +298,5 @@ export function hydrate() {
reactRoot.render(reactEl)
}
// TODO-APP: Remove this logic when Float has GC built-in in development.
if (process.env.NODE_ENV !== 'production') {
const callback = (mutationList: MutationRecord[]) => {
for (const mutation of mutationList) {
if (mutation.type === 'childList') {
for (const node of mutation.addedNodes) {
if (
'tagName' in node &&
(node as HTMLLinkElement).tagName === 'LINK'
) {
const link = node as HTMLLinkElement
if (link.dataset.precedence === 'next.js') {
const href = link.getAttribute('href')
if (href) {
const [resource, version] = href.split('?v=')
if (version) {
const allLinks = document.querySelectorAll(
`link[href^="${resource}"]`
) as NodeListOf<HTMLLinkElement>
for (const otherLink of allLinks) {
if (otherLink.dataset.precedence === 'next.js') {
const otherHref = otherLink.getAttribute('href')
if (otherHref) {
const [, otherVersion] = otherHref.split('?v=')
if (!otherVersion || +otherVersion < +version) {
otherLink.remove()
const preloadLink = document.querySelector(
`link[rel="preload"][as="style"][href="${otherHref}"]`
)
if (preloadLink) {
preloadLink.remove()
}
}
}
}
}
}
}
}
}
}
}
}
}
// Create an observer instance linked to the callback function
const observer = new MutationObserver(callback)
observer.observe(document.head, {
childList: true,
})
}
linkGc()
}

View file

@ -0,0 +1,53 @@
export function linkGc() {
// TODO-APP: Remove this logic when Float has GC built-in in development.
if (process.env.NODE_ENV !== 'production') {
const callback = (mutationList: MutationRecord[]) => {
for (const mutation of mutationList) {
if (mutation.type === 'childList') {
for (const node of mutation.addedNodes) {
if (
'tagName' in node &&
(node as HTMLLinkElement).tagName === 'LINK'
) {
const link = node as HTMLLinkElement
if (link.dataset.precedence === 'next.js') {
const href = link.getAttribute('href')
if (href) {
const [resource, version] = href.split('?v=')
if (version) {
const allLinks = document.querySelectorAll(
`link[href^="${resource}"]`
) as NodeListOf<HTMLLinkElement>
for (const otherLink of allLinks) {
if (otherLink.dataset.precedence === 'next.js') {
const otherHref = otherLink.getAttribute('href')
if (otherHref) {
const [, otherVersion] = otherHref.split('?v=')
if (!otherVersion || +otherVersion < +version) {
otherLink.remove()
const preloadLink = document.querySelector(
`link[rel="preload"][as="style"][href="${otherHref}"]`
)
if (preloadLink) {
preloadLink.remove()
}
}
}
}
}
}
}
}
}
}
}
}
}
// Create an observer instance linked to the callback function
const observer = new MutationObserver(callback)
observer.observe(document.head, {
childList: true,
})
}
}

View file

@ -1018,8 +1018,8 @@ importers:
'@types/react': 18.0.37
'@types/react-dom': 18.0.11
'@vercel/ncc': ^0.36.0
'@vercel/turbopack-dev': https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230427.3
'@vercel/turbopack-node': https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230427.3
'@vercel/turbopack-dev': https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230428.3
'@vercel/turbopack-node': https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230428.3
anser: ^2.1.1
css.escape: ^1.5.1
find-up: ^6.3.0
@ -1031,8 +1031,8 @@ importers:
stacktrace-parser: ^0.1.10
strip-ansi: ^7.0.1
dependencies:
'@vercel/turbopack-dev': '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230427.3_react-refresh@0.12.0'
'@vercel/turbopack-node': '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230427.3'
'@vercel/turbopack-dev': '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230428.3_react-refresh@0.12.0'
'@vercel/turbopack-node': '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230428.3'
anser: 2.1.1
css.escape: 1.5.1
next: link:../../../../next
@ -6002,7 +6002,7 @@ packages:
dependencies:
'@mdx-js/mdx': 2.2.1
source-map: 0.7.3
webpack: 5.74.0
webpack: 5.74.0_@swc+core@1.3.55
transitivePeerDependencies:
- supports-color
@ -6672,7 +6672,6 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-darwin-x64/1.3.55:
@ -6681,7 +6680,6 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm-gnueabihf/1.3.55:
@ -6690,7 +6688,6 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-gnu/1.3.55:
@ -6699,7 +6696,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-musl/1.3.55:
@ -6708,7 +6704,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-gnu/1.3.55:
@ -6717,7 +6712,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-musl/1.3.55:
@ -6726,7 +6720,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-arm64-msvc/1.3.55:
@ -6735,7 +6728,6 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-ia32-msvc/1.3.55:
@ -6744,7 +6736,6 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-x64-msvc/1.3.55:
@ -6753,7 +6744,6 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core/1.3.55_@swc+helpers@0.5.1:
@ -6778,7 +6768,6 @@ packages:
'@swc/core-win32-arm64-msvc': 1.3.55
'@swc/core-win32-ia32-msvc': 1.3.55
'@swc/core-win32-x64-msvc': 1.3.55
dev: true
/@swc/helpers/0.4.14:
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
@ -23775,7 +23764,6 @@ packages:
source-map: 0.6.1
terser: 5.14.1
webpack: 5.74.0_@swc+core@1.3.55
dev: true
/terser-webpack-plugin/5.2.4_webpack@5.74.0:
resolution: {integrity: sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==}
@ -25181,7 +25169,6 @@ packages:
- '@swc/core'
- esbuild
- uglify-js
dev: true
/websocket-driver/0.7.3:
resolution: {integrity: sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==}
@ -25587,9 +25574,9 @@ packages:
/zwitch/2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
'@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230427.3_react-refresh@0.12.0':
resolution: {tarball: https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230427.3}
id: '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230427.3'
'@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230428.3_react-refresh@0.12.0':
resolution: {tarball: https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230428.3}
id: '@gitpkg.vercel.app/vercel/turbo/crates/turbopack-dev/js?turbopack-230428.3'
name: '@vercel/turbopack-dev'
version: 0.0.0
dependencies:
@ -25599,8 +25586,8 @@ packages:
- webpack
dev: false
'@gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230427.3':
resolution: {tarball: https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230427.3}
'@gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230428.3':
resolution: {tarball: https://gitpkg.vercel.app/vercel/turbo/crates/turbopack-node/js?turbopack-230428.3}
name: '@vercel/turbopack-node'
version: 0.0.0
dependencies: