Resolve config paths relative to the target package directory instead
of the workspace root in readDatabaseClient, matching the behavior of
the rest of the config loading system.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
* fix(ui): use correct dark theme selector in Dialog
The Dialog component used [data-theme='dark'] while every other BUI
component and the global token system uses [data-theme-mode='dark'].
This mismatch meant the dark mode background rule never matched.
Signed-off-by: David Josefson <david.josefson@neo4j.com>
* Update .changeset/fix-dialog-dark-theme-selector.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: David Josefson <david.josefson@neo4j.com>
---------
Signed-off-by: David Josefson <david.josefson@neo4j.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Rename the JSON schema imports in kind definitions from `schema` to
`jsonSchema` to enable shorthand property syntax. Also remove the
stale scaffolder-backend changeset since that package no longer has
changes in this PR.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Change AsyncCatalogModelSourceGenerator from yielding
{ layers: CatalogModelLayer[] } to { data: Array<{ layer: CatalogModelLayer }> }
so that additional contextual data can be attached alongside each layer
in the future.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
* Add sample template for conditional output demo
Add a scaffolder template that exercises conditional `if` on output
links and text items, for testing issue #24805.
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Support conditional `if` on scaffolder output links and text
Add `if` property to output link and text items in scaffolder templates,
allowing template authors to conditionally show/hide output items based
on parameters or step results. Items with a falsy `if` condition are
filtered out before being sent to the frontend.
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Add changesets for conditional output feature
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Document conditional if on output links and text
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Guard against non-object items in output arrays
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Skip array items in output if-filtering destructuring
Add Array.isArray guard to prevent corrupting array items
into plain objects during the rest-destructuring step.
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Extract filterConditionalItems helper to deduplicate logic
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Align output if schema descriptions with step if semantics
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Fix docs quality check: replace 'falsy' wording
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
* Refactor filterConditionalItems to use flatMap and generics
Replace .filter().map() with a single flatMap call and make the function
generic to eliminate JsonArray casts at call sites.
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
---------
Signed-off-by: Dmitry Gusev <gusevda90@gmail.com>
These dependencies were added but never imported or used in the
package source or tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
- Use superRefine in jsonSchemaSchema to preserve the detailed error
message from validateMetaSchema instead of swallowing it
- Revert CatalogModelSources to silent dedup with uniqBy since user
layers intentionally take precedence over the default model
- Clean up unnecessary `as void` cast in ModelHolder iterator cleanup
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
- Close async iterators in ModelHolder after reading first value to
prevent resource leaks
- Catch exceptions from validateMetaSchema in Zod refine predicate
so validation errors flow through Zod's normal issue reporting
- Warn on duplicate catalog model layer IDs instead of silently
dropping later entries
- Replace `as any` with `as JsonObject` for schema import in
scaffolder template model layer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
- Remove unused deps @backstage/filter-predicates and zod-validation-error
from catalog-model
- Deduplicate defaultCatalogEntityModel by re-exporting from the single
source in model/defaultCatalogEntityModel.ts
- Fix typos: "Retuns"/"epxressed", "Obviopusly", "recorsively"
- Use domain-prefixed layer ID for scaffolder template model
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
fixup! Add summary types and listing methods to CatalogModel
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Introduce CatalogModelKindSummary, CatalogModelRelationSummary,
CatalogModelAnnotationSummary, CatalogModelLabelSummary, and
CatalogModelTagSummary as reduced views of the full model data.
Add listKinds(), listRelations(), and getMetadata() methods to
CatalogModel for retrieving these summaries. Add a new action for
fetching a markdown-formatted catalog model description, useful for
informing LLMs about the catalog structure.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
The function was a thin wrapper around validateCimdUrl that caught errors
and returned a boolean. It was never imported by any production code —
only by test files. Tests now use validateCimdUrl directly.
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Updated doc comments on ExtensionPoint.T and ServiceRef.T to reflect
that reading the value returns null rather than throwing. Expanded the
changeset to cover all three behavioral changes in the PR.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Change lastError type to unknown to match catch clause semantics,
and disconnect failed Keyv instances in attemptKeyvConnection to
avoid leaking sockets/handles during readiness polling.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Both `createExtensionPoint` and `createServiceRef` now consistently return
`null` from the phantom `.T` getter instead of throwing. Added `toJSON()` to
`ExtensionPoint` for parity with `ServiceRef`.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
The entity card override example used `name: 'entity-relations'` but
the actual extension uses `name: 'relations'`.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
The new `configSchema` option now strictly requires StandardSchemaV1
values (e.g. Zod v4 or `zod/v4` from the Zod v3 package). Direct Zod
v3 schemas are no longer silently converted and will throw an error.
The deprecated `config.schema` callback path continues to work with
Zod v3 through a separate `createDeprecatedConfigSchema` function.
Also adds `createZodV4FilterPredicateSchema` to `@backstage/filter-predicates`
as a v4 counterpart to the now-deprecated v3 variant.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Remove the `export` keyword from functions that are only used within
their own file and are not part of any package's public API:
- `parseStringsParam` and `isOrder` in notifications-backend
- `toWeb` in backend-defaults urlReader
- `resolvePublicPath` in app-backend
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
The constant was exported but never referenced in production code.
The only usage was in the test file, where it's now inlined.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Extract shared internal helpers to eliminate near-identical readiness
polling loops across database and cache test infrastructure:
- waitForReady: generic probe-until-ready loop used by both postgres
and mysql database helpers
- attemptKeyvConnection: generic Keyv set/get probe loop used by redis,
valkey, and memcached cache helpers
- startRedisLikeContainer: shared container-start for redis-protocol
stores (redis and valkey)
Also normalizes cache timeout error formatting to use stringifyError
instead of template string coercion.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor