perf(@angular/build): key Sass package resolutions without containing URL qualification - #34069
Open
alan-agius4 wants to merge 1 commit into
Open
perf(@angular/build): key Sass package resolutions without containing URL qualification#34069alan-agius4 wants to merge 1 commit into
alan-agius4 wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces a new helper function isPackageUrl in sass-language.ts to identify package URLs, including pkg: schemes and bare specifiers, while excluding relative and absolute paths. The compileString function is updated to utilize this helper, enabling an early return when a URL is not a package and simplifying the cache key for currentPackageRootCache to use only the package name. Additionally, a comprehensive set of unit tests for isPackageUrl has been added in a new spec file. There are no review comments, and I have no feedback to provide.
… URL qualification Previously, only pkg: URLs were treated as package specifiers when constructing the Sass resolutionCache key. Bare package specifiers such as @angular/material were qualified with the importing file's containing URL, resulting in cache misses across different component stylesheets. Additionally, packageRootCache was also unnecessarily qualified with the containing URL. Package specifiers are now detected and cached without containing URL qualification, allowing package resolutions and package roots to be shared across all stylesheets.
alan-agius4
force-pushed
the
perf/sass-package-cache-keying
branch
from
September 10, 2026 15:21
2586ae8 to
365375f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Checklist
Please check to confirm your PR fulfills the following requirements:
PR Type
What kind of change does this PR introduce?
What is the current behavior?
Previously, only `pkg:` URLs were treated as package specifiers when constructing the Sass `resolutionCache` key. Bare package specifiers such as `@angular/material` or `@material/*` were qualified with the importing file's containing URL (`options.containingUrl`), resulting in a 0% cache hit rate across different component stylesheets. Additionally, `packageRootCache` was also unnecessarily qualified with the containing URL.
Issue Number: N/A
What is the new behavior?
Package specifiers (both `pkg:` and bare specifiers) are now detected via `isPackageUrl` and cached by specifier without containing URL qualification. Similarly, `packageRootCache` is keyed directly by `packageName`. This allows package resolutions and package roots to be properly shared across all component stylesheets.
Does this PR introduce a breaking change?
Other information