Commit Graph

471 Commits

Author SHA1 Message Date
Patrik Oldsberg a0de7cf2b7 Merge pull request #31933 from backstage/upgrade-jsdom
chore: upgrade jsdom to v27 and Jest to v30
2025-12-15 16:01:01 +01:00
Patrik Oldsberg 9b8bde47d1 frontend-plugin-api: remove unnecessary dependencies
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-12-12 14:39:24 +01:00
Johan Persson cd0b8a11a3 chore: make jest a peer dependency with v29/v30 support
Move jest from dependencies to peer dependencies, allowing users to
choose between Jest 29 and Jest 30.

The CLI now detects the Jest version at runtime and uses the
appropriate environment:
- Jest 29: Uses standard jest-environment-jsdom
- Jest 30: Uses a custom environment based on @jest/environment-jsdom-abstract
  with fixes for Web API globals (fetch, streams, Error, etc.)

The cross-fetch polyfill is only injected for Jest 29, as with Jest 30+
our patched Jest environment is used. The network request blocker is made
MSW-compatible by checking if fetch was wrapped before blocking.

Jest 30 (with jsdom v27) fixes `Could not parse CSS stylesheet`
warnings/errors when testing components from @backstage/ui or other
packages using CSS `@layer` declarations.

New peer dependencies (install based on your Jest version):
- jest (required, ^29 or ^30)
- Jest 29 requires: jest-environment-jsdom
- Jest 30 requires: @jest/environment-jsdom-abstract, jsdom

Production code changes for jsdom 27 testability:
- AppIdentityProxy: extract navigateToUrl method for spying
- LiveReloadAddon: export utils.reloadPage for spying
- collect.ts: export internal.resolvePackagePath for mocking

MockFetchApi: evaluate global.fetch at call time instead of construction
time, allowing MSW to patch fetch after MockFetchApi is constructed.

Test adaptations for jsdom 27:
- Use RGB values instead of named colors in CSS assertions
- Update error format expectations (hyphenated type names, SyntaxError
  instead of FetchError for JSON parse errors)
- Simplify URL error assertions for cross-version compatibility
- Fix accessible name whitespace handling for external links
- Use history.replaceState for location mocking (non-configurable)
- Use fireEvent.blur for contentEditable elements
- Move async assertions inside waitFor for race conditions
- Remove Blob.prototype.text polyfill (now native)
- Remove test case using credentials in plugin:// URLs

Test adaptations for Jest 30:
- Replace `expect.objectContaining([...])` with direct array equality
- Replace `expect.objectContaining({ length: N })` with
  `expect.any(Array)` + separate `toHaveLength()` assertions
- Use child process for native Node.js module resolution in
  collect.test.ts to work around Jest 30's resolver behavior
- Update snapshot headers for new Jest format

Also removes the jest-haste-map patch which is no longer needed.

