diff --git a/crates/next-core/js/package.json b/crates/next-core/js/package.json index 716fd7c5eac2f..9312acb7f064b 100644 --- a/crates/next-core/js/package.json +++ b/crates/next-core/js/package.json @@ -12,7 +12,7 @@ "@vercel/turbopack-runtime": "latest", "anser": "2.1.1", "css.escape": "1.5.1", - "next": "12.3.2-canary.39", + "next": "13.0.3-canary.2", "platform": "1.3.6", "react-dom": "^18.2.0", "react": "^18.2.0", diff --git a/crates/next-core/js/src/dev/hot-reloader.tsx b/crates/next-core/js/src/dev/hot-reloader.tsx index b991176541202..a4ffc66efb165 100644 --- a/crates/next-core/js/src/dev/hot-reloader.tsx +++ b/crates/next-core/js/src/dev/hot-reloader.tsx @@ -14,7 +14,7 @@ export default function HotReload({ assetPrefix, children }): any { { path, headers: { - __rsc__: "1", + rsc: "1", }, }, (update) => { diff --git a/crates/next-core/js/src/entry/app-renderer.tsx b/crates/next-core/js/src/entry/app-renderer.tsx index fd99d5e841b22..5a01ba7972e73 100644 --- a/crates/next-core/js/src/entry/app-renderer.tsx +++ b/crates/next-core/js/src/entry/app-renderer.tsx @@ -1,9 +1,21 @@ import type { Ipc } from "@vercel/turbopack-next/internal/ipc"; // Provided by the rust generate code +type FileType = + | "layout" + | "template" + | "error" + | "loading" + | "not-found" + | "head"; declare global { // an array of all layouts and the page - const LAYOUT_INFO: { segment: string; module: any; chunks: string[] }[]; + const LAYOUT_INFO: ({ + segment: string; + page?: { module: any; chunks: string[] }; + } & { + [componentKey in FileType]?: { module: any; chunks: string[] }; + })[]; // array of chunks for the bootstrap script const BOOTSTRAP: string[]; const IPC: Ipc; @@ -21,7 +33,6 @@ import "next/dist/server/node-polyfill-web-streams"; import { RenderOpts, renderToHTMLOrFlight } from "next/dist/server/app-render"; import { PassThrough } from "stream"; import { ServerResponseShim } from "@vercel/turbopack-next/internal/http"; -import { structuredError } from "@vercel/turbopack-next/internal/error"; import { ParsedUrlQuery } from "node:querystring"; globalThis.__next_require__ = (data) => { @@ -77,16 +88,11 @@ type IpcOutgoingMessage = { // TODO expose these types in next.js type ComponentModule = () => any; +type ModuleReference = [componentModule: ComponentModule, filePath: string]; export type ComponentsType = { - readonly [componentKey in - | "layout" - | "template" - | "error" - | "loading" - | "not-found"]?: ComponentModule; + [componentKey in FileType]?: ModuleReference; } & { - readonly layoutOrPagePath?: string; - readonly page?: ComponentModule; + page?: ModuleReference; }; type LoaderTree = [ segment: string, @@ -102,31 +108,24 @@ type ServerComponentsManifestModule = { }; async function runOperation(renderData: RenderData) { + const layoutInfoChunks: Record = {}; const pageItem = LAYOUT_INFO[LAYOUT_INFO.length - 1]; - const pageModule = pageItem.module; + const pageModule = pageItem.page!.module; const Page = pageModule.default; - let tree: LoaderTree = [ - "", - {}, - { page: () => Page, layoutOrPagePath: "page.js" }, - ]; + let tree: LoaderTree = ["", {}, { page: [() => Page, "page.js"] }]; + layoutInfoChunks["page.js"] = pageItem.page!.chunks; for (let i = LAYOUT_INFO.length - 2; i >= 0; i--) { const info = LAYOUT_INFO[i]; - const mod = info.module; - if (mod) { - const Layout = mod.default; - tree = [ - info.segment, - { children: tree }, - { layout: () => Layout, layoutOrPagePath: `layout${i}.js` }, - ]; - } else { - tree = [ - info.segment, - { children: tree }, - { layoutOrPagePath: `layout${i}.js` }, - ]; + const components: ComponentsType = {}; + for (const key of Object.keys(info)) { + if (key === "segment") { + continue; + } + const k = key as FileType; + components[k] = [() => info[k]!.module.default, `${k}${i}.js`]; + layoutInfoChunks[`${k}${i}.js`] = info[k]!.chunks; } + tree = [info.segment, { children: tree }, components]; } const proxyMethodsForModule = ( @@ -157,19 +156,15 @@ async function runOperation(renderData: RenderData) { const manifest: FlightManifest = new Proxy({} as any, proxyMethods(false)); const serverCSSManifest: FlightCSSManifest = {}; serverCSSManifest.__entry_css__ = {}; - for (let i = 0; i < LAYOUT_INFO.length - 1; i++) { - const { chunks } = LAYOUT_INFO[i]; - const cssChunks = (chunks || []).filter((path) => path.endsWith(".css")); - serverCSSManifest[`layout${i}.js`] = cssChunks.map((chunk) => + for (const [key, chunks] of Object.entries(layoutInfoChunks)) { + const cssChunks = chunks.filter((path) => path.endsWith(".css")); + serverCSSManifest[key] = cssChunks.map((chunk) => JSON.stringify([chunk, [chunk]]) ); } serverCSSManifest.__entry_css__ = { - page: pageItem.chunks - .filter((path) => path.endsWith(".css")) - .map((chunk) => JSON.stringify([chunk, [chunk]])), + page: serverCSSManifest["page.js"], }; - serverCSSManifest["page.js"] = serverCSSManifest.__entry_css__.page; const req: IncomingMessage = { url: renderData.url, method: renderData.method, @@ -185,7 +180,8 @@ async function runOperation(renderData: RenderData) { dev: true, buildManifest: { polyfillFiles: [], - rootMainFiles: LAYOUT_INFO.flatMap(({ chunks }) => chunks || []) + rootMainFiles: Object.values(layoutInfoChunks) + .flat() .concat(BOOTSTRAP) .filter((path) => !path.endsWith(".css")), devFiles: [], diff --git a/crates/next-core/src/app_render/mod.rs b/crates/next-core/src/app_render/mod.rs index 5c14d6ec56529..b8fc4223954c3 100644 --- a/crates/next-core/src/app_render/mod.rs +++ b/crates/next-core/src/app_render/mod.rs @@ -1,10 +1,12 @@ +use std::collections::HashMap; + use turbo_tasks_fs::FileSystemPathVc; pub mod next_layout_entry_transition; #[turbo_tasks::value(shared)] pub struct LayoutSegment { - pub file: Option, + pub files: HashMap, pub target: FileSystemPathVc, } diff --git a/crates/next-core/src/app_source.rs b/crates/next-core/src/app_source.rs index 8b1f7420e0068..dbef683e124e9 100644 --- a/crates/next-core/src/app_source.rs +++ b/crates/next-core/src/app_source.rs @@ -1,4 +1,7 @@ -use std::{collections::HashMap, io::Write}; +use std::{ + collections::{BTreeMap, HashMap}, + io::Write, +}; use anyhow::{anyhow, Context, Result}; use turbo_tasks::{ @@ -289,20 +292,18 @@ async fn create_app_source_for_directory( let mut layouts = layouts; let mut sources = Vec::new(); let mut page = None; - let mut layout = None; + let mut files = HashMap::new(); if let DirectoryContent::Entries(entries) = &*input_dir.read_dir().await? { for (name, entry) in entries.iter() { - if let DirectoryEntry::File(file) = entry { + if let &DirectoryEntry::File(file) = entry { if let Some((name, _)) = name.rsplit_once('.') { match name { "page" => { page = Some(file); } - "layout" => { - layout = Some(file); + "layout" | "error" | "loading" | "template" | "not-found" | "head" => { + files.insert(name.to_string(), file); } - "error" => { /* TODO */ } - "loading" => { /* TODO */ } _ => { // Any other file is ignored } @@ -311,8 +312,7 @@ async fn create_app_source_for_directory( } } - let layout_js = input_dir.join("layout.js"); - let layout_tsx = input_dir.join("layout.tsx"); + let layout = files.get("layout"); // TODO: Use let Some(page_file) = page in expression below when // https://rust-lang.github.io/rfcs/2497-if-let-chains.html lands @@ -325,23 +325,23 @@ async fn create_app_source_for_directory( // stable does. let is_tsx = *page_file.extension().await? == "tsx"; - if is_tsx { - layout.replace(&layout_tsx); + let layout = if is_tsx { + input_dir.join("layout.tsx") } else { - layout.replace(&layout_js); - } + input_dir.join("layout.js") + }; + files.insert("layout".to_string(), layout); let content = if is_tsx { include_str!("assets/layout.tsx") } else { include_str!("assets/layout.js") }; - let layout = layout.context("required")?; layout.write(FileContentVc::from(File::from(content))); AppSourceIssue { severity: IssueSeverity::Warning.into(), - path: *page_file, + path: page_file, message: StringVc::cell(format!( "Your page {} did not have a root layout, we created {} for you.", page_file.await?.path, @@ -354,15 +354,9 @@ async fn create_app_source_for_directory( } let mut list = layouts.await?.clone_value(); - list.push( - LayoutSegment { - file: layout.copied(), - target, - } - .cell(), - ); + list.push(LayoutSegment { files, target }.cell()); layouts = LayoutSegmentsVc::cell(list); - if let Some(page_path) = page.copied() { + if let Some(page_path) = page { sources.push(create_node_rendered_source( specificity, server_root, @@ -440,7 +434,7 @@ impl NodeEntry for AppRenderer { #[turbo_tasks::function] async fn entry(&self, data: Value) -> Result { let is_rsc = if let Some(headers) = data.into_value().headers { - headers.contains_key("__rsc__") + headers.contains_key("rsc") } else { false }; @@ -453,14 +447,14 @@ impl NodeEntry for AppRenderer { .copied() .chain(std::iter::once( LayoutSegment { - file: Some(page), + files: HashMap::from([("page".to_string(), page)]), target: self.target, } .cell(), )) .try_join() .await?; - let segments: Vec<(String, Option<(String, String, String)>)> = layout_and_page + let segments: Vec<(String, BTreeMap)> = layout_and_page .into_iter() .fold( (self.server_root, Vec::new()), @@ -470,7 +464,8 @@ impl NodeEntry for AppRenderer { let target = &*segment.target.await?; let segment_path = last_path.await?.get_path_to(target).unwrap_or_default(); - if let Some(file) = segment.file { + let mut imports = BTreeMap::new(); + for (key, file) in segment.files.iter() { let file_str = file.to_string().await?; let identifier = magic_identifier::encode(&format!( "imported namespace {}", @@ -481,25 +476,21 @@ impl NodeEntry for AppRenderer { file_str )); if let Some(p) = path_value.get_relative_path_to(&*file.await?) { - Ok(( - stringify_str(segment_path), - Some((p, identifier, chunks_identifier)), - )) + imports.insert( + key.to_string(), + (p, identifier, chunks_identifier), + ); } else { - Err(anyhow!( + return Err(anyhow!( "Unable to generate import as there is no relative path to the layout module {} from context path {}", file_str, path.to_string().await? - )) + )); } - } else { - Ok::<(String, Option<(String, String, String)>), _>(( - stringify_str(segment_path), - None, - )) } + Ok((stringify_str(segment_path), imports)) }); futures }) @@ -513,8 +504,8 @@ impl NodeEntry for AppRenderer { "import IPC, { Ipc } from \"@vercel/turbopack-next/internal/ipc\";\n", ); - for (_, import) in segments.iter() { - if let Some((p, identifier, chunks_identifier)) = import { + for (_, imports) in segments.iter() { + for (p, identifier, chunks_identifier) in imports.values() { result += r#"("TURBOPACK { transition: next-layout-entry; chunking-type: parallel }"); "#; writeln!( @@ -537,16 +528,16 @@ import BOOTSTRAP from {}; } result += "const LAYOUT_INFO = ["; - for (segment_str_lit, import) in segments.iter() { - if let Some((_, identifier, chunks_identifier)) = import { + for (segment_str_lit, imports) in segments.iter() { + writeln!(result, " {{\n segment: {segment_str_lit},")?; + for (key, (_, identifier, chunks_identifier)) in imports { writeln!( result, - " {{ segment: {segment_str_lit}, module: {identifier}, chunks: \ - {chunks_identifier} }},", - )? - } else { - writeln!(result, " {{ segment: {segment_str_lit} }},",)? + " {key}: {{ module: {identifier}, chunks: {chunks_identifier} }},", + key = stringify_str(key), + )?; } + result += " },"; } result += "];\n\n"; @@ -558,7 +549,7 @@ import BOOTSTRAP from {}; let file = File::from(result.build()); let asset = VirtualAssetVc::new(path.join("entry"), file.into()); let (context, intermediate_output_path) = if is_rsc { - (self.context, self.intermediate_output_path.join("__rsc__")) + (self.context, self.intermediate_output_path.join("rsc")) } else { (self.context_ssr, self.intermediate_output_path) }; diff --git a/crates/next-dev/benches/bundlers/turbopack.rs b/crates/next-dev/benches/bundlers/turbopack.rs index b38e5a7e54a05..2e8603c9520eb 100644 --- a/crates/next-dev/benches/bundlers/turbopack.rs +++ b/crates/next-dev/benches/bundlers/turbopack.rs @@ -58,7 +58,7 @@ impl Bundler for Turbopack { npm::install( install_dir, &[ - NpmPackage::new("next", "13.0.0"), + NpmPackage::new("next", "13.0.3-canary.2"), // Dependency on this is inserted by swc's preset_env NpmPackage::new("@swc/helpers", "^0.4.11"), ], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d5726bd3cd4ab..ffb32d4d59e3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,7 +90,7 @@ importers: anser: 2.1.1 css.escape: 1.5.1 find-up: ^6.3.0 - next: 12.3.2-canary.39 + next: 13.0.3-canary.2 platform: 1.3.6 react: ^18.2.0 react-dom: ^18.2.0 @@ -101,7 +101,7 @@ importers: '@vercel/turbopack-runtime': link:../../turbopack-ecmascript/js anser: 2.1.1 css.escape: 1.5.1 - next: 12.3.2-canary.39_biqbaboplfbrettd7655fr4n2y + next: 13.0.3-canary.2_biqbaboplfbrettd7655fr4n2y platform: 1.3.6 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -1447,14 +1447,14 @@ packages: /@next/env/12.3.1: resolution: {integrity: sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==} - /@next/env/12.3.2-canary.39: - resolution: {integrity: sha512-Qt6h1ynoG4RUIVEzP1kcqMgAbZ4Q11Y1OipufRxY1cM6ZgRTRTo+cs1f4Hc6ORuNnQkU5Zmq0ZCPiI5AT+EycQ==} - dev: false - /@next/env/13.0.2: resolution: {integrity: sha512-Qb6WPuRriGIQ19qd6NBxpcrFOfj8ziN7l9eZUfwff5gl4zLXluqtuZPddYZM/oWjN53ZYcuRXzL+oowKyJeYtA==} dev: false + /@next/env/13.0.3-canary.2: + resolution: {integrity: sha512-Ugn4VxB+2Bd1LnWcMbjIwNcVYPoBZ8Yo6j2A3MU99pzeYq+TGtHcYPz0xyIAP3Qp7mrH5gx6PITVz7D22u8p7w==} + dev: false + /@next/eslint-plugin-next/12.3.1: resolution: {integrity: sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==} dependencies: @@ -1481,8 +1481,8 @@ packages: requiresBuild: true optional: true - /@next/swc-android-arm-eabi/12.3.2-canary.39: - resolution: {integrity: sha512-jiRLYiIGz4D/rasUJm8ilMsR/UPAjRHhHVfZ12uAN8zy+iPK+7mV7CiR9ZCOKYyzUdYVuVGTFX0toFcQb4EB+Q==} + /@next/swc-android-arm-eabi/13.0.2: + resolution: {integrity: sha512-X54UQCTFyOGnJP//Z71dPPlp4BCYcQL2ncikKXQcPzVpqPs4C3m+tKC8ivBNH6edAXkppwsLRz1/yQwgSZ9Swg==} engines: {node: '>= 10'} cpu: [arm] os: [android] @@ -1490,8 +1490,8 @@ packages: dev: false optional: true - /@next/swc-android-arm-eabi/13.0.2: - resolution: {integrity: sha512-X54UQCTFyOGnJP//Z71dPPlp4BCYcQL2ncikKXQcPzVpqPs4C3m+tKC8ivBNH6edAXkppwsLRz1/yQwgSZ9Swg==} + /@next/swc-android-arm-eabi/13.0.3-canary.2: + resolution: {integrity: sha512-ZZG0C+P4czfq5Zyhdouacb3w73w/iOj4KidWCpWlYfTnxlMinPoEDk04xFg5iR665ePlS2mrBnj2OfhckYcFdQ==} engines: {node: '>= 10'} cpu: [arm] os: [android] @@ -1507,8 +1507,8 @@ packages: requiresBuild: true optional: true - /@next/swc-android-arm64/12.3.2-canary.39: - resolution: {integrity: sha512-d06+gveVZKCKGuryAqPXG+XWMw2gmDVnuAA0HasOtz5t/GO9BjAFAf0eTm/26ooInsnzQ14fDGBL6G532NPCVw==} + /@next/swc-android-arm64/13.0.2: + resolution: {integrity: sha512-1P00Kv8uKaLubqo7JzPrTqgFAzSOmfb8iwqJrOb9in5IvTRtNGlkR4hU0sXzqbQNM/+SaYxze6Z5ry1IDyb/cQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] @@ -1516,8 +1516,8 @@ packages: dev: false optional: true - /@next/swc-android-arm64/13.0.2: - resolution: {integrity: sha512-1P00Kv8uKaLubqo7JzPrTqgFAzSOmfb8iwqJrOb9in5IvTRtNGlkR4hU0sXzqbQNM/+SaYxze6Z5ry1IDyb/cQ==} + /@next/swc-android-arm64/13.0.3-canary.2: + resolution: {integrity: sha512-0Nw4n6Eox1cCp0d9BJ5GQDgW2+8JxoF5asdOdN0E1a6ayygOfsXN/GP3VWcrpLSrx6K1XUO+lgBbCbaOjvnoxA==} engines: {node: '>= 10'} cpu: [arm64] os: [android] @@ -1533,8 +1533,8 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-arm64/12.3.2-canary.39: - resolution: {integrity: sha512-6O8R3DzHOJXNxsKm4FImrJWCKW1Pr/l0KaDDq7pXsyXj56SZ7D0hW1HHi4uungqEyYU/9duyb30lxci0Ff7dTQ==} + /@next/swc-darwin-arm64/13.0.2: + resolution: {integrity: sha512-1zGIOkInkOLRv0QQGZ+3wffYsyKI4vIy62LYTvDWUn7TAYqnmXwougp9NSLqDeagLwgsv2URrykyAFixA/YqxA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1542,8 +1542,8 @@ packages: dev: false optional: true - /@next/swc-darwin-arm64/13.0.2: - resolution: {integrity: sha512-1zGIOkInkOLRv0QQGZ+3wffYsyKI4vIy62LYTvDWUn7TAYqnmXwougp9NSLqDeagLwgsv2URrykyAFixA/YqxA==} + /@next/swc-darwin-arm64/13.0.3-canary.2: + resolution: {integrity: sha512-TkSQVEEcmCfbzotHNHGWe1PkiZZkKPg4QWylZYv8UDfRUwJwR94aJeriOqlGOTkKQ/6a+ulJrVgs50/5gTTIHg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1559,8 +1559,8 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-x64/12.3.2-canary.39: - resolution: {integrity: sha512-9aDXGT4Jl5fq5JOZrmBGHKgkOipYms3dUV/oOCS3CcvuWSetnTUWHQ6oKZCWRf/eF/SI3wjW5zCO7WQHSxZWNQ==} + /@next/swc-darwin-x64/13.0.2: + resolution: {integrity: sha512-ECDAjoMP1Y90cARaelS6X+k6BQx+MikAYJ8f/eaJrLur44NIOYc9HA/dgcTp5jenguY4yT8V+HCquLjAVle6fA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1568,8 +1568,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64/13.0.2: - resolution: {integrity: sha512-ECDAjoMP1Y90cARaelS6X+k6BQx+MikAYJ8f/eaJrLur44NIOYc9HA/dgcTp5jenguY4yT8V+HCquLjAVle6fA==} + /@next/swc-darwin-x64/13.0.3-canary.2: + resolution: {integrity: sha512-hGCarEZsaSdOWtJOUJc4Sr3oRzUjlI/G+qlyMkaceSTyYx4Xu2/OmDS1fCWxoltlimiHmlJpLnGGaxUgrZ8dkQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1585,8 +1585,8 @@ packages: requiresBuild: true optional: true - /@next/swc-freebsd-x64/12.3.2-canary.39: - resolution: {integrity: sha512-v6trxd39yJgzUB19kbvxMQZoYk5xsniIPwcABHZs43YkBOGgPeCR9AevHRNUbhBCIPaOv3Sv/GIOM3onapXULw==} + /@next/swc-freebsd-x64/13.0.2: + resolution: {integrity: sha512-2DcL/ofQdBnQX3IoI9sjlIAyLCD1oZoUBuhrhWbejvBQjutWrI0JTEv9uG69WcxWhVMm3BCsjv8GK2/68OKp7A==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] @@ -1594,8 +1594,8 @@ packages: dev: false optional: true - /@next/swc-freebsd-x64/13.0.2: - resolution: {integrity: sha512-2DcL/ofQdBnQX3IoI9sjlIAyLCD1oZoUBuhrhWbejvBQjutWrI0JTEv9uG69WcxWhVMm3BCsjv8GK2/68OKp7A==} + /@next/swc-freebsd-x64/13.0.3-canary.2: + resolution: {integrity: sha512-R7WFI/whtuSB6gxmzgqFzeKbrhuSp3ut0GaQK+kvb7NUnFe9xABUksdxEU8bORjVJaADgDsCsCHSsHGqHHl7Mg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] @@ -1611,8 +1611,8 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm-gnueabihf/12.3.2-canary.39: - resolution: {integrity: sha512-yb61Dfaq86MyYWRjrC5vilWQphmCNB1V2mtUtaV4gEJgoDfFa2lLVPceJkjcvwet2SqnyZepZb8q35Czki3U9A==} + /@next/swc-linux-arm-gnueabihf/13.0.2: + resolution: {integrity: sha512-Y3OQF1CSBSWW2vGkmvOIuOUNqOq8qX7f1ZpcKUVWP3/Uq++DZmVi9d18lgnSe1I3QFqc+nXWyun9ljsN83j0sw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -1620,8 +1620,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm-gnueabihf/13.0.2: - resolution: {integrity: sha512-Y3OQF1CSBSWW2vGkmvOIuOUNqOq8qX7f1ZpcKUVWP3/Uq++DZmVi9d18lgnSe1I3QFqc+nXWyun9ljsN83j0sw==} + /@next/swc-linux-arm-gnueabihf/13.0.3-canary.2: + resolution: {integrity: sha512-RzYf+MTdP8Rvz/fijlxsTP+1S24ziMtCtzq2Ui8Qjg7VIfD9sEuLmMQJpm0k/FscduQdZILoG+QNhD2oW893Wg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -1634,22 +1634,20 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true optional: true - /@next/swc-linux-arm64-gnu/12.3.2-canary.39: - resolution: {integrity: sha512-nNS106Tharm1NFP2KfKUwEziwlUIYi7Xp2fqtW8F7CcpCjB+Wwe6o0vfV7Qyv13Y3FcEL2oM24Ikv+XG2bVh3w==} + /@next/swc-linux-arm64-gnu/13.0.2: + resolution: {integrity: sha512-mNyzwsFF6kwZYEjnGicx9ksDZYEZvyzEc1BtCu8vdZi/v8UeixQwCiAT6FyYX9uxMPEkzk8qiU0t0u9gvltsKw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] requiresBuild: true dev: false optional: true - /@next/swc-linux-arm64-gnu/13.0.2: - resolution: {integrity: sha512-mNyzwsFF6kwZYEjnGicx9ksDZYEZvyzEc1BtCu8vdZi/v8UeixQwCiAT6FyYX9uxMPEkzk8qiU0t0u9gvltsKw==} + /@next/swc-linux-arm64-gnu/13.0.3-canary.2: + resolution: {integrity: sha512-8TF9UxIAZuQNf4fkyfZ1LcrqqvRI2Li0V2IO0CiCx4wg6xDqBjMH3IZoRwgY3yJ8UxdrFWf8Ec1q2WBYXcODgQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1662,22 +1660,20 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true optional: true - /@next/swc-linux-arm64-musl/12.3.2-canary.39: - resolution: {integrity: sha512-hUz4ArM9SgJaydAUAe+sEKaAf4/Xo/u8rqK/64CQai3q0MwwVcABqRCZNv3rBrBs95sLZnz0F0LdT/wC+lMUTQ==} + /@next/swc-linux-arm64-musl/13.0.2: + resolution: {integrity: sha512-M6SdYjWgRrY3tJBxz0663zCRPTu5BRONmxlftKWWHv9LjAJ59neTLaGj4rp0A08DkJglZIoCkLOzLrzST6TGag==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] requiresBuild: true dev: false optional: true - /@next/swc-linux-arm64-musl/13.0.2: - resolution: {integrity: sha512-M6SdYjWgRrY3tJBxz0663zCRPTu5BRONmxlftKWWHv9LjAJ59neTLaGj4rp0A08DkJglZIoCkLOzLrzST6TGag==} + /@next/swc-linux-arm64-musl/13.0.3-canary.2: + resolution: {integrity: sha512-Ll2nV3pbCi3qL9o+6zxEuQAqqk8yPLk1TJ7+G8fTmm1vpjMjdV8eBiXiZVGyweRBhurhHmeSdh9JtpUFuPvDRA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1690,22 +1686,20 @@ packages: engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true optional: true - /@next/swc-linux-x64-gnu/12.3.2-canary.39: - resolution: {integrity: sha512-NKEGKviQrAYfbFvc+HAMMtC4rcH2C5W8pxUkmiFEdq14mLwL+UGf/CAxRUVswRhwsphGiROUHsZ6TNLCVzY26w==} + /@next/swc-linux-x64-gnu/13.0.2: + resolution: {integrity: sha512-pi63RoxvG4ES1KS06Zpm0MATVIXTs/TIbLbdckeLoM40u1d3mQl/+hSSrLRSxzc2OtyL8fh92sM4gkJrQXAMAw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] requiresBuild: true dev: false optional: true - /@next/swc-linux-x64-gnu/13.0.2: - resolution: {integrity: sha512-pi63RoxvG4ES1KS06Zpm0MATVIXTs/TIbLbdckeLoM40u1d3mQl/+hSSrLRSxzc2OtyL8fh92sM4gkJrQXAMAw==} + /@next/swc-linux-x64-gnu/13.0.3-canary.2: + resolution: {integrity: sha512-TARNMLz9+Ab2rEiuk/ulYULLDWw6zMc4yH2vFXdwckod9tWUyxptAMUz2umtKwyf6lmYUv4+IfZPJgUs0lr5Bw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1718,22 +1712,20 @@ packages: engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true optional: true - /@next/swc-linux-x64-musl/12.3.2-canary.39: - resolution: {integrity: sha512-fmJqtRbsoa4Wz8iFrN1PmNR+KrreRC2JDAw7QAqP1WDMMesGy+UJim+nkXQU9HmbM7clMec3CV3tMQJSWGOOQQ==} + /@next/swc-linux-x64-musl/13.0.2: + resolution: {integrity: sha512-9Pv91gfYnDONgjtRm78n64b/c54+azeHtlnqBLTnIFWSMBDRl1/WDkhKWIj3fBGPLimtK7Tko3ULR3og9RRUPw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] requiresBuild: true dev: false optional: true - /@next/swc-linux-x64-musl/13.0.2: - resolution: {integrity: sha512-9Pv91gfYnDONgjtRm78n64b/c54+azeHtlnqBLTnIFWSMBDRl1/WDkhKWIj3fBGPLimtK7Tko3ULR3og9RRUPw==} + /@next/swc-linux-x64-musl/13.0.3-canary.2: + resolution: {integrity: sha512-Wbd1Ufm9NRSf+xl9kOfe5St06xHN1DHT0KrQc+cT2QKn9ZavASM/Vu2PM3gt4T/2Gqdv663WdbpEuX97wn3abQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1749,8 +1741,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-arm64-msvc/12.3.2-canary.39: - resolution: {integrity: sha512-10E99UsGOeazTR9K6SdVdBlpjUjwFTJtPvhnNFKCdc/5SlevWmG44V/1Q8MrYwrBeX9Iq5puV/qLw2W0a00EPA==} + /@next/swc-win32-arm64-msvc/13.0.2: + resolution: {integrity: sha512-Nvewe6YZaizAkGHHprbMkYqQulBjZCHKBGKeFPwoPtOA+a2Qi4pZzc/qXFyC5/2A6Z0mr2U1zg9rd04WBYMwBw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1758,8 +1750,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc/13.0.2: - resolution: {integrity: sha512-Nvewe6YZaizAkGHHprbMkYqQulBjZCHKBGKeFPwoPtOA+a2Qi4pZzc/qXFyC5/2A6Z0mr2U1zg9rd04WBYMwBw==} + /@next/swc-win32-arm64-msvc/13.0.3-canary.2: + resolution: {integrity: sha512-d/SiJzQvm+ggFhCBly4VuOUio0OXx5NKLabSw9AcxEK11/V6YGEFNVdPw1q059/eBi3S0mlRBBnowKuJiWGbtg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1775,8 +1767,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-ia32-msvc/12.3.2-canary.39: - resolution: {integrity: sha512-GOXTzykYyLIm0Al2grImtyAhg75HwIGHtiQBpS1TL3ggUvCOeTOa5M25FQ/wqTN/yoPxR5k1nTiS8l+nhTN97Q==} + /@next/swc-win32-ia32-msvc/13.0.2: + resolution: {integrity: sha512-ZUBYGZw5G3QrqDpRq1EWi3aHmvPZM8ijK5TFL6UbH16cYQ0JpANmuG2P66KB93Qe/lWWzbeAZk/tj1XqwoCuPA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -1784,8 +1776,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc/13.0.2: - resolution: {integrity: sha512-ZUBYGZw5G3QrqDpRq1EWi3aHmvPZM8ijK5TFL6UbH16cYQ0JpANmuG2P66KB93Qe/lWWzbeAZk/tj1XqwoCuPA==} + /@next/swc-win32-ia32-msvc/13.0.3-canary.2: + resolution: {integrity: sha512-HytAShDnSnY1FkCpsy+t2V09H1Z9ydeZeg8QrLwub26bPWAcDZe77ECVR4rdIHqP4KHBwtAOM8UIZWrexlLggw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -1801,8 +1793,8 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-x64-msvc/12.3.2-canary.39: - resolution: {integrity: sha512-+Vw0q2S56BoZCnURAAz0wlHU8WKMreJfoIqGecTT4JWarvfdzReRxKhUUt3N0AEhaYtj5t6IQZtM5HWJUdj8Sg==} + /@next/swc-win32-x64-msvc/13.0.2: + resolution: {integrity: sha512-fA9uW1dm7C0mEYGcKlbmLcVm2sKcye+1kPxh2cM4jVR+kQQMtHWsjIzeSpe2grQLSDan06z4n6hbr8b1c3hA8w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1810,8 +1802,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc/13.0.2: - resolution: {integrity: sha512-fA9uW1dm7C0mEYGcKlbmLcVm2sKcye+1kPxh2cM4jVR+kQQMtHWsjIzeSpe2grQLSDan06z4n6hbr8b1c3hA8w==} + /@next/swc-win32-x64-msvc/13.0.3-canary.2: + resolution: {integrity: sha512-TPH7wQSLXbeWuwkGFASMkCmE2Q7Tt/S8gTOgC0Y4rJf1yw5K+YtubTZKmmEZ13Aq+fQtqg3NkPO9Rrq4OZpuGw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -8541,15 +8533,15 @@ packages: - babel-plugin-macros dev: false - /next/12.3.2-canary.39_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-SgnwdQ2dM3i7Ljhubh6YMquXevYnmDPgZIBnG8yKH8pwVnibaRGsMwZyw5rNRp2a0qWxs+9bi4j+yUEYBVSKnA==} - engines: {node: '>=14.0.0'} + /next/13.0.2_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-uQ5z5e4D9mOe8+upy6bQdYYjo/kk1v3jMW87kTy2TgAyAsEO+CkwRnMgyZ4JoHEnhPZLHwh7dk0XymRNLe1gFw==} + engines: {node: '>=14.6.0'} hasBin: true peerDependencies: fibers: '>= 3.1.0' node-sass: ^6.0.0 || ^7.0.0 - react: ^18.0.0-0 - react-dom: ^18.0.0-0 + react: ^18.2.0 + react-dom: ^18.2.0 sass: ^1.3.0 peerDependenciesMeta: fibers: @@ -8559,35 +8551,35 @@ packages: sass: optional: true dependencies: - '@next/env': 12.3.2-canary.39 + '@next/env': 13.0.2 '@swc/helpers': 0.4.11 - caniuse-lite: 1.0.30001420 + caniuse-lite: 1.0.30001431 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 styled-jsx: 5.1.0_react@18.2.0 use-sync-external-store: 1.2.0_react@18.2.0 optionalDependencies: - '@next/swc-android-arm-eabi': 12.3.2-canary.39 - '@next/swc-android-arm64': 12.3.2-canary.39 - '@next/swc-darwin-arm64': 12.3.2-canary.39 - '@next/swc-darwin-x64': 12.3.2-canary.39 - '@next/swc-freebsd-x64': 12.3.2-canary.39 - '@next/swc-linux-arm-gnueabihf': 12.3.2-canary.39 - '@next/swc-linux-arm64-gnu': 12.3.2-canary.39 - '@next/swc-linux-arm64-musl': 12.3.2-canary.39 - '@next/swc-linux-x64-gnu': 12.3.2-canary.39 - '@next/swc-linux-x64-musl': 12.3.2-canary.39 - '@next/swc-win32-arm64-msvc': 12.3.2-canary.39 - '@next/swc-win32-ia32-msvc': 12.3.2-canary.39 - '@next/swc-win32-x64-msvc': 12.3.2-canary.39 + '@next/swc-android-arm-eabi': 13.0.2 + '@next/swc-android-arm64': 13.0.2 + '@next/swc-darwin-arm64': 13.0.2 + '@next/swc-darwin-x64': 13.0.2 + '@next/swc-freebsd-x64': 13.0.2 + '@next/swc-linux-arm-gnueabihf': 13.0.2 + '@next/swc-linux-arm64-gnu': 13.0.2 + '@next/swc-linux-arm64-musl': 13.0.2 + '@next/swc-linux-x64-gnu': 13.0.2 + '@next/swc-linux-x64-musl': 13.0.2 + '@next/swc-win32-arm64-msvc': 13.0.2 + '@next/swc-win32-ia32-msvc': 13.0.2 + '@next/swc-win32-x64-msvc': 13.0.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /next/13.0.2_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-uQ5z5e4D9mOe8+upy6bQdYYjo/kk1v3jMW87kTy2TgAyAsEO+CkwRnMgyZ4JoHEnhPZLHwh7dk0XymRNLe1gFw==} + /next/13.0.3-canary.2_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-Qr19ElEa+ljqu56t4AoiZ6uld7jvMa9KbDFhXBcKQQ4/DaRGvLsoWDw9l3QADBhsFSegAon0NE7eI1IAP+M1pQ==} engines: {node: '>=14.6.0'} hasBin: true peerDependencies: @@ -8604,7 +8596,7 @@ packages: sass: optional: true dependencies: - '@next/env': 13.0.2 + '@next/env': 13.0.3-canary.2 '@swc/helpers': 0.4.11 caniuse-lite: 1.0.30001431 postcss: 8.4.14 @@ -8613,19 +8605,19 @@ packages: styled-jsx: 5.1.0_react@18.2.0 use-sync-external-store: 1.2.0_react@18.2.0 optionalDependencies: - '@next/swc-android-arm-eabi': 13.0.2 - '@next/swc-android-arm64': 13.0.2 - '@next/swc-darwin-arm64': 13.0.2 - '@next/swc-darwin-x64': 13.0.2 - '@next/swc-freebsd-x64': 13.0.2 - '@next/swc-linux-arm-gnueabihf': 13.0.2 - '@next/swc-linux-arm64-gnu': 13.0.2 - '@next/swc-linux-arm64-musl': 13.0.2 - '@next/swc-linux-x64-gnu': 13.0.2 - '@next/swc-linux-x64-musl': 13.0.2 - '@next/swc-win32-arm64-msvc': 13.0.2 - '@next/swc-win32-ia32-msvc': 13.0.2 - '@next/swc-win32-x64-msvc': 13.0.2 + '@next/swc-android-arm-eabi': 13.0.3-canary.2 + '@next/swc-android-arm64': 13.0.3-canary.2 + '@next/swc-darwin-arm64': 13.0.3-canary.2 + '@next/swc-darwin-x64': 13.0.3-canary.2 + '@next/swc-freebsd-x64': 13.0.3-canary.2 + '@next/swc-linux-arm-gnueabihf': 13.0.3-canary.2 + '@next/swc-linux-arm64-gnu': 13.0.3-canary.2 + '@next/swc-linux-arm64-musl': 13.0.3-canary.2 + '@next/swc-linux-x64-gnu': 13.0.3-canary.2 + '@next/swc-linux-x64-musl': 13.0.3-canary.2 + '@next/swc-win32-arm64-msvc': 13.0.3-canary.2 + '@next/swc-win32-ia32-msvc': 13.0.3-canary.2 + '@next/swc-win32-x64-msvc': 13.0.3-canary.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros