Skip to content

feat(remote): accept Angular's object form of outputPath - #198

Merged
Aukevanoost merged 2 commits into
fix/remote-plugins-exportfrom
feat/remote-output-path
Oct 28, 2026
Merged

Aukevanoost merged 2 commits into
fix/remote-plugins-exportfrom
feat/remote-output-path

Conversation

@Aukevanoost

@Aukevanoost Aukevanoost commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

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? }, as build does:

  • A string still writes to <outputPath>/browser, so existing configs don't move.
  • { base } writes to <base>/browser, because browser defaults to 'browser' as in Angular.
  • { base, browser: '' } writes directly into base.
  • Other keys such as server and media are rejected by the schema: the remote builder writes neither. browser takes 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 old rmSync would then have deleted the whole workspace. The builder now clears its output folder with Angular's deleteOutputDir from @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

  • New output-path.spec.ts covers the default, a string, { base } and browser: ''.
  • pnpm typecheck, pnpm test (475 passing), pnpm lint and pnpm build pass.

@Aukevanoost
Aukevanoost added this pull request to stack #199 October 28, 2026 12:20
@Aukevanoost
Aukevanoost force-pushed the feat/remote-output-path branch from ac13543 to 5aabdf0 Compare October 28, 2026 13:10
@Aukevanoost
Aukevanoost force-pushed the feat/remote-output-path branch from 5aabdf0 to 14e22f8 Compare October 28, 2026 13:18
@Aukevanoost
Aukevanoost merged commit f1f7f09 into main Oct 28, 2026
1 check passed
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant