Repository navigation
feat(remote): accept Angular's object form of outputPath - #198
Merged
Merged
Conversation
Aukevanoost
force-pushed
the
feat/remote-output-path
branch
from
October 28, 2026 13:10
ac13543 to
5aabdf0
Compare
Aukevanoost
force-pushed
the
feat/remote-output-path
branch
from
October 28, 2026 13:18
5aabdf0 to
14e22f8
Compare
Aukevanoost
added a commit
that referenced
this pull request
Oct 28, 2026
Backports 22.2.3..22.2.4 onto the Angular 21 layout. Incoming: - #167/#169: the dev server keeps federation externals out of the stylesheet build; Angular's ssr/prerender corrections reach serveWithVite. - #166/#168: context tsconfigs pass `types` resolved instead of widening typeRoots. - #173/#176/#186/#200: i18n translates every federation output, honours outputPath.browser, stays under the Windows command line limit, inlines the source locale only when requested and refreshes integrity hashes. - #187/#190: optional-peer entry points are skipped only when the peer is missing; @angular/localize is an optional peer. - #189/#195/#196: federation build results carry their entry; a path written twice is reported once. - #194: @softarc/native-federation ~4.9.0, orchestrator ^4.9.0. Angular 21 specific adaptations: - Checked the #167/#169 assumptions against @angular/build 21.2.24: serveWithVite reads externalDependencies and ssr back from the options it passed, and the stylesheet bundler uses externalDependencies, as on 22. - No // upstream: tags change (still angular-cli v21.2.19, 1a728258d6). - Skipped #188/#198 (remote builder): this branch has no remote builder. - Kept the internal builder without instrumentForCoverage; dropped it from the incoming spec. - Moved output-entries and the i18n integration spec into src/utils. - Skipped the `types: ["*"]` spec below TypeScript 6 (branch is on 5.9). - @angular/localize optional peer/devDependency at >=21.2.0/^21.2.0. - Kept the -v4 name, 21.2.16 version, ng21 pins and this branch's global pnpm overrides; main's vite 8 override doesn't apply to 21.2's vite 7. - pnpm-lock.yaml regenerated rather than merged.
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.
Part of #188 (point 3). Stacked on #197; review that first.
The remote builder always wrote to
<outputPath>/browser. It now also accepts Angular's object form,outputPath: { base, browser? }, asbuilddoes:<outputPath>/browser, so existing configs don't move.{ base }writes to<base>/browser, becausebrowserdefaults to'browser'as in Angular.{ base, browser: '' }writes directly intobase.serverandmediaare rejected by the schema: the remote builder writes neither.browsertakes the same folder-name pattern as in Angular's schema, so it can't contain/.The object form can resolve to the workspace root, for example
{ base: '.', browser: '' }. The oldrmSyncwould then have deleted the whole workspace. The builder now clears its output folder with Angular'sdeleteOutputDirfrom@angular/build/private. That function refuses the workspace root itself, as in Angular. It does not guard against other folders outside the workspace:base: '..'is still accepted, as Angular accepts it. It also empties the folder rather than deleting it, so mounted or symlinked output folders keep working. As before, the folder is cleared once, when the builder starts.Testing
output-path.spec.tscovers the default, a string,{ base }andbrowser: ''.pnpm typecheck,pnpm test(475 passing),pnpm lintandpnpm buildpass.