Signed-off-by: Johan Persson <johanopersson@gmail.com>
2025-12-11 18:06:55 +01:00
Patrik Oldsberg 75683ed6c0 frontend-plugin-api: new error boundary API option + boundary for app root elements
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-12-08 16:06:08 +01:00
Fredrik Adelöw f3f84f1e4b make .withOverrides have a simplified result type
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2025-12-03 16:51:12 +01:00
Patrik Oldsberg debd56dcf2 frontend-plugin-api: copy SignInPageProps
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-23 12:43:21 +01:00
Patrik Oldsberg 5fc53cb298 {core,frontend}-plugin-api: inverse dependency
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-23 01:59:06 +01:00
Patrik Oldsberg 0bc1ce919e frontend-plugin-api: fix input incompatibility crash
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-19 17:42:16 +01:00
Patrik Oldsberg 83439b1539 core-plugin-api: add forwards compatibility for route refs
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-18 10:26:20 +01:00
Patrik Oldsberg 4d03f08d19 frontend-plugin-api: refactor to use opaque type for route refs
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-18 10:26:20 +01:00
Patrik Oldsberg 7d87b4f6ad frontend-plugin-api: add OverridableExtensionDefinition
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-17 10:35:43 +01:00
Patrik Oldsberg c6b9f50337 frontend-plugin-api: type safe attachTo references
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-11 09:41:23 -05:00
Patrik Oldsberg 8b84f39946 frontend-plugin-api: runtime attachTo by reference
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-08 19:01:10 +01:00
Patrik Oldsberg 7c6a66dd9f frontend-plugin-api: add support for relative attachments
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-08 11:26:08 +01:00
Patrik Oldsberg 878c25146c frontend-plugin-api: make ExtensionInput type parameters optional
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-11-03 22:36:53 +01:00
Paul Schultz 05f60e1e0a refactor: convert constructor parameter properties for erasableSyntaxOnly compatibility
Signed-off-by: Paul Schultz <pschultz@pobox.com>
2025-10-14 08:29:21 -05:00
Vincenzo Scamporlino e557c5da94 Merge pull request #31353 from backstage/fix/not-found
NFS: fixed Not found page when a page extension is mounted on /
2025-10-13 16:14:35 +02:00
Vincenzo Scamporlino 1c43d5a7c7 frontend-plugin-api: minor expect improvements
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
2025-10-13 15:16:55 +02:00
Vincenzo Scamporlino 898859f41b frontend-plugin-api: migrate to renderTestApp
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
2025-10-07 21:45:03 +02:00
Patrik Oldsberg 8ed53eb466 frontend-plugin-api: add coreExtensionData.title
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-09-16 01:02:26 +02:00
Patrik Oldsberg d18818be84 Merge pull request #31082 from backstage/rugvip/errors
frontend-app-api: new error handling for app startup
2025-09-15 17:14:48 +02:00
Patrik Oldsberg 4907da392a frontend-test-utils: updated to use and report errors via error collector
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-09-08 12:38:36 +02:00
Yannik Daellenbach f6309a56d9 Forward openshiftAuthApiRef to the new frontend system
Signed-off-by: Yannik Daellenbach <git@daellenbach.org>
2025-09-02 14:08:17 +02:00
Patrik Oldsberg 2fb8b04f79 frontend-plugin-api: improve type errors for createFrontend{Plugin,Module}
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-31 10:21:44 +02:00
Patrik Oldsberg 12b6db78eb frontend-plugin-api: add OverridableFrontendPlugin type
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-15 20:29:04 +02:00
benjdlambert d274e0c90e feat: updating name for default swappable refs
Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-11 13:41:27 +02:00
Camila Belo 89d587026c Merge pull request #30816 from backstage/camilaibs/make-app-node-spec-plugin-required
[NFS] frontend-plugin-api: make app spec plugin required
2025-08-11 10:33:34 +02:00
Patrik Oldsberg 3bc9c96572 frontend-plugin-api: tsdoc review fixes
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-08 16:48:47 +02:00
Patrik Oldsberg bd55cc941f frontend-plugin-api: TsDoc for createFrontendModule
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-08 15:09:50 +02:00
Patrik Oldsberg 5a29c86a92 frontend-plugin-api: TsDoc for createFrontendPlugin
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-08 15:09:50 +02:00
Patrik Oldsberg f416e9f499 frontend-plugin-api: TsDoc for createExtensionBlueprint
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-08 15:09:50 +02:00
Patrik Oldsberg d84d3e3892 frontend-plugin-api: TsDoc for createExtension
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-08 15:09:50 +02:00
Fredrik Adelöw 10bb855e1c Merge pull request #30813 from backstage/freben/advanced-options
Arrange most `create[Specialized]App` options into an `advanced` field
2025-08-08 15:09:05 +02:00
Patrik Oldsberg 3588639a53 Merge pull request #30838 from backstage/rugvip/maybe
frontend-plugin-api: tweak return type of createSwappableComponent
2025-08-08 14:57:40 +02:00
Patrik Oldsberg ad43c95ecd Merge pull request #30828 from backstage/rugvip/nfs-type-cleanup
frontend-plugin-api: stop exporting ResolveInputValueOverrides
2025-08-08 14:48:30 +02:00
Patrik Oldsberg 1cf1e141d7 frontend-plugin-api: tweak return type of createSwappableComponent
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-08 14:43:34 +02:00
Ben Lambert 92827cbd98 Merge pull request #30750 from backstage/mob/component-refs-wth
`nfs(componentRefs)`: Reworking how Component Refs are defined and used
2025-08-08 12:52:36 +02:00
benjdlambert e0fd7f4046 chore: overriden -> overridden
Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-08 12:10:15 +02:00
benjdlambert f4b9fd74ca chore: some changeset tweaks a few other changes
Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-08 12:08:23 +02:00
Patrik Oldsberg f433c72b52 frontend-plugin-api: rename to ResolvedInputValueOverrides
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-07 17:28:32 +02:00
Patrik Oldsberg 1e6410b770 frontend-plugin-api: stop exporting ResolveInputValueOverrides
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-07 17:26:16 +02:00
benjdlambert 8a19aba608 chore: add deps
Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-07 17:12:46 +02:00
Patrik Oldsberg bcf1ac06b6 Merge pull request #30822 from backstage/rugvip/noid
frontend-plugin-api: remove deprecated variant of createFrontendPlugin
2025-08-07 16:50:21 +02:00
benjdlambert de3ad4aced chore: fixing tests
Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-07 16:49:07 +02:00
Patrik Oldsberg 6a75e00b14 frontend-plugin-api: remove deprecated variant of createFrontendPlugin
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2025-08-07 16:34:40 +02:00
benjdlambert 20f1d88971 chore: some more refactor to get ready for shipping
Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-07 15:58:03 +02:00
benjdlambert 75ea6f14c5 feat: refactor to error display instead
Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-07 15:58:03 +02:00
benjdlambert 4b3ba2b048 chore: make more things swoppable
Signed-off-by: benjdlambert <ben@blam.sh>

Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-07 15:58:03 +02:00
benjdlambert d996f05ae5 chore: adaptable -> swappable
Signed-off-by: benjdlambert <ben@blam.sh>

Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-07 15:58:03 +02:00
benjdlambert 3a34fb4cc7 chore: fixing types
Signed-off-by: benjdlambert <ben@blam.sh>
2025-08-07 15:58:03 +02:00