-
Notifications
You must be signed in to change notification settings - Fork 30.3k
[Turbopack] Move DirList to its own module #88256
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
1 similar comment
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
Stats from current PR✅ No significant changes detected📊 All Metrics📖 Metrics GlossaryDev Server Metrics:
Build Metrics:
Change Thresholds:
⚡ Dev Server
📦 Dev Server (Webpack) (Legacy)📦 Dev Server (Webpack)
⚡ Production Builds
📦 Production Builds (Webpack) (Legacy)📦 Production Builds (Webpack)
📦 Bundle SizesBundle Sizes⚡ TurbopackClient Main Bundles: **431 kB** → **431 kB**
|
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 785 B | 788 B | ✓ |
| Total | 785 B | 788 B |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 451 B | 451 B | ✓ |
| Total | 451 B | 451 B | ✓ |
📦 Webpack
Client
Main Bundles
| Canary | PR | Change | |
|---|---|---|---|
| 2086.HASH.js gzip | 169 B | N/A | - |
| 2161-HASH.js gzip | 5.4 kB | N/A | - |
| 2747-HASH.js gzip | 4.48 kB | N/A | - |
| 4322-HASH.js gzip | 52.7 kB | N/A | - |
| ec793fe8-HASH.js gzip | 62.3 kB | N/A | - |
| framework-HASH.js gzip | 59.8 kB | 59.8 kB | ✓ |
| main-app-HASH.js gzip | 251 B | 254 B | 🔴 +3 B (+1%) |
| main-HASH.js gzip | 38.6 kB | 38.9 kB | ✓ |
| webpack-HASH.js gzip | 1.68 kB | 1.68 kB | ✓ |
| 1596.HASH.js gzip | N/A | 169 B | - |
| 2658-HASH.js gzip | N/A | 52.5 kB | - |
| 6349-HASH.js gzip | N/A | 4.46 kB | - |
| 7019-HASH.js gzip | N/A | 5.42 kB | - |
| b17a3386-HASH.js gzip | N/A | 62.3 kB | - |
| Total | 225 kB | 225 kB |
Polyfills
| Canary | PR | Change | |
|---|---|---|---|
| polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
| Total | 39.4 kB | 39.4 kB | ✓ |
Pages
| Canary | PR | Change | |
|---|---|---|---|
| _app-HASH.js gzip | 194 B | 193 B | ✓ |
| _error-HASH.js gzip | 182 B | 182 B | ✓ |
| css-HASH.js gzip | 336 B | 335 B | ✓ |
| dynamic-HASH.js gzip | 1.8 kB | 1.8 kB | ✓ |
| edge-ssr-HASH.js gzip | 256 B | 256 B | ✓ |
| head-HASH.js gzip | 352 B | 349 B | ✓ |
| hooks-HASH.js gzip | 385 B | 384 B | ✓ |
| image-HASH.js gzip | 580 B | 580 B | ✓ |
| index-HASH.js gzip | 259 B | 258 B | ✓ |
| link-HASH.js gzip | 2.5 kB | 2.51 kB | ✓ |
| routerDirect..HASH.js gzip | 319 B | 317 B | ✓ |
| script-HASH.js gzip | 385 B | 387 B | ✓ |
| withRouter-HASH.js gzip | 316 B | 315 B | ✓ |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Total | 7.97 kB | 7.96 kB | ✅ -8 B |
Server
Edge SSR
| Canary | PR | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 124 kB | 124 kB | ✓ |
| page.js gzip | 240 kB | 241 kB | ✓ |
| Total | 364 kB | 365 kB |
Middleware
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 653 B | 654 B | ✓ |
| middleware-r..fest.js gzip | 155 B | 156 B | ✓ |
| middleware.js gzip | 32.8 kB | 32.9 kB | ✓ |
| edge-runtime..pack.js gzip | 842 B | 842 B | ✓ |
| Total | 34.5 kB | 34.5 kB |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 738 B | 738 B | ✓ |
| Total | 738 B | 738 B | ✓ |
Build Cache
| Canary | PR | Change | |
|---|---|---|---|
| 0.pack gzip | 3.63 MB | 3.64 MB | 🔴 +9.76 kB (+0%) |
| index.pack gzip | 99.3 kB | 99 kB | ✓ |
| index.pack.old gzip | 98.6 kB | 99.6 kB | 🔴 +992 B (+1%) |
| Total | 3.83 MB | 3.84 MB |
🔄 Shared (bundler-independent)
Runtimes
| Canary | PR | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 303 kB | 303 kB | ✓ |
| app-page-exp..prod.js gzip | 158 kB | 158 kB | ✓ |
| app-page-tur...dev.js gzip | 303 kB | 303 kB | ✓ |
| app-page-tur..prod.js gzip | 158 kB | 158 kB | ✓ |
| app-page-tur...dev.js gzip | 299 kB | 299 kB | ✓ |
| app-page-tur..prod.js gzip | 156 kB | 156 kB | ✓ |
| app-page.run...dev.js gzip | 300 kB | 300 kB | ✓ |
| app-page.run..prod.js gzip | 156 kB | 156 kB | ✓ |
| app-route-ex...dev.js gzip | 68.7 kB | 68.7 kB | ✓ |
| app-route-ex..prod.js gzip | 47.5 kB | 47.5 kB | ✓ |
| app-route-tu...dev.js gzip | 68.7 kB | 68.7 kB | ✓ |
| app-route-tu..prod.js gzip | 47.6 kB | 47.6 kB | ✓ |
| app-route-tu...dev.js gzip | 68.3 kB | 68.3 kB | ✓ |
| app-route-tu..prod.js gzip | 47.3 kB | 47.3 kB | ✓ |
| app-route.ru...dev.js gzip | 68.3 kB | 68.3 kB | ✓ |
| app-route.ru..prod.js gzip | 47.3 kB | 47.3 kB | ✓ |
| dist_client_...dev.js gzip | 324 B | 324 B | ✓ |
| dist_client_...dev.js gzip | 326 B | 326 B | ✓ |
| dist_client_...dev.js gzip | 318 B | 318 B | ✓ |
| dist_client_...dev.js gzip | 317 B | 317 B | ✓ |
| pages-api-tu...dev.js gzip | 41.1 kB | 41.1 kB | ✓ |
| pages-api-tu..prod.js gzip | 31.2 kB | 31.2 kB | ✓ |
| pages-api.ru...dev.js gzip | 41 kB | 41 kB | ✓ |
| pages-api.ru..prod.js gzip | 31.2 kB | 31.2 kB | ✓ |
| pages-turbo....dev.js gzip | 50.8 kB | 50.8 kB | ✓ |
| pages-turbo...prod.js gzip | 38.2 kB | 38.2 kB | ✓ |
| pages.runtim...dev.js gzip | 50.7 kB | 50.7 kB | ✓ |
| pages.runtim..prod.js gzip | 38.2 kB | 38.2 kB | ✓ |
| server.runti..prod.js gzip | 62.2 kB | 62.2 kB | ✓ |
| Total | 2.68 MB | 2.68 MB | ✅ -2 B |
| if let DirectoryEntry::File(path) = entry { | ||
| if let Some(relative_path) = root_val.get_relative_path_to(path) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To make the linter happy:
| if let DirectoryEntry::File(path) = entry { | |
| if let Some(relative_path) = root_val.get_relative_path_to(path) { | |
| if let DirectoryEntry::File(path) = entry && Some(relative_path) = root_val.get_relative_path_to(path) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Took an equivalent approach, early return with continue
20433ca to
e44e021
Compare
I'm expanding DirList to be used in multiple references (require.context, import.meta.glob). This breaks it out into its own module, and changes the filter param to be an enum. I also added some sanity tests for both filters, but there's room to expand to more test cases.
e44e021 to
1969e56
Compare
CodSpeed Performance ReportMerging this PR will not alter performanceComparing Summary
Footnotes
|
| #[turbo_tasks::function] | ||
| async fn flatten(self: Vc<Self>) -> Result<Vc<FlatDirList>> { | ||
| let this = self.await?; | ||
|
|
||
| let mut queue = VecDeque::from([this]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| #[turbo_tasks::function] | |
| async fn flatten(self: Vc<Self>) -> Result<Vc<FlatDirList>> { | |
| let this = self.await?; | |
| let mut queue = VecDeque::from([this]); | |
| #[turbo_tasks::function] | |
| async fn flatten(&self) -> Result<Vc<FlatDirList>> { | |
| let mut queue = VecDeque::from([self]); |
This reverts commit d90847d.
DirList is how require.context internally represents a list of files matching a requested pattern. I'd like to be able to re-use it for import.meta.glob as well, with a few tweaks. Most of this diff is just breaking it out into its own module.
The filter used to be an EsRegex. It's now an enum, with a possible Glob variant. In either path, it takes a pattern and finds file paths that match it.
I also added some sanity tests for both filters, but there's definitely room to expand to more test cases.