make less things to rely on HashSet and HashMap order
This commit is contained in:
parent
4760f0dbfd
commit
79ea25f491
2 changed files with 41 additions and 28 deletions
|
@ -5,7 +5,7 @@ use std::{
|
||||||
|
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use futures::{stream::FuturesUnordered, TryStreamExt};
|
use futures::{stream::FuturesUnordered, TryStreamExt};
|
||||||
use indexmap::IndexMap;
|
use indexmap::{IndexMap, IndexSet};
|
||||||
use mime::TEXT_HTML_UTF_8;
|
use mime::TEXT_HTML_UTF_8;
|
||||||
pub use node_rendered_source::{create_node_rendered_source, NodeRenderer, NodeRendererVc};
|
pub use node_rendered_source::{create_node_rendered_source, NodeRenderer, NodeRendererVc};
|
||||||
use serde_json::Value as JsonValue;
|
use serde_json::Value as JsonValue;
|
||||||
|
@ -125,8 +125,10 @@ async fn separate_assets(
|
||||||
};
|
};
|
||||||
queue.push(process_asset(intermediate_asset));
|
queue.push(process_asset(intermediate_asset));
|
||||||
let mut processed = HashSet::new();
|
let mut processed = HashSet::new();
|
||||||
let mut internal_assets = HashSet::new();
|
let mut internal_assets = IndexSet::new();
|
||||||
let mut external_asset_entrypoints = HashSet::new();
|
let mut external_asset_entrypoints = IndexSet::new();
|
||||||
|
// TODO(sokra) This is not deterministic, since it's using FuturesUnordered.
|
||||||
|
// This need to be fixed!
|
||||||
while let Some(item) = queue.try_next().await? {
|
while let Some(item) = queue.try_next().await? {
|
||||||
match item {
|
match item {
|
||||||
Type::Internal(asset, assets) => {
|
Type::Internal(asset, assets) => {
|
||||||
|
|
|
@ -249,7 +249,8 @@ async fn create_server_rendered_source_for_directory(
|
||||||
let mut predefined_sources = vec![];
|
let mut predefined_sources = vec![];
|
||||||
let mut named_placeholder_sources = vec![];
|
let mut named_placeholder_sources = vec![];
|
||||||
let mut catch_all_sources = vec![];
|
let mut catch_all_sources = vec![];
|
||||||
if let DirectoryContent::Entries(entries) = &*input_dir.read_dir().await? {
|
let dir_content = input_dir.read_dir().await?;
|
||||||
|
if let DirectoryContent::Entries(entries) = &*dir_content {
|
||||||
for (name, entry) in entries.iter() {
|
for (name, entry) in entries.iter() {
|
||||||
let sources = if name.starts_with("[[") || name.starts_with("[...") {
|
let sources = if name.starts_with("[[") || name.starts_with("[...") {
|
||||||
&mut catch_all_sources
|
&mut catch_all_sources
|
||||||
|
@ -260,28 +261,31 @@ async fn create_server_rendered_source_for_directory(
|
||||||
};
|
};
|
||||||
match entry {
|
match entry {
|
||||||
DirectoryEntry::File(file) => {
|
DirectoryEntry::File(file) => {
|
||||||
if let Some((name, extension)) = name.rsplit_once('.') {
|
if let Some((basename, extension)) = name.rsplit_once('.') {
|
||||||
match extension {
|
match extension {
|
||||||
// pageExtensions option from next.js
|
// pageExtensions option from next.js
|
||||||
// defaults: https://github.com/vercel/next.js/blob/611e13f5159457fedf96d850845650616a1f75dd/packages/next/server/config-shared.ts#L499
|
// defaults: https://github.com/vercel/next.js/blob/611e13f5159457fedf96d850845650616a1f75dd/packages/next/server/config-shared.ts#L499
|
||||||
"js" | "ts" | "jsx" | "tsx" => {
|
"js" | "ts" | "jsx" | "tsx" => {
|
||||||
let (dev_server_path, intermediate_output_path) = if name == "index"
|
let (dev_server_path, intermediate_output_path) =
|
||||||
{
|
if basename == "index" {
|
||||||
(server_path.join("index.html"), intermediate_output_path)
|
(server_path.join("index.html"), intermediate_output_path)
|
||||||
} else {
|
} else {
|
||||||
(
|
(
|
||||||
server_path.join(name).join("index.html"),
|
server_path.join(basename).join("index.html"),
|
||||||
intermediate_output_path.join(name),
|
intermediate_output_path.join(basename),
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
sources.push(create_server_rendered_source_for_file(
|
sources.push((
|
||||||
context_path,
|
name,
|
||||||
context,
|
create_server_rendered_source_for_file(
|
||||||
*file,
|
context_path,
|
||||||
runtime_entries,
|
context,
|
||||||
server_root,
|
*file,
|
||||||
dev_server_path,
|
runtime_entries,
|
||||||
intermediate_output_path,
|
server_root,
|
||||||
|
dev_server_path,
|
||||||
|
intermediate_output_path,
|
||||||
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
|
@ -289,7 +293,8 @@ async fn create_server_rendered_source_for_directory(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DirectoryEntry::Directory(dir) => {
|
DirectoryEntry::Directory(dir) => {
|
||||||
sources.push(
|
sources.push((
|
||||||
|
name,
|
||||||
create_server_rendered_source_for_directory(
|
create_server_rendered_source_for_directory(
|
||||||
context_path,
|
context_path,
|
||||||
context,
|
context,
|
||||||
|
@ -300,17 +305,23 @@ async fn create_server_rendered_source_for_directory(
|
||||||
intermediate_output_path.join(name),
|
intermediate_output_path.join(name),
|
||||||
)
|
)
|
||||||
.into(),
|
.into(),
|
||||||
);
|
));
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let mut ordered_sources = predefined_sources;
|
predefined_sources.sort_by_key(|(k, _)| *k);
|
||||||
ordered_sources.append(&mut named_placeholder_sources);
|
named_placeholder_sources.sort_by_key(|(k, _)| *k);
|
||||||
ordered_sources.append(&mut catch_all_sources);
|
catch_all_sources.sort_by_key(|(k, _)| *k);
|
||||||
|
|
||||||
Ok(CombinedContentSource {
|
Ok(CombinedContentSource {
|
||||||
sources: ordered_sources,
|
sources: predefined_sources
|
||||||
|
.into_iter()
|
||||||
|
.chain(named_placeholder_sources.into_iter())
|
||||||
|
.chain(catch_all_sources.into_iter())
|
||||||
|
.map(|(_, v)| v)
|
||||||
|
.collect(),
|
||||||
}
|
}
|
||||||
.cell())
|
.cell())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue